เอกสาร / พื้นฐาน / มาร์กเกอร์

มาร์กเกอร์

สำหรับมาร์กเกอร์ เพียงสร้างออบเจ็กต์สถานะหนึ่งรายการแล้ววางลงในมุมมองแผนที่ การวาดจะดูแลโดยเอนจิ้นการเรนเดอร์ภายใน SDK ซึ่งจะสลับวิธีการวาดโดยอัตโนมัติตามจำนวน โดยค่าเริ่มต้นจนถึง 2,000 รายการจะเป็นมาร์กเกอร์มาตรฐานของแต่ละ SDK แผนที่ และหากเกินจำนวนนั้นจะเป็นไทล์แรสเตอร์ ค่าเกณฑ์นี้สามารถเปลี่ยนแปลงได้โดยส่งตัวเลือกการวาดไทล์ไปยังมุมมองแผนที่

ANDROID
com.mapconductor:core
iOS
MapConductorCore
REACT
@mapconductor/js-sdk-react
แพลตฟอร์ม

01 · สถานะมาร์กเกอร์

MarkerState แทนมาร์กเกอร์รายการเดียว มีตำแหน่ง ไอคอน เหตุการณ์ และข้อมูลเสริมใดๆ หากแก้ไขคุณสมบัติ จะมีผลทันที ไม่มีประเภทเฉพาะผู้ให้บริการ

MarkerState · Jetpack Compose
val marker =
    MarkerState(
        position = GeoPoint.fromLatLong(21.3069, -157.8583),
        icon = DefaultMarkerIcon(fillColor = Color.Red, label = "A"),
        extra = postOffice,
        onClick = { clicked -> viewModel.onMarkerClick(clicked) },
    )

// Assigning to a property is all it takes to redraw
marker.position = nextPoint
คุณสมบัติ
คำอธิบาย
position
ละติจูดและลองจิจูด หากเปลี่ยนแปลง มาร์กเกอร์จะเคลื่อนที่
icon
ไอคอน หากไม่ระบุ จะเป็นปักหมุดเริ่มต้น
extra
ข้อมูลเสริมใดๆ จะได้รับเมื่อแตะและใช้สำหรับสิ่งต่างๆ เช่น บับเบิลข้อมูล
clickable / draggable
การแตะได้และการลากได้
zIndex
ลำดับการซ้อนทับ ค่าเริ่มต้นสำหรับแต่ละมาร์กเกอร์ไม่ได้ตั้งค่าไว้ (null) ในทั้ง 3 แพลตฟอร์ม และหากไม่ได้ตั้งค่า จะซ้อนทับกันโดยอัตโนมัติตามละติจูด เลเยอร์มาร์กเกอร์ทั้งหมดจะถูกวางไว้ที่ 10
onClick / onDrag…
ตัวจัดการสำหรับการแตะ การลาก และการเริ่มต้นและสิ้นสุดของภาพเคลื่อนไหว

02 · ไอคอน

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

03 · เอนจิ้นการเรนเดอร์ภายใน

การวาดมาร์กเกอร์ได้รับการมอบหมายให้เอนจิ้นการเรนเดอร์ภายในของ SDK ขณะที่จำนวนยังน้อย จะใช้มาร์กเกอร์มาตรฐานของ SDK แผนที่แต่ละตัวโดยตรง ซึ่งจะใช้การตรวจจับการแตะและภาพเคลื่อนไหวแบบเนทีฟอย่างเต็มที่

เมื่อมาร์กเกอร์เกิน 2,000 รายการ เอนจิ้นจะเปลี่ยนวิธีการวาด กลุ่มมาร์กเกอร์จะถูกเรนเดอร์เป็นภาพไทล์และซ้อนทับเป็นเลเยอร์แรสเตอร์ ช่วยกำจัดต้นทุนในการเพิ่มและอัปเดตทีละรายการใน SDK แบบเนทีฟ โค้ดฝั่งแอปจะไม่มีการเปลี่ยนแปลงใดๆ

รูป · วิธีการวาดเปลี่ยนไปตามจำนวน
≤ 2,000

มาร์กเกอร์มาตรฐาน

สร้างมาร์กเกอร์เนทีฟทีละรายการ การแตะ ลาก และแอนิเมชันเป็นไปตามพฤติกรรมของแพลตฟอร์มทุกประการ
2,000+
> 2,000

ไทล์แบบราสเตอร์

มาร์กเกอร์ถูกวาดลงไทล์แล้ววางซ้อนเป็นเลเยอร์ราสเตอร์ เมื่อไม่มีการอัปเดตรายมาร์กเกอร์ การขยับกล้องจึงลื่นแม้มีหลายหมื่นจุด
การสลับเป็นอัตโนมัติ ค่าเริ่มต้นของเกณฑ์คือ 2,000 รายการ ส่งอ็อปชันให้มุมมองแผนที่ (markerTiling บน Android และ markerTilingOptions บน iOS กับ React) เพื่อเปลี่ยน minMarkerCount ได้ และอ็อปชันชุดเดียวกันยังคุมแคชไทล์กับอัตราขยายไอคอนตามระดับซูม หากตั้งเป็น Disabled จะใช้มาร์กเกอร์มาตรฐานเสมอ
วิดีโอตัวอย่าง · การวาดไทล์มาร์กเกอร์
ตัวอย่าง · แสดง 24,526 รายการพร้อมกัน
minMarkerCount
2000 · เปลี่ยนแปลงได้
cacheSize
8 MB
enabled
true
debugTileOverlay
false
PostOfficeViewModel.kt · 24,526 รายการ
// On by default; pass it to the map view to change the threshold
// (the Android parameter is called markerTiling)
val markerTiling =
    MarkerTilingOptions.Default.copy(
        minMarkerCount = 500, // switch to tile rendering from 500 markers
        iconScaleCallback = { _, zoom ->
            if (zoom > 10) 0.8 else if (zoom > 5) 0.5 else 0.2
        },
    )

GoogleMapView(state = mapViewState, markerTiling = markerTiling) { /* markers */ }

// Disable it to keep native markers at any count
val plain = MarkerTilingOptions.Disabled

04 · ภาพเคลื่อนไหว

ภาพเคลื่อนไหวแบบง่ายมีให้โดยค่าเริ่มต้น ระบุเมื่อสร้าง หรือเพียงเรียก animate() ภายหลัง การเริ่มต้นและสิ้นสุดสามารถรับได้ผ่านตัวจัดการ

AnimationPageViewModel.kt
// Set one at creation, or call animate() later
MarkerState(position = point, animation = MarkerAnimation.Bounce)

override fun onMarkerClick(clicked: MarkerState) {
    clicked.animate(clicked.extra as? MarkerAnimation)
}

เนื่องจากมาร์กเกอร์ระหว่างแอนิเมชันจะถูกวาดด้วยเลเยอร์โอเวอร์เลย์เฉพาะ จึงเคลื่อนไหวได้แม้ว่าสถานะจะเปลี่ยนเป็นการวาดไทล์ ระยะเวลาสามารถเปลี่ยนแปลงได้ในการตั้งค่า SDK

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