أكثر

Openlayers 2 getLonLatFromLayerPx () يعطي أسلاك خاطئة بعد المقلاة

Openlayers 2 getLonLatFromLayerPx () يعطي أسلاك خاطئة بعد المقلاة


أحاول عرض موضع الماوس على div خارجي (يعتمد على ExtJS) باستخدام هذا الكود:

map.events.register ("mousemove"، map، function (e) {position = map.getLonLatFromLayerPx (this.events.getMousePosition (e))؛ position = position.transform (new OpenLayers.Project ("EPSG: 900913") ، OpenLayers.Project الجديد ("EPSG: 4326")) ؛ تحديث Ext.fly (mouseposition.getEl ()). ("Lat (N):" + position.lat.toFixed (4) + "Long (E): "+ position.lon.toFixed (4)) ؛}) ؛

تكمن المشكلة في أنه عندما أقوم بتحريك الخريطة ، فإن الحبال التي أحصل عليها هي الأصل من قبل المقلاة ، فقط إذا قمت بالتكبير / التصغير من الحصول على الأسلاك الصحيحة من موضع الماوس.

كيف يمكنني اصلاح هذا ؟

هنا مثال (انظر إلى الحبال الموجودة أسفل الخريطة) :

  1. التحميل الأولي فوق إسرائيل ، انظر خط العرض / خط الفأرة.

  1. أقوم بالتحرك إلى أوروبا ، حيث تظل خطوط الطول / العرض حول نفس قيم نطاق الخريطة الأصلي

  1. أقوم بالتكبير والتصغير وتحديث خطوط الطول / العرض لنطاق عرض الخريطة الحالي.


يجب عليك استخدام ملفاتgetLonLatFromPixelبدلا منgetLonLatFromLayerPx. لسوء الحظ ، لم يتم توثيق الطريقة الأخيرة على الإطلاق (انظر هنا) لذلك سأترك الأمر لك للتحقيق في مواضع الاختلاف.

يمكنك التحقق من ذلك بسهولة بالانتقال إلى http://openlayers.org/two/ ولصق الكود التالي في وحدة تحكم JS الخاصة بك:

map.events.register ("mousemove"، map، function (e) {var position = map.getLonLatFromPixel (this.events.getMousePosition (e))؛ position = position.transform (new OpenLayers.Project ("EPSG: 900913" ) ، OpenLayers.Project جديد ("EPSG: 4326")) ؛ console.log ("Lat (N):" + position.lat.toFixed (4) + "Long (E):" + position.lon.toFixed ( 4)) ؛}) ؛

الآن ، سيؤدي سحب منطقة وسحبها باستخدام الماوس إلى إظهار أن lon / lat يبقى كما هو ، وهذا - صحيح.

لاحظ أنه إذا جربت نفس الرمز معgetLonLatFromLayerPxبدلاً من ذلك ، "شريحة" الإحداثيات مع الخريطة التي تسحبها وهي خاطئة بشكل واضح (وهذا ما وصفته في تعليقي تحت سؤالك).


إذا أساءت فهم وصفك ، فيرجى محاولة إنشاء وظيفة يمكن استنساخها بسهولة ، على سبيل المثال من خلال اللصق على http://openlayers.org/two/ ومشاهدة وحدة تحكم JS.


شاهد الفيديو: Leaflet Tutorial #1: Create a map with a marker using JavaScript