緯度,経度およびZoomからOpenStreetMapのタイルを得るサービスを作りました。
https://elix.jp/app/geotilefinder/
緯度経度はGoogleMapsの任意の場所で右クリックするとコピーできます。
緯度経度およびzoomからタイルを得る処理はこんな感じです。
function latLngToTileXY(lat, lng, zoom) {
var lat_rad = lat * Math.PI / 180;
var n = Math.pow(2, zoom);
var xtile = parseInt((lng + 180.0) / 360.0 * n);
var ytile = parseInt((1.0 - Math.log(Math.tan(lat_rad) + 1.0 / Math.cos(lat_rad)) / Math.PI) / 2.0 * n);
return [xtile, ytile, zoom];
}
ソースコードはほとんどGithub copilotが書いてくれました
// タイル座標とズームからタイル左下と右上の緯度経度を求める
function tileXYToLatLng(xtile, ytile, zoom) {
var n = Math.pow(2, zoom);
var lng_deg = xtile / n * 360.0 - 180.0;
var lat_rad = Math.atan(Math.sinh(Math.PI * (1 - 2 * (ytile+1) / n)));
var lat_deg = lat_rad * 180.0 / Math.PI;
var lng_deg2 = (xtile+1) / n * 360.0 - 180.0;
var lat_rad2 = Math.atan(Math.sinh(Math.PI * (1 - 2 * ytile / n)));
var lat_deg2 = lat_rad2 * 180.0 / Math.PI;
iResultSW.value = lat_deg + "," + lng_deg;
iResultNE.value = lat_deg2 + "," + lng_deg2;
return [lat_deg, lng_deg, lat_deg2, lng_deg2];
}
Github copilotに「ありがとう」を伝えるすべはないものか・・・。
chatGPTやAlexaなら直接「ありがとう」でつたわるんだけどなー。