Twitterで発見、11/3発表、新しいプログラミング言語「Clawn」で、多言語サポートが売りの緯度経度と文字列の相互変換オープンソースライブラリ「Geo3x3(ジオ・スリーバイスリー)」のエンコードを作ってみました。
新しいプログラミング言語「Clawn」を公開しました!https://t.co/uZBaSUV3Yl
— Naoto Uehara (@Naotonosato) November 3, 2022
緯度 35.65858度、経度 139.745433、レベル 14 をエンコードし、E9139659937288 というGeo3x3の文字列を得ました!
Clawnでのプログラムはこんな感じ。
function floor(n) { return to_real_number(to_integer(n)) } function Geo3x3_encode(lat, lng, level) { res = "E" if lng < 0.0 { res = "W" lng = lng + 180.0 } lat = lat + to_real_number(90) unit = to_real_number(180) repeat i:i < level - 1 { unit = div_double_double(unit, 3.0) x = floor(div_double_double(lng, unit)) y = floor(div_double_double(lat, unit)) c1 = 1 + 3 * to_integer(y) res = res + int_to_str(c1 + to_integer(x)) lng = lng - mul_double(x, unit) lat = lat - mul_double(y, unit) } return res } print(Geo3x3_encode(35.65858, 139.745433, 14))
floor関数が無かったので作成したのと、小数との計算が一部うまくいかないところを組み込み関数を使って実装。ループの書き方がおもしろいですね。
decodeはつくりかけです。足りないライブラリは作ればOK!
よかったらどなたかチャレンジください!
Clawn branch on GitHub