Leaflet APIを使用した緯度と経度座標からLayerPoint(x、y)を取得する方法
-
21-12-2019 - |
質問
指定されたLAT / LNGからLayerPoint
を取得するには、次のコードを使用している場合:
var latLng = new L.latLng(-37.81303878836989, 144.97421264648438);
var point = map.latLngToLayerPoint(latLng);
.
出力は次のものです:
o.Point
x: 86042
y: 77065
.
次のURLを使用してレイヤータイルにアクセスしようとすると、
href="http://ja.tile.osm.org/10/86042/77065.png" REL="nofollowNoreferrer"> http://a.tile.osm.org/10/86042. / 77065.png
無効なx、y。
次のコードを使用している場合:
map.on("click", function (e) {
console.log(e);
});
.
緯度経度とともにコンソールのLayerPoint
を取得することができます。
latlng: o.LatLng
lat: -37.81303878836989
lng: 144.97421264648438
layerPoint: o.Point
x: 950
y: 303
.
次のURLにアクセスすると、このレイヤーのタイルを返します。
http://a.tile.osm.org/10/950 / 303.png
問題は、その緯度経度の正しいタイルでさえないようではないようではないということでも、最初の場所で有効なx、yを実際に返信するための私の元のコードは実際に有効なx、yを返します。
私がこれらの結果を得る理由に関して非常に混乱しています。あらゆる助けが大いに感謝されるでしょう。おそらく私は何か悪いことをしています。
緯度と短いリストに基づいてタイルレイヤーを取り出すもう1つの方法があるかどうかはわかりませんか?
私がその後に私がオフラインアプリケーションにキャッシュされたタイルデータを使用できるようにする理由は、クライアントサイドアプリケーションに対して生成されたGeojsonペイロードを介したジオメトリ/座標です。 。
更新:
この機能を伴う終わりに終了しました( @scai )。
このリンク。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;
};
.
Object {x: 924, y: 628}
.
http://a.tile.osm.org/10/924. / 628.png
アップデート2:
さらなる研究の後、私が後に何があったかは次の関数です:
var layerPoint = map.project(latlng).divideBy(256).floor();
console.log(layerPoint.x, layerPoint.y);
. 解決
さらなる研究の後、私が後に何があったかは次の関数です:
var layerPoint = map.project(latlng).divideBy(256).floor();
console.log(layerPoint.x, layerPoint.y);
. 他のヒント
OSMのタイルURLは別の方式に基づいています。 OSM WikiのSlippy Map Tile Names を読むべきです。これには、さまざまなプログラミング/スクリプト言語のためのLON / LATへの実装があり、その逆も含まれています。