Leaflet: Container container เทียบกับ Layer Layer?


17

ความแตกต่างระหว่างพิกัดคอนเทนเนอร์แผนที่และพิกัดเลเยอร์คืออะไร

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

API ที่อ้างถึงพิกัด / จุด:

คำตอบ:


21

คำตอบสั้น ๆ

วันที่เมธอด containerPoint จากการร้องขอคุณสมบัติย้อนกลับไปในปี 2012และวันนี้มันสับสนเล็กน้อย

คำตอบที่ดีที่สุดคือคำอธิบายของ Leaflet maintainer Vladimir Agafonkin:

"layerPoint เป็นจุดที่สัมพันธ์กับเลเยอร์แผนที่ (div ซึ่งมีไทล์และเครื่องหมาย) ไม่ใช่คอนเทนเนอร์แผนที่ด้านนอกสิ่งที่คุณต้องการคือ map.layerPointToContainerPoint แต่ฉันยอมรับว่าไม่มีวิธีที่สะดวกในการรับมันทันทีดังนั้นการจัดตารางเวลานี้ สำหรับเวอร์ชั่นถัดไป "

คำตอบที่ยาว

ในรายละเอียดมากขึ้น:

วิธีการแปลงหลักของประชาชนในแผ่นปลิวแม้จะไม่ค่อยมีใครใช้โดยนักพัฒนาแอพลิเคชันที่มีและL.Map.project(latlng [, zoom])L.Map.unproject(point [, zoom])

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

ซึ่งหมายความว่าหากคุณกำลังยุ่งกับหน้าต่างการสาธิต Leaflet ในเบราว์เซอร์ของคุณผลลัพธ์ของ L.Map.project` สำหรับ latlng ที่กำหนดจะเปลี่ยนเฉพาะเมื่อคุณซูมเข้าและออก

ในฐานะ Leaflet เวอร์ชั่นล่าสุด (0.7.3) คำจำกัดความของการL.Map.latLngToLayerPointอ่าน:

latLngToLayerPoint: function (latlng) {
    var projectedPoint = this.project(L.latLng(latlng))._round();
    return projectedPoint._subtract(this.getPixelOrigin());
}

ในทางตรงกันข้ามL.Map.latLngToContainerPointอ่าน:

latLngToContainerPoint: function (latlng) {
    return this.layerPointToContainerPoint(this.latLngToLayerPoint(L.latLng(latlng)));
}

ด้วยการL.Map.layerPointToContainerPointกำหนดให้เป็น:

layerPointToContainerPoint: function (point) { 
    return L.point(point).add(this._getMapPanePos());
}

เมธอดแผนที่ส่วนตัว_getMapPanePos()ส่งคืนออฟเซ็ตระหว่างตำแหน่งแผนที่ปัจจุบันและตำแหน่งเมื่อสร้างครั้งแรก สิ่งนี้จะเปลี่ยนแปลงระหว่างแพนแผนที่เท่านั้น (ไม่ใช่ระหว่างซูม) ดังนั้นความแตกต่างระหว่าง layerPoint และ containerPoint ที่สอดคล้องกับ latlng ที่กำหนดคือ layerPoint คือตำแหน่งของ latlng ในคอนเทนเนอร์แผนที่<div> พร้อมกับแผนที่ที่ตำแหน่งเริ่มต้นในขณะที่ containerPoint คือตำแหน่งปัจจุบันของ latlng ในคอนเทนเนอร์แม็<div>


1
ผู้ชาย - ถ้าฉันสามารถโหวตคุณจะได้รับการโหวต 100 ครั้ง
Saad Malik

0

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


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

สวัสดี @ SimFox3 คุณพูดถูก และฉันควรทดสอบก่อนพูดอะไร! ตอนนี้ฉันเห็นว่าจุดของเลเยอร์เป็นพิกัดที่กำหนดโดยสัมพันธ์กับ 'หน้าต่าง' ที่จัดขึ้นซึ่งใหญ่กว่าหน้าจอ มันเหมือนกับมุมมองแคชที่ biogger กว่าหน้าจอ นั่นเป็นสาเหตุที่พิกัดจุดเลเยอร์เปลี่ยน แต่ไม่บ่อยและเฉพาะเมื่อมีการย้าย 'หน้าต่าง' ดูเหมือนว่าพิกัดจุดของคอนเทนเนอร์จะ จำกัด อยู่เสมอกับพิกัดที่สัมพันธ์กับมุมมองที่มองเห็นได้ ต้องบอกทุกอย่างว่ามันชัดเจนว่าฉันไม่รู้จักอะไรมากไปกว่าคุณ สามารถชิปใน!
Alex Leith
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.