أكثر

كيفية الوصول إلى Leaflet EPSG: 3857 إحداثيات؟

كيفية الوصول إلى Leaflet EPSG: 3857 إحداثيات؟


قرأت في كل مكان أن Leaflet يستخدم داخليًا Mercator ويب كرويًا (EPSG: 3857) ، ولكن مهما حاولت أحصل عليه إما Lat / Lon (EPSG: 4326) أو إحداثيات غريبة لا أفهمها:

map.getBounds (). getNorthEast () ، // LatLng (52.5262، 13.44907) map.getPixelBounds (). getTopRight () ؛ // نقطة (2253845، 1375425) ؟؟؟ map.getPixelOrigin () ، // نقطة (2252165، 1375425) ؟؟؟

دعنا نحاول عرض المركاتور الكروي:

L.Project.SphericalMercator.project (map.getBounds (). getNorthEast ()) ؛ // نقطة (0.23473 ، 1.08117)!؟!

حسنًا ، هناك خطأ معروف في Leaflet 0.7.3 ، لذلك دعونا نضيف نصف قطر الأرض:

L.point (L.Project.SphericalMercator.project (map.getBounds (). getNorthEast ()) .x * 6378137.0، L.Project.SphericalMercator.project (map.getBounds (). getNorthEast ()) .y * 6378137.0) ؛ // نقطة (1497143.40914 ، 6895833.38915)

إذن ، هل من الصعب حقًا الحصول على إحداثيات الإسقاط الافتراضية لخريطتي؟ لماذا علي الاتصالمشروع()على الاطلاق؟ ماذا افتقد؟

أنا أستخدم النشرة 0.7.3 ولم أغير CRS ، باستخدام EPSG الافتراضي: 3857. أيه أفكار؟

كيفية الوصول إلى Leaflet EPSG: 3857 إحداثيات؟


أخيرًا حصلت على إجابة على جيثب:

داخليًا ، يحول Leaflet إحداثيات EPSG: 4326 إلى إحداثيات بكسل. إحداثيات البكسل هذه هي إحداثيات EPSG: 3857 مقسومة على قوة 2 (ثم يتم تقريبها).

قد يكون من الممكن جلب بعض هذه الإحداثيات (انظر إلى طرق مثلL.Map.latLngToLayerPoint) ثم قم بضرب الأشياء عند تحديد مستوى التكبير ، ولكن احذر من أخطاء التقريب.

لذا فإن افتراضي EPSG: 3857 هو الافتراضي كان خاطئًا.


شاهد الفيديو: تحويل الاحداثيات العالمية International projection إلى احداثيات محلية local projection