質問

指定された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

ENTER IMENTDESCRUストの入力

問題は、その緯度経度の正しいタイルでさえないようではないようではないということでも、最初の場所で有効な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への実装があり、その逆も含まれています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top