أكثر

Openlayers 3 WMS مخصص الإسقاط مدى خاطئ

Openlayers 3 WMS مخصص الإسقاط مدى خاطئ


أنا أستخدم OpenLayers 3 لعرض طبقة WMS من خادم في EPSG: 3006 ، راجع الكود:

مشروع Proj4js:

Proj4js.defs ["EPSG: 3006"] = "+ proj = utm + zone = 33 + ellps = GRS80 + towgs84 = 0،0،0،0،0،0،0 + وحدة = m + no_defs" ؛

ol.js:

خريطة فار var الإسقاط = ol.proj.get ('EPSG: 3006') ؛ الوظيفة init () {map = new ol.Map ({target: 'map'، العارض: 'canvas'، view: new ol.View ({projection: projection، center: [617000،6728500]، zoom: 3}) }) ؛ var topolayer = new ol.layer.Image ({source: new ol.source.ImageWMS ({preload: Infinity، url: 'URLgoesHere'، params: {'LAYERS': "layernameGoesHere"}})}) ؛ map.addLayer (الطبقة العليا) ؛

والنتيجة هي خريطة تتمحور حول السويد / الدنمارك ، ولكن يجب أن ينتج عنها خريطة تتمحور حول الجزء الأوسط من السويد. أضفت أيضًا زرًا يستدعي وظيفة لطباعة النطاق الحالي لـ ol.View (حصلت على مساعدة من صديق بهذه الوظيفة ، صدقها من هذا المنشور https://stackoverflow.com/questions/28166471/openlayer3-how- للحصول على إحداثيات منفذ العرض):

function rangeCoords () {var x = map.getView (). calculateExtent (map.getSize ()) ؛ تنبيه (x) ؛ }

في الوقت الحالي هو في مكالمة تنبيه () فقط للتجربة واستكشاف الأخطاء وإصلاحها. عندما يتم استدعاء هذه الوظيفة ، فإنها تُرجع قيمًا بعيدة أو خاطئة تمامًا عن الحدود الفعلية للإسقاط ، على سبيل المثال عند التكبير فوق مدينة صغيرة في الجزء الأوسط من السويد ، فإنها تُرجع النطاق التالي:

1905097,691, 8549623.590, 1910591.602, 8554759.203

يجب أن تحتوي النتيجة على قيم X في نطاق الأشكال الستة ، بدلاً من نطاق الأشكال السبعة كما هو الحال الآن. تقع قيم Y التي تم إرجاعها في نطاق الشكل السبعة كما هو متوقع ، ولكن ليس ضمن القيم الصحيحة.

أيضًا عند تغيير قيمة المركز ، لا تتفاعل الخريطة مع القيم الجديدة.

السبب في أنني بحاجة إلى استخراج هذه الإحداثيات هو أنها تُستخدم لاستدعاء WCS من خلال وظيفة أخرى وتنزيل البيانات داخل نفس المنطقة / المدى.

هل هناك شيء ما أفتقده عند استخدام هذا الإسقاط المخصص ، شيء يلزم تحويله أو ربما إضافته في جزء ol.View؟ هل هناك شيء خاطئ في وظيفة المدى؟

Sidenote: أنا جديد نوعًا ما في استخدام OpenLayers ، خاصة مع طبقات WMS والإسقاطات المخصصة. أيضًا ، ليس لدي أي سيطرة على الخادم لأنه ليس لي.


يجب أن تترك خريطتك في تنسيق google الافتراضي EPSG: 3857:

map = new ol.Map ({loadTilesWhileAnimating: true، // يضيف عناصر التحكم الافتراضية: ol.control.defaults (). extension ([// يضيف مقياسًا جديدًا ol.control.ScaleLine ({// Units: ol.control .ScaleLineUnits.METRIC}) ، جديد ol.control.ZoomSlider ({})]) ، // تقديم المعلمات الهدف: dom_id ، //Ext.get(idDiv) ، الطبقات: baseLayers ، العارض: 'canvas' ، عرض: جديد ol.View ({projection: ol.proj.get ('EPSG: 3857')،})})؛

وقم بتخصيص بلاط WMS بإسقاطه الصحيح

// Aerial Tile Layer var aerialLayer = new ol.layer.Tile ({title: "Aerial"، source: new ol.source.TileWMS ({url: 'http: // server01: 8080 / geoserver / sf / wms'، المعلمات: {'LAYERS': 'sf: TEST01'، 'STYLES': "}، serverType: 'geoserver'، projection: ol.proj.get ('EPSG: 3006')،})})؛

التي يجب أن تعمل !


من ما تعلمته ، فإن EPSG: 3006 (SWEREF99 TM) له ترتيب محوري شمال ، شرق. هذا يعني أنك بحاجة إلى أن يكون لديك proj4js حديثًا - لقد استخدمت:

وتحتاج إلى التحديد+ المحور = neuفي تعريف المشروع 4 الخاص بك:

proj4.defs ('EPSG: 3006'، '+ proj = utm + zone = 33 + ellps = GRS80 + towgs84 = 0،0،0،0،0،0،0 + الوحدات = m + المحور = neu + no_defs' ) ؛

http://epsg.io/3006.js لسبب ما لا يشمل+ المحور = neu، لذلك لا يمكنك استخدام

للحصول على التعريف.

لسبب ما ، يجب عليك استخدام ترتيب المحور شرقًا وشمالًا للعرض الأولالمركزإحداثيات (كما فعلت).

المركز: [617000 ، 6728500] ،

باستخدام هذا الإعداد وخدمة WMS النرويجية التي تدعم 3006 ، انتهى مركز الخريطة في جافل ، السويد.


شاهد الفيديو: OpenLayers Tutorial 397: Présentation dOpenLayers