เอกสาร / การตั้งค่า / Android / MapLibre

การตั้งค่า MapLibre

คำแนะนำในการใช้ MapLibre Native Android ผ่าน MapConductor MapLibre เองไม่มีคีย์ API และรูปลักษณ์ของแผนที่ขึ้นอยู่กับแหล่งที่มาของ Style JSON นี่คือผู้ให้บริการที่สามารถทำงานได้ด้วยขั้นตอนที่สั้นที่สุด

MODULE
com.mapconductor:for-maplibre
API KEY
ไม่จำเป็น
VIEW
MapLibreMapView
TIME
5 นาที
ผู้ให้บริการเดียวกัน แพลตฟอร์มอื่นiOSReact

ก่อนเริ่ม

สภาพแวดล้อมการพัฒนา Android (Android Studio)
URL ของ Style JSON (เทิร์นไทล์สาธิต บริการเชิงพาณิชย์ หรือโฮสต์เอง)
STEP 01

กำหนดแหล่งที่มาของไทล์

MapLibre เป็นตัวเรนเดอร์ไม่ใช่ผู้ให้บริการไทล์ สำหรับการทดสอบการทำงานเท่านั้น Style สาธิตของ MapLibreDesign ก็เพียงพอ แต่ในการใช้งานจริงคุณต้องเลือกแหล่งที่มาอย่างชัดเจน

  1. ฟรี / ชุมชน: ไทล์ตาม OpenStreetMap, Protomaps (รองรับการโฮสต์เอง)
  2. เชิงพาณิชย์: MapTiler Cloud, Stadia Maps (ทั้งสองมีโควต้าฟรี)
  3. Self-hosting: ส่งมอบด้วยตัวเอง เช่น ด้วย tileserver-gl
ข้อควรระวัง
เทิร์นไทล์สาธิตมีไว้สำหรับทดสอบการทำงานเท่านั้น อย่าส่งการรับส่งข้อมูลของการใช้งานจริงผ่านช่องทางนี้ นอกจากนี้ ผู้ให้บริการไทล์ส่วนใหญ่ต้องการการระบุแหล่งที่มา (เช่น © OpenStreetMap contributors) โปรดตรวจสอบเงื่อนไขการใช้งานและแสดงใน UI
STEP 02

เพิ่มการพึ่งพา

เนื่องจาก MapLibre SDK สามารถรับได้จาก Maven Central จึงไม่จำเป็นต้องมีการกำหนดค่า repository เพิ่มเติม

settings.gradle.ktsKotlin
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
    }
}
app/build.gradle.ktsKotlin
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")
}
STEP 03

เพิ่มสิทธิ์ลงใน Manifest

เนื่องจากไม่มีการใส่คีย์ สิ่งที่จำเป็นคือเฉพาะสิทธิ์การเข้าถึง

AndroidManifest.xmlXML
<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>
ในแอปที่ไม่ใช้ตำแหน่งที่ตั้ง ไม่จำเป็นต้องมีสิทธิ์ ACCESS_*_LOCATION สำหรับการรับไทล์จำเป็นต้องมีเพียง INTERNET เท่านั้น

ตรวจสอบ

สิ่งที่ควรเห็น

แสดงแผนที่โดยระบุ Style หากไทล์โหลดและซูม พาน และหมุนได้ ถือว่าเสร็จสมบูรณ์

TestMapLibre.ktJetpack Compose
@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 ของตัวเอง ให้สร้างค่าของประเภทเดียวกันแล้วส่งผ่าน

MapLibreDesign
Notes
DemoTiles
เทิร์นไทล์สาธิตอย่างเป็นทางการของ MapLibre ทำงานได้เร็วที่สุดโดยไม่ต้องใช้คีย์
OsmBright / OsmBrightEn / OsmBrightJa
OSM Bright ภาษาของป้ายกำกับต่างกัน
MapTilerTonerEn / MapTilerTonerJa
สไตล์ Toner คอนทราสต์สูง
MapTilerBasicEn / MapTilerBasicJa
สไตล์ Basic ที่ลดปริมาณข้อมูลลง
OpenMapTiles
สไตล์ OpenMapTiles ทั่วไป

การแก้ปัญหา

แผนที่ยังคงขาวสะอาด

  • ตรวจสอบว่าเข้าถึง 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