コンパイラかく語りき

import { Fun } from 'programming'

RethinkDBでGeoJSON操作

RethinkDBでGeoJSONをゴニョゴニョする方法について。 サンプルコードはJavaScriptで書いてありますが、Ruby, Python, JavaでもOKです。

GeoJSONとは

JSONをベースとした、位置情報データフォーマットです。

ReQL - geojson

RethinkDBのクエリであるReQLには、geojsonというクエリがあります。

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クエリを使います。

ReQL - toGeojson

コードサンプル

r.table('geo').get('sfo')('location').toGeojson.run(conn, callback);
// result passed to callback
{
    'type': 'Point',
    'coordinates': [ -122.423246, 37.779388 ]
}