Mehr

GetFeatureInfo funktioniert nicht mit GeoServer-Punktlinienquellen

GetFeatureInfo funktioniert nicht mit GeoServer-Punktlinienquellen


Ich kann mit einer GetFeatureInfo-Anfrage keine Informationen abrufen, wenn ich auf Punkt- und Linien-Layer klicke. Für Polygone funktioniert es gut.

Ich verwende den folgenden Code, um den WMS-Dienst auszuführen:

google.maps.event .addListener( map, "click", function(event) { // 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); varbounds = new google.maps.LatLngBounds( new google.maps.LatLng(lat, lng), new google .maps.LatLng(lat, lng)); //var bbox = lat + "," + lng + "," + lat + "," + lng; var ProjektionMap = new MercatorProjection(); var point = ProjektionMap .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 = ProjektionMap.fromDivPixelToSphericalMercator(lULP, 8); var lLRg = ProjektionMap.fromDivPixelToSphericalMercator(lLRP, 8); var lUL_Latitude = lULg.y; var lUL_Longitude = lULg_xLatitude; = lLRg.y;var lLR_Länge = lLRg.x; //GJ: Es gibt einen Fehler beim Überqueren der Längengradgrenze von -180 (Kachel wird nicht gerendert) - dieser Check scheint ihn zu beheben if (lLR_Longitude < lUL_Longitude) { lLR_Longitude = Math.abs(lLR_Longitude); } var bbox = lUL_Longitude + "," + lUL_Latitude + "," + lLR_Longitude + "," + lLR_Latitude; var-Projektion = map.getProjection(); var ulw = Projektion.fromPointToLatLng(lULP); var lrw = Projektion.fromPointToLatLng(lLRP); $.ajax({ "url" : 'http://localhost:8080/geoserver/WORKSPACE_X/wms?LAYERS=WORKSPACE_X:LAYER_X&QUERY_LAYERS=WORKSPACE_X:LAYER_X&STYLES=&SERVICE=WMS&VERSION=1.1.1&REQUEST='='+Ab&B+BOX 10&HEIGHT=539&WIDTH=1803&FORMAT=image%2Fpng&INFO_FORMAT=text%2Fhtml&SRS=EPSG%3A900913&X='+Math.round(point.x)+'&Y='+Math.round(point.y), //"url" : url , "data" : "", "type" : "POST", "success" : function(data) { infowindow.setContent(data); infowindow .setPosition(event.latLng); infowindow.open(map); }, "error" : function(xhr, status, error) { alert(" Kann nicht ausgeführt werden, weil: " + error); } }); });

/* Dokument : wms.js Erstellt am : 16. Februar 2011, 15:25:27 Uhr Autor : "Gavin Jackson " Refactored Code von http://lyceum.massgis.state.ma.us/wiki/doku.php?id=googlemapsv3:home */ function bound(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); Rückgabewert; } function degreeToRadians(deg) { return deg * (Math.PI / 180); } function radiansToDegrees(rad) { return rad / (Math.PI / 180); } function MercatorProjection() { 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); }; MercatorProjection.prototype.fromLatLngToPoint = function(latLng, opt_point) { var me = this; var point = opt_point || new google.maps. Point(0, 0); var origin = me.pixelOrigin_; point.x = origin.x + latLng.lng() * me.pixelsPerLonDegree_; // HINWEIS(appleton): Das Abschneiden auf 0,9999 begrenzt den Breitengrad effektiv auf // 89,189. Das ist etwa ein Drittel eines Kachelpasses t der Rand der Welt-Kachel. var siny = gebunden(Math.sin(degreesToRadians(latLng.lat())), -0.9999, 0.9999); point.y = origin.y + 0.5 * Math.log((1 + siny) / (1 - siny)) * -me.pixelsPerLonRadian_; Rückkehrpunkt; }; MercatorProjection.prototype.fromDivPixelToLatLng = function(Pixel, Zoom) { var me = this; var origin = me.pixelOrigin_; var scale = Math.pow(2, Zoom); 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); neue google.maps.LatLng (lat, lng) zurückgeben; }; MercatorProjection.prototype.fromDivPixelToSphericalMercator = Funktion (Pixel, Zoom) { var me = this; var coord = me.fromDivPixelToLatLng(Pixel, Zoom); var r = 6378137,0; var x = r * GradToRadians(coord.lng()); var latRad = GradToRadians(coord.lat()); var y = (r / 2) * Math.log((1 + Math.sin(latRad)) / (1 - Math.sin(latRad))); Rückgabe neuer google.maps.Point(x, y); };

Hatte jemand das gleiche Problem?


Ich denke, Sie werden in Ihrer WMS-Anfrage möglicherweise etwas zu komplex. Sie müssen die Koordinaten clientseitig nicht konvertieren, da GeoServer darin wirklich gut ist! Auch das Ändern des Stils eines Punktes ändert nichts daran, ob Sie ihn fangen, da es sich immer noch nur um eine Punktposition handelt. Sie möchten in Ihrer Auswahl unscharf sein. Ich mache das mit einer Bounding Box.

So mache ich eine WMS-Anfrage mit einem kleinen Begrenzungsrahmen (siehe vollständige Quelle):

function getFeatureWMS(layer, clickCoords) { log("Informationen für Layer abrufen: " + 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 parameters = { service : 'WFS', version : '1.1.1' , request : 'GetFeature', typeName : layer.meta.name, maxFeatures : 100, outputFormat : 'application/json', SrsName : 'EPSG:4326', bbox : bbox }; $.ajax({ url : wms_gf_url + L.Util.getParamString(parameter), dataType : 'json', success : handleWMSJSON(layer) }); }

Hier ist die eigentliche Arbeitsanfrage:

https://maps.gcc.tas.gov.au/geoserver/GCC_cc/ows?service=WFS&version=1.1.1&request=GetFeature&typeName=Stormwaterpipes&maxFeatures=100&outputFormat=application%2Fjson&SrsName=EPSG%3A4326&bbox=147.2487291569936792765% 24892915616036 %2C-42.79916797276234%2CEPSG%3A4326

Jetzt ist mir klar, dass ich hier WFS verwende, weil es für diese Zwecke besser ist. Aber Sie können dasselbe mit WMS tun, wie folgt:

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=1 50&bbox=146.39169921875%2C-39.98445017823439%2C146.59169921875%2C-39.78445017823439&time=2016-08-21T00%3A00%3A00.000Z&callback=jQuery22106027783352390412_1473385578164&_=1473385578165

Schau das Video: Introduction to GeoServer