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

GroundImage — วางภาพลงบนแผนที่

กําหนดช่วงด้วยสองจุด (ตะวันตกเฉียงใต้และตะวันออกเฉียงเหนือ) แล้ววางภาพไว้ที่นั่น แผนผังชั้นของสิ่งอํานวยความสะดวก แผนที่เก่า ภาพถ่ายทางอากาศ แผนที่เชดเดดที่สร้างขึ้นเอง ฯลฯ สามารถวางซ้อนภาพที่ไม่ได้แบ่งเป็นไทล์ลงบนแผนที่ได้โดยตรง สามารถแก้ไขช่วงและความโปร่งแสงได้ในภายหลัง และภาพจะยังคงแสดงผลติดอยู่กับพื้นดินตามการจัดการกล้อง

BOUNDS
SW / NE
IMAGE
image / url
OPACITY
0.0 – 1.0
TILE SIZE
512 · เมื่อเรนเดอร์ไทล์เท่านั้น
แพลตฟอร์ม

01 · สถานะของ GroundImage

GroundImageState แสดงถึงภาพเพียงภาพเดียว มีช่วง ภาพ ความโปร่งแสง และตัวจัดการการแตะ คุณสามารถส่งภาพได้ในรูปแบบที่เป็นธรรมชาติสําหรับแต่ละแพลตฟอร์ม (Android ใช้ Drawable, iOS ใช้ UIImage, Web ใช้ URL)

GroundImageMapPageViewModel.kt · Jetpack Compose
val groundImageState =
    GroundImageState(
        id = "groundImage",
        bounds =
            GeoRectBounds(
                southWest = southWestPosition,
                northEast = northEastPosition,
            ),
        image = drawable,       // ส่ง Drawable ไปตรง ๆ
        opacity = 0.5f,
        onClick = this::onGroundImageClick,
    )

GroundImage(groundImageState)
คุณสมบัติ
คําอธิบาย
bounds
ช่วงสี่เหลี่ยมที่วางภาพ กําหนดด้วยสองจุด: ตะวันตกเฉียงใต้และตะวันออกเฉียงเหนือ
image / imageUrl
ภาพที่จะแสดง บน Android ส่งเป็น Drawable, บน iOS ส่งเป็น UIImage และบน Web ส่งเป็น URL ของภาพ
opacity
ความทึบ 0.0 คือโปร่งแสงโดยสมบูรณ์ 1.0 คือทึบ ลดค่าลงเมื่อต้องการซ้อนทับกับแผนที่ฐาน
tileSize
ความยาวด้านข้างของไทล์เดียวเมื่อเรนเดอร์เป็นไทล์แรสเตอร์ ไม่ได้ใช้กับผู้ให้บริการที่เรนเดอร์ภาพซ้อนทับแบบเนทีฟ คุณสามารถใช้ค่าเริ่มต้น 512 ได้โดยไม่มีปัญหา
extra
ข้อมูลเพิ่มเติมตามต้องการ สามารถรับได้เมื่อแตะ
onClick
ตัวจัดการการแตะ รับสถานะของภาพและพิกัดที่แตะ

02 · ช่วงและความโปร่งแสง

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

SW
NE
จุดตะวันตกเฉียงใต้ (SW) และตะวันออกเฉียงเหนือ (NE) กำหนดสี่เหลี่ยมนี้ ส่วนเส้นกรอบและมาร์กเกอร์ในภาพเป็นโค้ดของแอปตัวอย่าง
BOUNDS

สร้างช่วงใหม่ด้วยการลาก

หากสลับ bounds ระหว่างการลากเครื่องหมายสองจุด ภาพจะตามไปด้วย อย่างไรก็ตาม ความสามารถในการอัปเดตแบบต่อเนื่องแตกต่างกันไปในแต่ละผู้ให้บริการ

OPACITY

วางซ้อนกับแผนที่พื้นฐาน

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

ตัวอย่าง · ซ้อนทับแผนที่เก่าให้พอดีกับช่วง
เปลี่ยนช่วงและความโปร่งแสง
// ลากมาร์กเกอร์ที่มุมเพื่อสร้างขอบเขตใหม่
override fun onMarkerDrag(dragged: MarkerState) {
    when (dragged.id) {
        "south_west" -> southWestPosition = GeoPoint.from(dragged.position)
        "north_east" -> northEastPosition = GeoPoint.from(dragged.position)
    }
    bounds = GeoRectBounds(southWest = southWestPosition, northEast = northEastPosition)
}

// ความทึบเพียงกำหนดค่าลงไปตรง ๆ
groundImageState.opacity = sliderOpacity

03 · ดูเหมือนกันในทุกผู้ให้บริการ

GroundImage เป็นฟีเจอร์ที่มีความแตกต่างในการนําไปใช้งานมากที่สุดในบรรดาไดรเวอร์ SDK แผนที่ต่างๆ กลไกการวางซ้อนภาพแตกต่างกันไปมากในแต่ละเอ็นจิ้น และบางตัวไม่มีฟีเจอร์ที่เทียบเคียงได้เลย MapConductor จะพยายามดูดซับความแตกต่างนี้ให้มากที่สุด แต่ผู้ให้บริการบางรายอาจยังมีข้อจํากัดในการเปลี่ยนแปลงแบบไดนามิก

PLACEMENT

ช่วงเดียวกัน การยืดเดียวกัน

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

NATIVE FIRST

วาดด้วยฟังก์ชันดั้งเดิมก่อน

ไดรเวอร์แต่ละตัวจะวาดให้เหมาะสมที่สุดโดยใช้ฟังก์ชันการวางภาพซ้อนทับเฉพาะของ SDK แผนที่นั้นๆ ให้มากที่สุด (เช่น ArcGIS ใช้ MediaLayer + ImageElement, Cesium ใช้วัสดุภาพสำหรับ Rectangle เป็นต้น) สำหรับเอ็นจิ้นที่ไม่มีฟังก์ชันที่เทียบเท่าเท่านั้น จะตัดภาพและจัดหาเป็นไทล์ แล้ววางซ้อนเป็นเลเยอร์แรสเตอร์ โค้ดฝั่งแอปพลิเคชันจะไม่เปลี่ยนแปลงไม่ว่าจะใช้เส้นทางใด

LIMITATIONS

ข้อจำกัดตามผู้ให้บริการ

การสร้างช่วงใหม่ (การอัปเดตแบบต่อเนื่องระหว่างการลาก) หรือการเปลี่ยนความทึบ อาจมีข้อจำกัดเนื่องจากข้อจำกัดของเอ็นจิ้น การจัดวางแบบคงที่จะเหมือนกันในทุกผู้ให้บริการ แต่สำหรับการใช้งานที่เปลี่ยนแบบไดนามิก แนะนำให้ตรวจสอบกับผู้ให้บริการเป้าหมาย

HIT TEST

การตรวจจับแตะก็เป็นส่วนร่วมเช่นกัน

เนื่องจากการตรวจจับแตะทำด้วยตรรกะร่วมกัน onClick จะถูกเรียกโดยไม่คำนึงว่าเอ็นจิ้นรองรับการแตะบนภาพซ้อนทับหรือไม่

04 · การแตะ

onClick รับสถานะของภาพและพิกัดที่แตะ ในตัวอย่าง ภาพจะถูกเปลี่ยนเมื่อแตะเพื่อสลับการแสดงผล

เปลี่ยนภาพเมื่อแตะ
// แตะเพื่อสลับภาพ
override fun onGroundImageClick(clicked: GroundImageEvent) {
    val isBase = clicked.state.image == imageResources.image
    image = if (isBase) imageResources.clickedImage else imageResources.image
}
event.state

สถานะของรูปภาพที่แตะ สามารถอ้างอิงรูปภาพปัจจุบันและ extra ได้

event.clicked

พิกัดภูมิศาสตร์ที่แตะ สามารถทราบได้ว่ากดตรงไหนภายในช่วง

ส่วนโปร่งใสของรูปภาพจะรวมอยู่ในพื้นที่แตะเช่นกัน หากต้องการให้ส่วนโปร่งใสไม่มีปฏิกิริยา ให้ปรับพื้นที่ให้ตรงกับส่วนที่เป็นรูปธรรมของรูปภาพ หรือใช้โพลิกอนร่วมด้วย

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