เอกสาร / มุมมองแผนที่ / การออกแบบแผนที่

สลับการออกแบบแผนที่ (ไทล์)

รูปลักษณ์ของแผนที่ถูกกำหนดด้วย mapDesignType เพียงอย่างเดียว เลือกพรีเซ็ตที่เตรียมไว้สำหรับแต่ละผู้ให้บริการ หรือระบุ URL ของ Style JSON และ URL ของไทล์เพื่อกำหนดการออกแบบที่กำหนดเอง การสลับเพียงแค่กำหนดค่าให้กับพร็อพเพอร์ตี้ ไม่จำเป็นต้องสร้างแผนที่ใหม่

ANDROID
com.mapconductor:core
iOS
MapConductorCore
REACT
@mapconductor/js-sdk-core

01 · ประเภทของการออกแบบ

การออกแบบของผู้ให้บริการใดๆ จะใช้งาน MapDesignTypeInterface (ใน iOS คือ MapDesignTypeProtocol) หากจำเพียงสามองค์ประกอบหลักเหล่านี้ วิธีการใช้งานจะเหมือนกันแม้ว่าผู้ให้บริการจะเปลี่ยนไป

id

ค่าสำหรับระบุการออกแบบ เป็นค่าเนทีฟของผู้ให้บริการ (เช่น ค่าคงที่ mapType ของ Google) หรือสตริง

getValue()

ค่าจริงที่ส่งไปยังเอ็นจิ้นแผนที่ของผู้ให้บริการ ประกอบด้วย URL ของ Style JSON หรือคำนิยามของไทล์

attributionRules

กฎสำหรับสลับการแสดงที่มาของข้อมูลตามระดับการซูมและพื้นที่แสดงผล จำเป็นเมื่อใช้ไทล์ที่กำหนดเอง

02 · พรีเซ็ต

ในแพ็กเกจของผู้ให้บริการแต่ละราย มีการออกแบบมาตรฐานที่ใช้ได้กับผู้ให้บริการนั้นๆ อยู่ในรูปแบบค่าคงที่ แอปตัวอย่างใช้รายการนี้ตรงๆ เป็นตัวเลือก

ผู้ให้บริการ
ประเภท
พรีเซ็ต
Google Maps
GoogleMapDesign
Normal · Satellite · Hybrid · Terrain · None
MapLibre
MapLibreDesign
DemoTiles · OsmBright / En / Ja · MapTilerBasicEn / Ja · MapTilerTonerEn / Ja · OpenMapTiles(9)
MapKit
iOS · React
MapKitMapDesign
Standard · Satellite · Hybrid · SatelliteFlyover · HybridFlyover · MutedStandard
Mapbox
MapboxMapDesign
React: MapboxDesign
Standard · StandardSatellite · Streets · Outdoors · Light · Dark · Satellite · SatelliteStreets · NavigationDay / Night
บน React: Streets · Outdoors · Light · Dark · SatelliteStreets และสไตล์ JSON ตระกูล OsmBright / MapTiler
MapTiler
MapTilerDesign
Streets · StreetsDark · StreetsLight · Basic · Bright · Satellite · Outdoor · Winter · Topo · Toner · Dataviz · Backdrop · Ocean · Landscape · Aquarelle · OpenStreetMap(16)
HERE
HereMapDesign
NormalDay / Night · Satellite · HybridDay / Night · LiteDay / Night · LiteHybridDay / Night · LogisticsDay / Night · LogisticsHybridDay · RoadNetworkDay / Night (14 รายการ บน iOS มี 15 โดยรวม LogisticsHybridNight)
ArcGIS
ArcGISDesign
iOS / React: ArcGISMapDesign
Streets · Imagery · Topographic · Navigation · Nova · Newspaper · HumanGeography… · OsmStandard …(61)
TomTom
TomTomMapDesign
React: TomTomDesign
Standard · Driving · Satellite
React มีเพิ่มอีก StandardLight / Dark · DrivingLight / Dark · MonoLight / Dark
Longdo
LongdoDesign
Normal · Easy · Pastel · PastelGray · Hard · Gray · Light · Night · Dark · Political · Osm · Satellite · Hybrid(13)
Leaflet
React
LeafletDesign
OpenStreetMap · None + ไทล์ XYZ แบบกำหนดเอง
OpenLayers
React
OpenLayersDesign
OpenStreetMap · None + ไทล์ XYZ แบบกำหนดเอง
Azure Maps
React
AzureMapsDesign
Road · RoadShadedRelief · Blank · BlankAccessible · Satellite · SatelliteRoadLabels · GrayscaleDark / Light · Night · HighContrastDark / Light(12)
Cesium
React
CesiumDesign
Default · None

จะแสดงหมายเหตุเฉพาะสิ่งที่แตกต่างกันระหว่างแพลตฟอร์มเท่านั้น แถวที่ไม่มีหมายเหตุ ชื่อประเภทและชื่อค่าคงที่ของพรีเซ็ตจะเหมือนกันในทั้ง 3 แพลตฟอร์ม

แพลตฟอร์ม

03 · การสลับ

กำหนดค่าให้กับ mapDesignType ของออบเจกต์สถานะในมุมมองแผนที่ เนื่องจากสถานะถูกตรวจสอบอยู่ รูปลักษณ์ของแผนที่จะเปลี่ยนแปลงทันทีที่กำหนดค่า

MapDesignMapPage.kt · Jetpack Compose
// state เป็น MapViewStateInterface<*> ให้แคบลงเป็นชนิดของผู้ให้บริการก่อนกำหนดค่า
when (state) {
    is GoogleMapViewStateInterface ->
        state.mapDesignType = GoogleMapDesign.Satellite
    is MapLibreViewStateInterface ->
        state.mapDesignType = MapLibreDesign.OsmBrightJa
    is MapTilerViewStateInterface ->
        state.mapDesignType = MapTilerDesign.Toner
}

04 · กำหนดการออกแบบที่กำหนดเอง

ประเภทของพรีเซ็ตถูกเปิดเผยเป็นคอนสตรัคเตอร์โดยตรง หากส่งค่า ID และ URL ของ Style JSON (ประเภทเวกเตอร์) หรือเทมเพลต URL ของไทล์ (ประเภทแรสเตอร์) คุณสามารถใช้สไตล์ของบริษัทหรือไทล์ของ GSI เหมือนกับพรีเซ็ตได้

CustomDesigns.kt · MapLibre / กำหนดด้วย Style JSON
// MapLibreDesign เป็น data class เพียงส่ง URL ของ style JSON ก็ได้ดีไซน์ของคุณเอง
val GsiPale =
    MapLibreDesign(
        id = "gsi-pale",
        styleJsonURL = "https://example.com/styles/gsi-pale/style.json",
        attributionRules =
            listOf(
                AttributionRule(attribution = "ไทล์ของ GSI"),
                AttributionRule(attribution = "GEBCO", minZoom = 5, maxZoom = 8),
            ),
    )
MapDesignPageViewModel.kt · ผสมใส่ในตัวเลือก
private val mapLibreDesigns =
    listOf(
        MapDesignOption(label = "OsmBright", design = MapLibreDesign.OsmBright),
        MapDesignOption(label = "GSI Pale", design = GsiPale),
    )
GoogleMapDesign.Custom · ห่อค่าดั้งเดิม
// ห่อค่าคงที่ mapType ของเนทีฟไว้ตามเดิม แล้วเติมเฉพาะการระบุแหล่งที่มา
val NormalWithNotice =
    GoogleMapDesign.Custom(
        id = MAP_TYPE_NORMAL,
        attributionRules = listOf(AttributionRule(attribution = "ข้อมูลของเราเอง 2026")),
    )

สำหรับผู้ให้บริการที่ประเภทของแผนที่ถูกกำหนดโดยค่าคงที่ของระบบ (เช่น Google Maps) ให้ใช้ GoogleMapDesign.Custom และส่งค่าคงที่ไปที่ id เพื่อเปลี่ยนเฉพาะการแสดงที่มา MapTiler, Mapbox, HERE ฯลฯ ก็มีคอนสตรัคเตอร์ในรูปแบบเดียวกัน

05 · การระบุแหล่งที่มา (attributionRules)

เมื่อใช้ไทล์ที่กำหนดเอง ให้ระบุเงื่อนไขการแสดงชื่อของผู้ให้บริการไทล์เป็นกฎ จะมีการเลือกเฉพาะชื่อที่จำเป็นตามการซูมและช่วงการแสดงผลของกล้องโดยอัตโนมัติ

attribution
สตริงที่จะแสดง สามารถส่ง HTML ที่มีลิงก์ได้
minZoom / maxZoom
ช่วงการซูมที่จะแสดงชื่อ นอกช่วงจะถูกซ่อนโดยอัตโนมัติ
bounds
ช่วงสี่เหลี่ยมที่จะแสดงชื่อ ใช้สำหรับไทล์ในประเทศญี่ปุ่น เป็นต้น

06 · แอปตัวอย่าง

ทั้ง 3 แพลตฟอร์มมี UI สำหรับสลับดีไซน์ โครงสร้างของ UI เป็นการใช้งานตรงไปตรงมาสำหรับแต่ละแพลตฟอร์ม และมีเฉพาะกระบวนการมอบหมายค่าที่เหมือนกัน

Map design ▾
ANDROID · ExposedDropdownMenu
Map design ⌄
iOS · SwiftUI Menu
<select>
REACT · map-design-selector
การใช้งานในวิดีโอ · Android + MapLibreKotlin · Jetpack Compose
val mapViewState = rememberMapLibreMapViewState(
    mapDesign = MapLibreDesign.DemoTiles,
    cameraPosition = MapCameraPosition(
        position = GeoPoint.fromLatLong(21.382314, -157.933097),
        zoom = 12.0,
    ),
)

val designs = listOf(
    "Demo" to MapLibreDesign.DemoTiles,
    "OSM Bright" to MapLibreDesign.OsmBrightJa,
    "Toner" to MapLibreDesign.MapTilerTonerJa,
)

MapLibreMapView(state = mapViewState, modifier = Modifier.weight(1f))

Row {
    designs.forEach { (label, design) ->
        // Just an assignment. The map is not rebuilt, so the camera stays where it is
        Button(onClick = { mapViewState.mapDesignType = design }) { Text(label) }
    }
}
วิดีโอตัวอย่าง · การสลับดีไซน์
ยังไม่ได้ถ่ายวิดีโอสลับ mapDesignType บนแผนที่เดิม และดูว่าเพร็ตเซ็ตถูกนำไปใช้ตามลำดับอย่างไร จุดสำคัญคือช่วงเวลาที่เปลี่ยนไปเอง

หน้าที่เกี่ยวข้อง