การตั้งค่า MapLibre
คำแนะนำในการใช้ MapLibre Native Android ผ่าน MapConductor MapLibre เองไม่มีคีย์ API และรูปลักษณ์ของแผนที่ขึ้นอยู่กับแหล่งที่มาของ Style JSON นี่คือผู้ให้บริการที่สามารถทำงานได้ด้วยขั้นตอนที่สั้นที่สุด
ก่อนเริ่ม
กำหนดแหล่งที่มาของไทล์
MapLibre เป็นตัวเรนเดอร์ไม่ใช่ผู้ให้บริการไทล์ สำหรับการทดสอบการทำงานเท่านั้น Style สาธิตของ MapLibreDesign ก็เพียงพอ แต่ในการใช้งานจริงคุณต้องเลือกแหล่งที่มาอย่างชัดเจน
- ฟรี / ชุมชน: ไทล์ตาม OpenStreetMap, Protomaps (รองรับการโฮสต์เอง)
- เชิงพาณิชย์: MapTiler Cloud, Stadia Maps (ทั้งสองมีโควต้าฟรี)
- Self-hosting: ส่งมอบด้วยตัวเอง เช่น ด้วย tileserver-gl
เพิ่มการพึ่งพา
เนื่องจาก MapLibre SDK สามารถรับได้จาก Maven Central จึงไม่จำเป็นต้องมีการกำหนดค่า repository เพิ่มเติม
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
mavenCentral()
}
}dependencies {
// MapLibre Native Android SDK
implementation("org.maplibre.gl:android-sdk:13.4.1")
// MapConductor BOM pins every module below
implementation(platform("com.mapconductor:mapconductor-bom:1.3.1"))
implementation("com.mapconductor:core")
implementation("com.mapconductor:for-maplibre")
}เพิ่มสิทธิ์ลงใน Manifest
เนื่องจากไม่มีการใส่คีย์ สิ่งที่จำเป็นคือเฉพาะสิทธิ์การเข้าถึง
<manifest>
<!-- Add internet permission for tile loading -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<application>
<!-- no key to inject for MapLibre -->
</application>
</manifest>ตรวจสอบ
สิ่งที่ควรเห็น
แสดงแผนที่โดยระบุ Style หากไทล์โหลดและซูม พาน และหมุนได้ ถือว่าเสร็จสมบูรณ์
@Composable
fun TestMapLibre(modifier: Modifier = Modifier) {
val mapState = rememberMapLibreMapViewState(
cameraPosition = MapCameraPosition(
position = GeoPoint(35.6762, 139.6503),
zoom = 12.0,
),
mapDesign = MapLibreDesign.OpenMapTiles,
)
// If the map appears, the setup is correct.
MapLibreMapView(modifier = modifier, state = mapState)
}ดีไซน์แผนที่
MapLibreDesign เป็นค่าคงที่ที่ห่อหุ้ม URL ของ Style JSON หากคุณใช้ Style ของตัวเอง ให้สร้างค่าของประเภทเดียวกันแล้วส่งผ่าน
การแก้ปัญหา
แผนที่ยังคงขาวสะอาด
- ตรวจสอบว่าเข้าถึง URL ของ Style ได้หรือไม่ และ JSON ถูกต้องหรือไม่
- ตรวจสอบว่าได้รับสิทธิ์ INTERNET หรือไม่
- ดูใน Logcat ว่ามีข้อผิดพลาดเกี่ยวกับเครือข่ายหรือการแยกวิเคราะห์หรือไม่
โหลดได้เฉพาะไทล์ไม่ได้
- ตรวจสอบ URL ของเซิร์ฟเวอร์ไทล์
- ตรวจสอบว่าคุณถึงขีดจำกัดอัตราของบริการฟรีหรือไม่
- หากคุณใช้ผู้ให้บริการเชิงพาณิชย์ ให้ตรวจสอบว่าคีย์ที่ฝังใน URL ของ Style ถูกต้องหรือไม่
บิลด์ไม่ผ่าน
- ตรวจสอบว่าพิกัดและเวอร์ชันของ Map SDK ตรงกับที่ระบุใน Version Catalog หรือไม่
- ตรวจสอบว่ามีคำจำกัดความของ Repository อยู่ใน settings.gradle.kts หรือไม่ (หาก repositoriesMode เป็น FAIL_ON_PROJECT_REPOS จะมีการละเว้น repositories ฝั่งโมดูล)
- หากมี Map SDK หลายตัวติดตั้งอยู่พร้อมกัน ให้ตรวจสอบว่ามีความขัดแย้งของการพึ่งพาหรือไม่โดยใช้ ./gradlew :app:dependencies
ถัดไป
Vector Tiles มีน้ำหนักเบากว่า Raster และเรนเดอร์เร็วกว่า หากจำเป็นต้องใช้งานแบบออฟไลน์ โปรดพิจารณาการแคช Tiles