RethinkDBでGeoJSONをゴニョゴニョする方法について。 サンプルコードはJavaScriptで書いてありますが、Ruby, Python, JavaでもOKです。
GeoJSONとは
JSONをベースとした、位置情報データフォーマットです。
ReQL - geojson
RethinkDBのクエリであるReQLには、geojsonというクエリがあります。
geojsonを使うと、GeoJSONをRethinkDBのGeometry型データに変換することができます。 Geometry型については、以下に公式サイトのリンクを貼ります。
ReQL data types - Geometry data types
サポート対象
GeoJSONはいくつかの型を持ちますが、RethinkDBがサポートするのは Point, LineString, and Polygon のみです。 MultiPoint, MultiLineString, and MultiPolygonはサポートされていませんが、array型を用いて複数のPoint, LineString, Polygonを格納することはできるようです。
また、座標に関して、緯度経度の座標はサポートされていますが、デカルト座標や高度座標を持つGeoJSONをRethinkDBは受け付けません。
コードサンプル
var geoJson = { 'type': 'Point', 'coordinates': [ -122.423246, 37.779388 ] }; r.table('geo').insert({ id: 'sfo', name: 'San Francisco', location: r.geojson(geoJson) }).run(conn, callback);
ReQL - toGeojson
一方、Geometry型をGeoJSONに変換するには、toGeojsonクエリを使います。
コードサンプル
r.table('geo').get('sfo')('location').toGeojson.run(conn, callback); // result passed to callback { 'type': 'Point', 'coordinates': [ -122.423246, 37.779388 ] }