地域メッシュとは、統計に利用するために、緯度・経度に基づいて日本国内をほぼ同じ大きさの網の目(メッシュ)に分けたものです
地域メッシュ統計(総務省統計局)
https://www.stat.go.jp/data/mesh/index.html
粗いほうから第1次メッシュ、第2次メッシュ、第3次メッシュ、2分の1地域メッシュ、4分の1地域メッシュ、8分の1地域メッシュの6段階があり、もっとも細かい8分の1地域メッシュでは約125m四方ごとに地域を表すことができます
地域メッシュ統計の特質・沿革(総務省統計局)
https://www.stat.go.jp/data/mesh/pdf/gaiyo1.pdf
以下にJavaScriptで緯度経度と地域メッシュコードを相互変換するコードを示します
緯度経度 → 地域メッシュコード
latlonToMeshcode
function latlonToMeshcode( lat, lon){
let meshCode = ("0" + Math.floor(lat*3/2)).slice(-2) +
("0" + Math.floor(lon*1)).slice(-2) +
Math.floor( lat*12 % 8) +
Math.floor( lon*8 % 8) +
Math.floor( lat*120 % 10) +
Math.floor( lon*80 % 10) +
( Math.floor( lat*240 % 2) * 2 + Math.floor( lon*160 % 2) + 1) +
( Math.floor( lat*480 % 2) * 2 + Math.floor( lon*320 % 2) + 1) +
( Math.floor( lat*960 % 2) * 2 + Math.floor( lon*640 % 2) + 1);
return meshCode;
}
1次メッシュコードの場合は出力結果の上4桁を、2次メッシュコードの場合は上6桁を、3次メッシュコードの場合は上8桁を、2分の1地域メッシュコードの場合は上9桁を、4分の1地域メッシュコードの場合は上10桁を、8分の1地域メッシュコードの場合は上11桁すべてを使用してください
地域メッシュコード → 緯度経度
meshcodeToLatlon
function meshcodeToLatlon( meshCode){
meshCode = meshCode.replace(/\-/g,"");
let lat = 0, lon = 100;
if( meshCode.length >= 4){
lat = lat + meshCode.substring(0,2) / 1.5;
lon = lon + meshCode.substring(2,4) * 1;
}
if( meshCode.length >= 6){
lat = lat + meshCode.substring(4,5) / 12;
lon = lon + meshCode.substring(5,6) / 8;
}
if( meshCode.length >= 8){
lat = lat + meshCode.substring(6,7) / 120;
lon = lon + meshCode.substring(7,8) / 80;
}
if( meshCode.length >= 9){
lat = lat + Math.floor((meshCode.substring(8,9)-1)/2) / 240;
lon = lon + (meshCode.substring(8,9)-1)%2 / 160;
}
if( meshCode.length >= 10){
lat = lat + Math.floor((meshCode.substring(8,9)-1)/2) / 480;
lon = lon + (meshCode.substring(8,9)-1)%2 / 320;
}
if( meshCode.length >= 11){
lat = lat + Math.floor((meshCode.substring(8,9)-1)/2) / 960;
lon = lon + (meshCode.substring(8,9)-1)%2 / 640;
}
return {"lat":lat, "lon":lon};
}
各地域メッシュコードの南西端の緯度経度を返します。60進法(度・分・秒)から10進法(度)への変換は含みません