X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/b17f2540949637d928908f6669946731660810c6..a1a3b2c87e53c095d43bb9835590dc525122a062:/app/assets/javascripts/leaflet.map.js diff --git a/app/assets/javascripts/leaflet.map.js b/app/assets/javascripts/leaflet.map.js index 0f4272a65..6e42d4ac1 100644 --- a/app/assets/javascripts/leaflet.map.js +++ b/app/assets/javascripts/leaflet.map.js @@ -1,5 +1,3 @@ -//= require qs/dist/qs - L.extend(L.LatLngBounds.prototype, { getSize: function () { return (this._northEast.lat - this._southWest.lat) * @@ -115,19 +113,18 @@ L.OSM.Map = L.Map.extend({ }, updateLayers: function (layerParam) { - var layers = layerParam || "M"; + const oldBaseLayer = this.getMapBaseLayer(); + let newBaseLayer; - for (let i = this.baseLayers.length - 1; i >= 0; i--) { - if (layers.indexOf(this.baseLayers[i].options.code) === -1) { - this.removeLayer(this.baseLayers[i]); + for (const layer of this.baseLayers) { + if (!newBaseLayer || layerParam.includes(layer.options.code)) { + newBaseLayer = layer; } } - for (let i = this.baseLayers.length - 1; i >= 0; i--) { - if (layers.indexOf(this.baseLayers[i].options.code) >= 0 || i === 0) { - this.addLayer(this.baseLayers[i]); - return; - } + if (newBaseLayer !== oldBaseLayer) { + if (oldBaseLayer) this.removeLayer(oldBaseLayer); + if (newBaseLayer) this.addLayer(newBaseLayer); } }, @@ -153,17 +150,14 @@ L.OSM.Map = L.Map.extend({ }, getUrl: function (marker) { - var precision = OSM.zoomPrecision(this.getZoom()), - params = {}; + const params = {}; if (marker && this.hasLayer(marker)) { - var latLng = marker.getLatLng().wrap(); - params.mlat = latLng.lat.toFixed(precision); - params.mlon = latLng.lng.toFixed(precision); + [params.mlat, params.mlon] = OSM.cropLocation(marker.getLatLng(), this.getZoom()); } var url = window.location.protocol + "//" + OSM.SERVER_URL + "/", - query = Qs.stringify(params), + query = new URLSearchParams(params), hash = OSM.formatHash(this); if (query) url += "?" + query; @@ -213,22 +207,22 @@ L.OSM.Map = L.Map.extend({ return (interlaced_x << 1) | interlaced_y; } - var params = {}; + const params = new URLSearchParams(); var layers = this.getLayersCode().replace("M", ""); if (layers) { - params.layers = layers; + params.set("layers", layers); } if (marker && this.hasLayer(marker)) { - params.m = ""; + params.set("m", ""); } if (this._object) { - params[this._object.type] = this._object.id; + params.set(this._object.type, this._object.id); } - var query = Qs.stringify(params); + const query = params.toString(); if (query) { str += "?" + query; } @@ -237,21 +231,14 @@ L.OSM.Map = L.Map.extend({ }, getGeoUri: function (marker) { - var precision = OSM.zoomPrecision(this.getZoom()), - latLng, - params = {}; + let latLng = this.getCenter(); + const zoom = this.getZoom(); if (marker && this.hasLayer(marker)) { - latLng = marker.getLatLng().wrap(); - } else { - latLng = this.getCenter(); + latLng = marker.getLatLng(); } - params.lat = latLng.lat.toFixed(precision); - params.lon = latLng.lng.toFixed(precision); - params.zoom = this.getZoom(); - - return "geo:" + params.lat + "," + params.lon + "?z=" + params.zoom; + return `geo:${OSM.cropLocation(latLng, zoom).join(",")}?z=${zoom}`; }, addObject: function (object, callback) { @@ -312,8 +299,8 @@ L.OSM.Map = L.Map.extend({ var map = this; this._objectLoader = $.ajax({ url: OSM.apiUrl(object), - dataType: "xml", - success: function (xml) { + dataType: "json", + success: function (data) { map._object = object; map._objectLayer = new L.OSM.DataLayer(null, { @@ -335,7 +322,7 @@ L.OSM.Map = L.Map.extend({ } }; - map._objectLayer.addData(xml); + map._objectLayer.addData(data); map._objectLayer.addTo(map); if (callback) callback(map._objectLayer.getBounds());