掲題の通り。詳しくはREADMEを読んでみて欲しい。
karupanerura/c-geohex3 · GitHub
GeoHexとは何なのかと言うと世界を六角形により分割するためのアルゴリズムだ。
サイバーでかっこいいデモが公開されている。
デモサイト: GEOHEX.net
幾つかインターフェースや名前や実装方法を変更しているが、基本的にはJavaScriptにより実装された原始コードの移植と言って差し支えない。
元コードとアルゴリズムはMITライセンスで提供されており、本コードもMITライセンスで提供している。
現状で提供されているテストケースは全てパスしており、
以下のようなコードが動く。
#include <geohex3.h>
#include <stdio.h>
int main (int argc, char *argv[]) {
for (int i = 1; i < argc; i++) {
printf("/********* geohex:%s **********/\n", argv[i]);
const geohex_verify_result_t result = geohex_verify_code(argv[i]);
switch (result) {
case GEOHEX3_VERIFY_RESULT_SUCCESS:
{
const geohex_t geohex = geohex_get_zone_by_code(argv[i]);
printf("code = %s\n", geohex.code);
printf("level = %zu\n", geohex.level);
printf("size = %Lf\n", geohex.size);
printf("[location]\n");
printf("lat = %Lf\n", geohex.location.lat);
printf("lng = %Lf\n", geohex.location.lng);
printf("[coordinate]\n");
printf("x = %ld\n", geohex.coordinate.x);
printf("y = %ld\n", geohex.coordinate.y);
}
break;
case GEOHEX3_VERIFY_RESULT_INVALID_CODE:
printf("code:%s is invalid.\n", argv[i]);
break;
case GEOHEX3_VERIFY_RESULT_INVALID_LEVEL:
printf("code:%s is invalid level. MAX_LEVEL:%d\n", argv[i], GEOHEX_MAX_LEVEL);
break;
}
}
}
せっかくなのでXSを使ってPerl Bindingを書いた。
Geo::Hex::V3::XS - GeoHex implementation with XS. (c-geohex3 Perl5 binding.) - metacpan.org
近いうちにSwiftのbindingも書くつもり。
宣伝
gotanda.pm.org
いますぐ応募!
宣伝2
yapcasia.org
聞きたい!という人はイイね!なりツイートなりお願いします!