2009年4月10日金曜日

Python から OpenStreetMapのデータを修正してみる はてなブックマークに追加

ハンディGPSデータロガー m-241を買ってから、ちょこちょことOpenStreetMapにデータを投稿していたのですが、編集ソフトを使ってやるよりAPIから操作したくなるのが人情というもの、APIのドキュメントをみていると追加や削除の情報はいろいろ乗っていたのですが、拠点の修正がよく分からなかったのでテストしたメモです。


OSMのAPIの基本


・HTTPのMETHODでデータを管理する
・1アクセス1オブジェクト
・XMLでデータを表現する

OSMの種類



目的HTTP METHODサンプル
作成 PUT http://api.openstreetmap.org/api/0.5/(node|way)/create
取得 GET http://api.openstreetmap.org/api/0.5/(node|way)/{ID}
修正 PUT http://api.openstreetmap.org/api/0.5/(node|way)/{ID}
削除 DELETE http://api.openstreetmap.org/api/0.5/(node|way)/{ID}


Python から OpenStreetMapのデータを修正した場合のサンプル


この例では花やしきのPointデータを修正します。花やしきのIDは「369934997」になるのでこちらを{ID}にしています。
  1.  -*- coding: utf-8 -*-  
  2. import httplib,  base64  
  3. username="xxxx"  
  4. password="yyyy"  
  5.   
  6. authheader =  "Basic %s" % base64string  
  7. headers = {"Authorization": authheader}  
  8.   
  9. body='''''<!--xml version="1.0" encoding="UTF-8"?--> 
  10. <osm version="0.5" generator="OpenStreetMap server"> 
  11.   <node id="369934997" lat="35.7151986" lon="139.7945802" user="xxxx" visible="true" timestamp="2009- 
  12. 04-09T15:42:09+01:00"> 
  13.     <tag k="name" v="浅草花やしき (Hanayashiki)"> 
  14.     <tag k="created_by" v="Potlatch 0.10f"> 
  15.     <tag k="generator" v="test python script"> 
  16.     <tag k="tourism" v="museum"> 
  17.     <tag k="name:ja" v="浅草花やしき"> 
  18.   </tag></tag></tag></tag></tag></node> 
  19. </osm>'''  
  20. conn = httplib.HTTPConnection("api.openstreetmap.org:80")  
  21. conn.request("PUT""/api/0.5/node/369934997", body, headers)  
  22. response = conn.getresponse()  
  23. print response.status, response.reason  
  24. data = response.read()  
  25. #print data  
  26. conn.close()  


※2週間後にはAPIのバージョンが0.6に変わるようなので、すぐに役に立たなくなります



0 件のコメント: