2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

緯度、経度から対応する地理院タイルを取得する

Last updated at Posted at 2024-01-23

はじめに

緯度・経度がわかっている時、その地点の対応する地理院タイルを取得したい。その座標の変換方法を調べる

計算式

参考サイト によると、以下のようである

経度λとズームレベルzからピクセル座標xを計算する
drawing

緯度φとズームレベルzからピクセル座標yを計算する
drawing

Kotlinでの実装

    private fun getPixelCoord(lat: Double, lng: Double, zoom: Double): Pair<Int, Int> {
        val l = 85.05112878

        val x = 2.0.pow(zoom + 7.0) * (lng / 180.0 + 1)
        val y = (2.0.pow(zoom + 7.0) / Math.PI) *
                (-atanh(sin(Math.PI * lat / 180.0)) + atanh(sin(Math.PI * l / 180.0)))

        return x to y
    }

検証

上記メソッドを使ってズームレベル16の時の東京駅(緯度:35.680959106959, 経度:139.76730676352)の地理院タイルを求めてみる

        val pixelCoord = getPixelCoord(35.680959106959, 139.76730676352, 16.0)
        println("pixelCoord: $pixelCoord")

計算結果は以下のようになり、

pixelCoord: (14902236, 6606514)

東京駅はズームレベル16の地理院タイル上でX座標: 14902236, Y座標: 6606514 ということがわかった
タイルは一辺が256ピクセルの正方形であるから、256で割ることで左上から何番目のタイルなのかを求めることができる

14902236 / 256 = 58211 番目
6606514 / 256 = 25806 番目

これを国土地理院の 標準地図URL に当てはめると、、

https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png

https://cyberjapandata.gsi.go.jp/xyz/std/16/58211/25806.png

drawing

たしかに、東京駅周辺の地理院タイルが取得できている :ok_woman:

参考

正方形タイルについては以下が参考になった
https://www.trail-note.net/tech/tile/

:tada:

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?