オンライン地図のタイル座標

 最近ベースマップに使っているOpenStreetMapが読み込めなくなっていた。

 タイル利用規約には
 『データは誰でも自由に使えます。我々のタイルサーバは違います。』
とある。

 多用しているものの単発的な利用でヘビーユースには該当しないはずだが……。

 元に戻ったようだから、まあいいか。

タイル座標について

 タイルレイヤーの使い方については下のページ。

 これまでLeafletで使ってきたタイルはpng、jpgの画像タイル。

 一方、txt、geojson、pbf(pdfではない)など画像ではないタイルもある。
 こちらはプログラミングできないと使いこなせないっぽい。

 追)否、何とかなるかも

 広範でシームレスに利用するのでなければ、タイル座標を入力して必要な範囲のデータを使うこともできる。

 タイル座標とは、https://tile.openstreetmap.jp/{z}/{x}/{y}.png

{z}/{x}/{y}の部分。

 x、yは各々経度、緯度に該当するが、変換されたピクセル値 pixelから割り出した値。
 zは高さには違いないが、ズーム値。小さい値ほど小縮尺(分母数が大の縮尺)の地図。

などから確認することができる。
 地理院地図はズーム18まで。

 ズーム0は世界全図。
 正方形のタイル1つにおさめられている。

 タイルの一辺を赤道一周約4万kmとして、地点をメートル mで表した座標系が以前ちょっととりあげたEPSG3857:WGS84 球面メルカトル図法。

 一辺を256ピクセル pixelとして、地点をピクセル値で表した座標がタイル座標。1ピクセルあたり約4万/256=約156km。
 ただし、x=0は経度0°ではなく経度180°、y=0は北緯およそ85°。

 ズーム1は256×256のタイルが2倍×2倍で計4タイル。
 ズーム2は(2×2倍)×(2×2倍)で計16タイル。
 ズーム3は(2×2×2(=23)倍)×23倍で計64タイル。
 見る機会が多いのはズーム15の25000分の1地形図だが、
 ズーム15は215×215で計230(=1073741824)タイル。

緯度、経度 ⇒ タイル座標

 経度、緯度からタイル座標への変換は、
 経度の場合、
 (経度+180)×256/360
でズーム0におけるピクセル値(ただし0~256の実数)が求まり、
 2のズーム乗(z乗)を掛けて256で割った値の整数部分が求めるタイルx座標。
 つまり、ズーム値 zのピクセル値は、
 (経度+180)/360 × 2z

 緯度の場合、等分でないことに加えて、南北85.0511°までの範囲なので、すんなりいかない。

 逆双曲線関数との遭遇。球面幾何学の世界。

 頭がねじ切れてしまうので、Slippy map tilenamesのページ(wiki.openstreetmap.org/wiki/Slippy_map_tilenames)を参考に計算。

 R言語で、経度 lon、緯度 latからタイル座標 tilex、tileyへ変換。
 tilexyzという関数(関数名は任意)を作って、値を入力。

tilexyz <- function(lon,lat,zoom){
tilex <- (lon + 180) / 360 * 2^zoom
tiley <- (1 - log(tan(lat * pi / 180)+ (1/cos(lat * pi / 180))) / pi) * 2^(zoom-1)
return(list(tilex,tiley,zoom))
}

 例えばズーム15の箱根・強羅の25000分の1地形図であれば

tilexyz(139.048,35.251,15)

 tilex=29040.46
 tiley=12951.4

 https://cyberjapandata.gsi.go.jp/xyz/std/15/29040/12951.png

 ズーム13の箱根・強羅の標高タイル DEM10Bであれば

tilexyz(139.048,35.251,13)

 tilex=7260.114
 tiley=3237.85

 https://cyberjapandata.gsi.go.jp/xyz/dem/13/7260/3237.txt

といった具合。

 付)
 本日(7.23) 箱根登山電車 復旧

MAP
スポンサーリンク
ふシゼン
タイトルとURLをコピーしました