أكثر

لا يعمل GetFeatureInfo مع مصادر خط نقطة GeoServer


لا يمكنني الحصول على معلومات مع طلب GetFeatureInfo عند النقر فوق طبقات النقطة والخط. بالنسبة للمضلعات ، يعمل بشكل جيد.

أنا أستخدم الكود أدناه لتنفيذ خدمة WMS:

google.maps.event .addListener (الخريطة ، "النقر" ، الوظيفة (الحدث) {// event.latLng.lng () + "٪ 2C" + event.latLng.lat () + "٪ 2C" + event.latLng .lng () + "٪ 2C" + event.latLng.lat () var myLatLng = event.latLng؛ var lat = myLatLng.lat ()؛ var lng = myLatLng.lng ()؛ // var latlng = new google. maps.LatLng (lat، lng)؛ // var bounds = new google.maps.LatLngBounds (southWest، northEast)؛ var bounds = new google.maps.LatLngBounds (new google.maps.LatLng (lat، lng)، new google .maps.LatLng (lat، lng))؛ // var bbox = lat + "،" + lng + "،" + lat + "،" + lng؛ var projectionMap = new MercatorProject ()؛ var point = projectionMap .fromLatLngToPoint (event.latLng)؛ var lULP = new google.maps.Point (point.x * 256، (point.y + 1) * 256)؛ var lLRP = new google.maps.Point ((point.x + 1) * 256، point.y * 256)؛ var lULg = projectionMap.fromDivPixelToSphericalMercator (lULP، 8)؛ var lLRg = projectionMap.fromDivPixelToSphericalMercator (lLRP، 8)؛ var lUL_Latitude = lULg.y؛ var lg._Latitude = = lLRg.y ؛ فار lLR_Longitude = lLRg.x ، // GJ: يوجد خطأ عند عبور حد خط الطول -180 (لا يتم عرض المربع) - يبدو أن هذا الفحص يصلحه إذا (lLR_Longitude 

/ * المستند: wms.js تاريخ الإنشاء: 16 شباط (فبراير) 2011 ، الساعة 3:25:27 مساءً المؤلف: "جافين جاكسون "كود معاد بناءه من http://lyceum.massgis.state.ma.us/wiki/doku.php؟id=googlemapsv3:home * / وظيفة مرتبطة (value، opt_min، opt_max) {if (opt_min! = null) value = Math.max (value، opt_min)؛ if (opt_max! = null) value = Math.min (value، opt_max)؛ return value؛} function degreesToRadians (deg) {return deg * (Math.PI / 180)؛} function radiansToDegrees (rad) {return rad / (Math.PI / 180)؛} function MercatorProject () {var MERCATOR_RANGE = 256؛ this.pixelOrigin_ = new google.maps.Point (MERCATOR_RANGE / 2، MERCATOR_RANGE / 2)؛ this.pixelsPerLonDegree_ = MERCATOR_RANGE / 360؛ this.pixelsPerLonRadian_ = MERCATOR_RANGE / (2 * Math.PI)؛}؛ MercatorProject.prototype.fromLatLngToPoint = الوظيفة (latLng، opt_point) {var me = this؛ var point = opt_point || خرائط google.maps جديدة. نقطة (0، 0)؛ var origin = me.pixelOrigin_؛ point.x = origin.x + latLng.lng () * me.pixelsPerLonDegree_؛ // NOTE (appleton): يؤدي الاقتطاع إلى 0.9999 بشكل فعال إلى تقييد خط العرض إلى // 89.189. هذا هو حوالي ثلث pas البلاط ر حافة البلاط العالم. var siny = ملزمة (Math.sin (gradToRadians (latLng.lat ())) ، -0.9999 ، 0.9999) ؛ point.y = origin.y + 0.5 * Math.log ((1 + siny) / (1 - siny)) * -me.pixelsPerLonRadian_ ؛ نقطة العودة } ؛ MercatorProject.prototype.fromDivPixelToLatLng = الوظيفة (بكسل ، تكبير / تصغير) {var me = this؛ var origin = me.pixelOrigin_ ؛ مقياس var = Math.pow (2 ، تكبير) ؛ var lng = (pixel.x / scale - origin.x) / me.pixelsPerLonDegree_ ؛ var latRadians = (pixel.y / scale - origin.y) / -me.pixelsPerLonRadian_ ؛ var lat = radiansToDegrees (2 * Math.atan (Math.exp (latRadians)) - Math.PI / 2) ؛ إرجاع google.maps.LatLng (lat ، lng) ؛ } ؛ MercatorProject.prototype.fromDivPixelToSphericalMercator = الوظيفة (بكسل ، تكبير / تصغير) {var me = this؛ var تنسيق = me.fromDivPixelToLatLng (بكسل ، تكبير) ؛ فار ص = 6378137.0 ؛ var x = r * degreesToRadians (coord.lng ()) ؛ var latRad = degreesToRadians (coord.lat ()) ، var y = (r / 2) * Math.log ((1 + Math.sin (latRad)) / (1 - Math.sin (latRad))) ؛ إرجاع google.maps.Point جديدة (س ، ص) ؛ } ؛

هل واجه شخص ما نفس المشكلة؟


أعتقد أنك قد تكون أكثر تعقيدًا قليلاً في طلب WMS الخاص بك. لا تحتاج إلى تحويل الإحداثيات من جانب العميل لأن GeoServer جيد حقًا في ذلك! أيضًا ، لن يغير تغيير نمط نقطة ما إذا كنت تلتقطها ، لأنها لا تزال في الحقيقة مجرد موقع نقطة. تريد أن تكون غامضًا في اختيارك. الطريقة التي أفعل بها هي استخدام Bounding Box.

إليك كيفية إجراء طلب WMS مع مربع إحاطة صغير (انظر المصدر الكامل):

دالة getFeatureWMS (layer، clickCoords) {log ("Getting info for layer:" + layer.title، 2) var wms_gf_url = layer.url var bbox = (clickCoords.lng - 0.0001) + "،" + (clickCoords.lat - 0.0001) + "،" + (clickCoords.lng + 0.0001) + "،" + (clickCoords.lat + 0.0001) + '، EPSG: 4326' معلمات var = {service: 'WFS' ، الإصدار: '1.1.1' ، طلب: 'GetFeature'، typeName: layer.meta.name، maxFeatures: 100، outputFormat: 'application / json'، SrsName: 'EPSG: 4326'، bbox: bbox}؛ $ .ajax ({url: wms_gf_url + L.Util.getParamString (معلمات)، dataType: 'json'، Success: handleWMSJSON (layer)})؛ }

إليك طلب العمل الفعلي:

https://maps.gcc.tas.gov.au/geoserver/GCC_cc/ows؟ 24892915616036٪ 2C-42.79916797276234٪ 2CEPSG٪ 3A4326

الآن ، أدرك أنني أستخدم WFS هنا ، لأنه أفضل لهذه الأغراض. ولكن يمكنك أن تفعل الشيء نفسه باستخدام WMS ، مثل هذا:

https://wms.tidetech.org/geoserver/public/ows؟service=WMS&version=1.1.1&request=GetFeatureInfo&layers=tidal_currents_bass_strait&query_layers=tidal_currents_bass_strait&feature_count=10&info_format=text٪2Fjavascript&format_options=callback٪3AhandleJson&SrsName=EPSG٪3A4326&width=101&height=101&x=50&y= 50 & bbox = 146.39169921875٪ 2C-39.98445017823439٪ 2C146.59169921875٪ 2C-39.78445017823439 & time = 2016-08-21T00٪ 3A00٪ 3A00.000Z وإعادة الاتصال = jQuery22106027783352390412_1473385578164 &


شاهد الفيديو: How to load GeoServer WMS layer in Cesium js (شهر اكتوبر 2021).