SimpleGeo with Python

今日 SimpleGeo という位置情報APIを提供するクラウドサービスにふれた。中で使っているDBは

We call it GiselleDB. Based on Cassandra and other NoSQL

らしい。

SimpleGeoにはLayerという位置情報データを貯めておくストレージがあって、1つだけなら無料で作って動かすことができる。この無料プランの場合、APIの呼び出しは月100万回まで。 有料プランは$399〜$9999まであってAmazonS3にバックアップができる。
SimpleGeo – Plans & Pricing

面白そうなのが Layer MarketPlace で、いくつか無償のLayerが提供されている。天気や震源地のLayerや米国政府が提供している保養地のLayerとかもある。これらを自分のLayerと組み合わせたりして、マッシュアップアプリが作れる。

SimpleGeo Layer Marketplace

以下アカウントをつくってPythonで使うAPIのチュートリアルをやってみた。
How do I get started using Python?

必要なモジュールのインストール

$ pip insatll httplib2
$ pip install oauth2
$ git clone http://github.com/simplegeo/python-simplegeo.git
$ cd python-simplegeo
$ python setup.py install

OAuth TokenはAccount Settingsで得られる

>>> import simplegeo
>>> from simplegeo import Record
>>> oauth_token = 'xxxxxxxxxxxxxxxxxxxxxxx'
>>> oauth_secret = 'xxxxxxxxxxxxxxxxxxxxxxx'
>>> client = simplegeo.Client(oauth_token, oauth_secret)

Layer MarketPlaceにあったgeonames
(com.simplegeo.global.geonames)に近所の座標を与えて半径0.5kmを検索

>>> dic = client.get_nearby('com.simplegeo.global.geonames', \
>>>                          35.7031, 139.5797, limit=1, radius=0.5)
>>> simplejson.dumps(dic, indent=True)
{
 "next_cursor": "XaUpV0Qdvf8oSm160myzhy2zce2pshtRJ2aPOqf0aVhy2udPYjp0TxrgzwtH_dtwsu3OA3gLWWfv32HtTYKJ2aS4", 
 "type": "FeatureCollection", 
 "features": [
  {
   "distance": 421.1493384988064, 
   "created": 1269776951, 
   "geometry": {
    "type": "Point", 
    "coordinates": [
     139.58269999999999, 
     35.700200000000002
    ]
   }, 
   "properties": {
    "admin2": "", 
    "layer": "com.simplegeo.global.geonames", 
    "elevation": "", 
    "name": "Kichijoji Tokyu Inn", 
    "gtopo30": "54", 
    "feature_class": "S", 
    "admin3": "", 
    "cc2": "", 
    "admin1": "", 
    "feature_code": "HTL", 
    "last_modified": "2007-04-13", 
    "admin4": "", 
    "country_code": "JP", 
    "asciiname": "Kichijoji Tokyu Inn", 
    "alternatenames": "", 
    "timezone": "Asia/Tokyo", 
    "type": "place", 
    "population": "0"
   }, 
   "layerLink": {
    "href": "http://api.simplegeo.com/0.1/layer/com.simplegeo.global.geonames.json"
   }, 
   "type": "Feature", 
   "id": "6471863", 
   "selfLink": {
    "href": "http://api.simplegeo.com/0.1/records/com.simplegeo.global.geonames/6471863.json"
   }
  }
 ]
}

リバースジオコーディングは米国のみしか使えない。

>>> address = client.get_nearby_address(35.7031, 139.5797)
>>> print address

simplegeo.APIError: Cannot query outside the US. (#404)

自分のLayerに座標を入れる

>>> r = Record('com.yamakk.test0', '4', 35.7031, 139.5795)
>>> client.add_record(r)

時間や好きなデータ構造を入れる

>>> r = Record('com.yamakk.test0', '5', 35.705045, 139.577916, 'place',
>>> 379868400, foo = 'bar', title='tokyu BLD', prop={'hello':'world'})
>>> client.add_record(r)

保存したデータは
Layers visualizer

こんな感じで見れる。

Posted: July 6th, 2010 | Author: | Filed under: 技術 | Tags: , , , , , , | No Comments »

Leave a Reply