Gewusst wie: abrufen von LayerPoint (X, Y) von Breite und Länge Koordinaten mit Hilfe von Leaflet API
Wenn ich den folgenden code verwenden, um die LayerPoint
aus einem angegebenen Lat/Lng:
var latLng = new L.latLng(-37.81303878836989, 144.97421264648438);
var point = map.latLngToLayerPoint(latLng);
Die Ausgabe ist folgende:
o.Point
x: 86042
y: 77065
Dann, wenn ich versuche, auf der Ebene Fliese mit folgender URL:
http://a.tile.osm.org/10/86042/77065.png
Bekomme ich einen 404, weil es einen ungültigen X, Y.
Nun, wenn ich den folgenden code verwenden:
map.on("click", function (e) {
console.log(e);
});
Kann ich abrufen die LayerPoint
in der Konsole neben dem Längen-und Breitengrad.
latlng: o.LatLng
lat: -37.81303878836989
lng: 144.97421264648438
layerPoint: o.Point
x: 950
y: 303
Dann Zugriff auf die folgende URL, wird diese Schicht Fliese:
http://a.tile.osm.org/10/950/303.png
Das problem ist, dass es nicht auch zu sein scheinen, die richtige Fliese für diesen Breitengrad, Längengrad, noch funktioniert mein original-code zu konvertieren lat lng LayerPoint
tatsächlich zurück eine gültige X, Y in den ersten Platz.
Ich bin sehr verwirrt, warum bin ich immer diese Ergebnisse. Jegliche Hilfe würde sehr geschätzt werden. Vielleicht mache ich etwas falsch.
Ich bin mir nicht sicher, ob es eine andere Möglichkeit zum abrufen von Ebenen auf der Grundlage einer Liste von breiten-und Längengraden?
Der Grund, warum ich mich nach dieser ist, denn ich möchte in der Lage sein zu verwenden Cache-tile-Daten für eine Offline-Anwendung und die einzigen Daten, die ich habe, sind geometrie/Koordinaten über eine GeoJSON-Nutzlast, die generiert wird für die client-seitige Anwendung.
UPDATE:
Landete mit dieser Funktion (Dank @scai).
Laut dieser link.
var getSlippyTileLayerPoints = function (lat_deg, lng_deg, zoom) {
var x = (Math.floor((lng_deg + 180) / 360 * Math.pow(2, zoom)));
var y = (Math.floor((1 - Math.log(Math.tan(lat_deg * Math.PI / 180) + 1 / Math.cos(lat_deg * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));
var layerPoint = {
x: x,
y: y
};
return layerPoint;
};
AUSGABE:
Object {x: 924, y: 628}
http://a.tile.osm.org/10/924/628.png
UPDATE 2:
Nach weiterer recherche, stellt sich heraus, was ich war, nachdem ist die folgende Funktion:
var layerPoint = map.project(latlng).divideBy(256).floor();
console.log(layerPoint.x, layerPoint.y);
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nach weiterer recherche, stellt sich heraus, was ich war, nachdem ist die folgende Funktion:
OSM-Kachel-URLs basieren auf einem anderen Schema. Lesen Sie über slippy-map-tile-Namen im OSM-wiki. Es enthält Implementierungen für lon/lat Fliesen zu zahlen und vice versa für verschiedene Programmier - /Skriptsprachen.