You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
86 lines
2.8 KiB
86 lines
2.8 KiB
L.TileLayer.BetterWMS = L.TileLayer.WMS.extend({ |
|
|
|
onAdd: function (map) { |
|
// Triggered when the layer is added to a map. |
|
// Register a click listener, then do all the upstream WMS things |
|
L.TileLayer.WMS.prototype.onAdd.call(this, map); |
|
map.on('click', this.getFeatureInfo, this); |
|
}, |
|
|
|
onRemove: function (map) { |
|
// Triggered when the layer is removed from a map. |
|
// Unregister a click listener, then do all the upstream WMS things |
|
L.TileLayer.WMS.prototype.onRemove.call(this, map); |
|
map.off('click', this.getFeatureInfo, this); |
|
}, |
|
|
|
getFeatureInfo: function (evt) { |
|
// Make an AJAX request to the server and hope for the best |
|
var url = this.getFeatureInfoUrl(evt.latlng), |
|
showResults = L.Util.bind(this.showGetFeatureInfo, this); |
|
$.ajax({ |
|
url: url, |
|
success: function (data, status, xhr) { |
|
var err = typeof data === 'string' ? null : data; |
|
showResults(err, evt.latlng, data); |
|
}, |
|
error: function (xhr, status, error) { |
|
showResults(error); |
|
} |
|
}); |
|
}, |
|
|
|
getFeatureInfoUrl: function (latlng) { |
|
// Construct a GetFeatureInfo request URL given a point |
|
var point = this._map.latLngToContainerPoint(latlng, this._map.getZoom()), |
|
size = this._map.getSize(), |
|
|
|
params = { |
|
request: 'GetFeatureInfo', |
|
service: 'WMS', |
|
srs: 'EPSG:4326', |
|
styles: this.wmsParams.styles, |
|
transparent: this.wmsParams.transparent, |
|
version: this.wmsParams.version, |
|
format: this.wmsParams.format, |
|
bbox: this._map.getBounds().toBBoxString(), |
|
height: size.y, |
|
width: size.x, |
|
layers: this.wmsParams.layers, |
|
query_layers: this.wmsParams.layers, |
|
info_format: 'application/json' //'text/html' |
|
}; |
|
|
|
// To solve the bug of incorrect X and Y |
|
const X = point.x.toFixed(); |
|
const Y = point.y.toFixed(); |
|
|
|
params[params.version === '1.3.0' ? 'i' : 'x'] = X //point.x; |
|
params[params.version === '1.3.0' ? 'j' : 'y'] = Y //point.y; |
|
|
|
return this._url + L.Util.getParamString(params, this._url, true); |
|
}, |
|
|
|
showGetFeatureInfo: function (err, latlng, content) { |
|
if (err) { console.log(err); return; } // do nothing if there's an error |
|
|
|
|
|
const properties = JSON.parse(content).features[0].properties; |
|
console.debug('betterwms properties: ', properties); |
|
// if belongs to grid layer treat it as an entity |
|
if (properties.hasOwnProperty('cellcode')) { |
|
moreInfoPopup(properties); |
|
} else { |
|
mruPopup(properties); |
|
} |
|
// Otherwise show the content in a popup, or something. |
|
// L.popup({ maxWidth: 800}) |
|
// .setLatLng(latlng) |
|
// .setContent('placeholder') |
|
// .openOn(this._map); |
|
} |
|
}); |
|
|
|
L.tileLayer.betterWms = function (url, options) { |
|
return new L.TileLayer.BetterWMS(url, options); |
|
};
|
|
|