2008年12月14日日曜日

GeoPlanetのPlaceType一覧 その2 はてなブックマークに追加

こじんてきにGeoPlanetに興味津々のため、引き続き調査メモです。
GeoPlanetのPlaceType一覧で世界全体でのコード分布がわかったので、次に日本でどのようなPlaceTypeがあるか、簡単なクローラーを作って調査してみました。
クローラーは、日本のwoeidからchirldrenを再起的に探索しています。ただし、途中で接続エラーになるため現状3000レコードくらいした探索できていません。
まだ、調査中なので網羅されていないコードがありそうです。


PlaceType 7 WOE_TOWN
市町村
例 府中市 普代村 嵐山町

8 Prefecture 県
例 北海道 滋賀県 京都府
日本語の場合は、nameがState(州)からPrefectureに変更になっている

9 Gun/Ku 郡/区
例  胆沢郡 遠田郡 乙訓郡
日本語の場合は、nameがCounty(州)から Gun/Kuに変更になっている
※現時点では区に対応するデータが見つからなかった。

10 WOE_LOCALADMIN 町丁目
例 ハウステンボス町 花高 鹿子前町


11 WOE_ZIP 郵便番号
例 857-4815 761-8058 023-1761
日本のデータでは7桁の完全な郵便番号しか存在しないようです。

12 WOE_COUNTRY 国
例 日本

13 WOE_ISLAND 島
本州 赤瀬 五島列島 沖ノ島

14 WOE_AIRPORT 空港
高松空港

15 WOE_DRAINAGE 川 湖沼
例 北上川 諏訪湖 涸沼

16 WOE_LANDFEATURE 地上物(観光地?)
例 女木海水浴場 三界山 岸和田市今池公園

20 WOE_POI POI(病院、駅、学校、役所、劇場)
例 ワーナー・マイカル・シネマズ東岸和田 佐世保駅 斉藤医院

22 WOE_SUBURB 番地
例 3丁目 (丁目なし)


24 WOE_COLLOQUIAL 地方
中部地方 八丈支庁 能登半島 中京地方

27 WOE_HISTORICALCOUNTY なくなった自治体 (?)
例 佐賀郡 Aoba-ku  龍神村
データをみると、なくなっていない自治体が多い、合併された等で形が変わっただけで変更になるのかも?その場合woeidは変更になるのだろうか?


WOE_HISTORICALCOUNTY で、どのくらい古いデータをもっているのか、合併情報のフレッシュネスあたりを調べていこうかと思います。


関連記事

GeoPlanetについて
GeoPlanetのPlaceType一覧
GeoPlanetのPlaceType一覧 その2

2008年12月10日水曜日

GeoPlanetのPlaceType一覧 はてなブックマークに追加

前回の続きです。

GeoPlanetのPlaceType一覧と意訳を作ってみました。


歴史上の場所といったデータやスポーツチームというplaceTypeが特徴的ですね。
ただ、同じIDで違う名前のものがあるようです。また、日本国内のデータ分布が調べたかったのですが、PlaceTypeだけの検索ができないので、日本の市町村合併をどのくらい網羅しているかがわからないですね。

0Undefined未定義未定義の場所
1Buildingビルディング住所表記内の街区(ハウス)ナンバーにマッチしているもの
2Street Segmentストリートセグメント住所表記内のストリートにマッチしているストリートセグメントです
3Nearby Buildingビルディング周辺住所表記内の街区(ハウス)ナンバーの近くに街区(ハウス)ナンバーを持つビルディング
4Streetストリート住所表記内のストリートにマッチしたもの
5Intersection交差点検索クエリーにマッチする道路の交差点
6Streetストリートストリート(通り)
7Town人が定住している場所、主に市、町、村
8Stateその国の中の最上位行政区分のうちの1つ(訳注 日本だと県)
9Countyその国の中の2階層目の行政区分のうちの1つ
10Local Administrative Areaローカル行政区分その国の中の3階層目の行政区分のうちの1つ
11Postal Code郵便番号一部または完全な郵便番号
12CountryISO 3166-1によって定義される国または属領のうちの1つ
13Island
14Airport空港空港
15Drainage水上物水に関連した地物(例えば川、運河、湖、湾、海)
16Land Feature地上物 土に関連した地物(例えば公園、山、浜辺)
17Miscellaneous寄せ集めの場所カテゴライズできない場所
18NationalityNaNAn area affiliated with a nationality
19SupernameSupername複数の国にまたがる地域
20Point of Interest関心点(訳注POI)関心点(例えば学校、病院、観光名所)
21Region地域複数の国の一部にまたがる地域
22Suburb 郊外郊外や団地といった町の区分
23Sports Teamスポーツチームスポーツチーム
24Colloquial口語口語で知られている場所名
25ZoneNaN特定の文脈(例えばMSA("Metropolitan Statistical Areas")またはエリアコード)の範囲内のエリア/td>
26Historical State歴史上の州その国の中の最上位階層目の行政区分で現在は利用されていないもの
27Historical County歴史上の郡その国の中の2階層目の行政区分で現在は利用されていないもの
29Continent大陸地球の主な大陸のうちの1つ
31Time Zoneタイムゾーンオルソン標準によって定義される地域(tzデータベース)
32Nearby Intersection近くの交差点 検索クエリーで通りの近くにある街路の交差点
An intersection of streets that is nearby to the streets in a query string
33Estate地所集合住宅、または名前の知られた分譲地
35Historical Town歴史上の町人が定住している場所にある、もう使われていない原名
36Aggregate集計集計された場所


関連記事

GeoPlanetについて
GeoPlanetのPlaceType一覧
GeoPlanetのPlaceType一覧 その2

2008年12月9日火曜日

GeoPlanetについて はてなブックマークに追加

Yahoo Developer Network(アメリカ版)GeoPlanet APIは日本語の住所検索(大字くらいまで)やランドマーク検索(島、目標物)ができるうえ、住所の親子関係や隣接情報といった情報も保持しています。

親子関係をしっかり持ったGeo系WebAPIが少ない現状、GeoPlanetの使い道はいろいろありそうなので、自分用のメモがてらに整理してみました(世界の地物をWoEIDというユニークのIDで管理しようとしているため、このID体系がはやった場合に、複数のWebリソースをWoEIDをキーに串刺しして利用できそうです)。



/places
fliterにマッチした情報を返します
filterで利用できるものは、キーワードとplacetypesです。
東京タワー,芝公園&WOE_LOCALADMIN(町丁目名),太平洋(詳細情報あり

/place/{woeid}
指定したwoeidの詳細情報を返します
詳細情報は、緯度経度、Boundingbox(矩形)などです。
石垣市,三重県,豊橋市,東京タワー

/place/{woeid}/parent
指定したwoeidの親データを返します。 市町村だった場合は県、県だった場合は国
石垣市,三重県,豊橋市

/place/{woeid}/ancestors
指定したwoeidの親階層を下の階層から順番に返します。belongtosとの違いは、完全な親子関係のものしか返さないようです。
大字とかがどの都道府県に入っているかがわかります。また住所表記のサポートもできそうです。
東京都台東区浅草1丁目,三重県,豊橋市,名古屋城


/place/{woeid}/belongtos
親階層を順番にたどって表示します。ancestorsとの違いは、上位であればジャンルが違っている親も郵便番号や地域圏名(関東、アジア、世界)も返します
東京都台東区浅草1丁目,三重県,豊橋市,名古屋城

/place/{woeid}/neighbors
該当するwoeidをもつ情報の近くの場所を返します
ポリゴンデータ+アルファのデータをもとのやっているようですね
※必ずしも地理的に隣接するというわけではないことに注意すべきです。
石垣市(404 not found航路は出てこない),三重県,木更津(地続きではない川崎が出てくることに注目、アクアラインで接続している)


/place/{woeid}/siblings
指定したwoeidの親が一緒の兄弟情報を返します(松戸市の場合は千葉県の市町村一覧)
松戸市,台東区(東京は特殊で23区のみしかかえってこない),日本(世界の国)

/place/{woeid}/children
該当するwoeidを親とする情報を返します(子一覧)
例 木更津,豊橋(placetypeが町丁目のみ)

/placetypes
placetypeの一覧を返します。
placetype一覧(詳細付)

/placetype
placetypeの詳細説明を返します
※コードが一緒でも選択する言語でplacetype名が変わるみたい,WOE_STATEがstateやprefecutreになった。
9(country),8(WOE_STATE)





ぱっと思いつくのは、都道府県、市町村といったカテゴリを生成することに利用できそうですね。ただ、階層構造があれれっという場所も多いですし、そもそもwoeidがまったく世の中に流通していないので利用するには独自にJISコード等とのマッチングが必要になりますね。

ほかにも,YQLというSQLライクなフィルターもあるようです。


関連記事

GeoPlanetについて
GeoPlanetのPlaceType一覧
GeoPlanetのPlaceType一覧 その2

2008年12月6日土曜日

Flickr GeoFeedとGoogle Static APIとの連携 はてなブックマークに追加

Google blogger上でFlikr GeoFeedGoogle Static Map APIとの連携をするモジュールを書いてみた。
Flikr GeoFeedはjsonpでも動くので、javascriptのみなので気軽にblog等に貼付けれると思います。
ローカル上では問題なく動くのですが、bloggerでは出たり出なかったりするときがあるの調査中です。




 


flickrへの一括アップロード はてなブックマークに追加

自宅のPCが古いため、Nikon COOLPIXP6000で撮影した画像を処理するのに大変時間がかかるため、編集はflickrのバッチで行うように変更しました。
そこで、ディレクトリ内の画像ファイルを一括してアップロードするpythonスクリプトを書いてみた。


# coding: UTF-8
import flickrapi
import os

api_key = 'xxxxxxxx'
secret_key = 'yyyyyx'
my_id = 'zzzzz@N00'

flickr = flickrapi.FlickrAPI(api_key,secret_key)

#auth
(token, frob) = flickr.get_token_part_one(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))



path='/Users/xxx/Pictures/'
files = os.listdir(path)

dir(files)
for file in files:

print file
rtn = flickr.upload(filename=path+file,is_public=0,is_family=1,tags="tag tags aaa")
print rtn.photoid



2008年11月30日日曜日

Nikon p6000のGeoTagをflickrに登録する はてなブックマークに追加

Nikon COOLPIXP6000のGeoTagはExifに入るため、そのままflickrに写真をUploadしてもGeoTagがつかないので、Pythonを使ってFlickrに公開しているNikon COOLPIXP6000のGeoTagを一括登録するスクリプトを書いてみた。

ちなみにFlickr APIのキーの取得にと、flickrapiのインストールが必要です。

※NikonP6000を修理に出したところ のGeoTagの仕様が変わったようです。Versionによっては動作しないものがあります。
詳しくはこちらから



import flickrapi


api_key = 'XXXXXXXXXXXXXXXXXXXX'
secret_key = 'YYYYYYYYYYYYYYY'
my_id = 'ZZZZZZ@N00'

flickr = flickrapi.FlickrAPI(api_key,secret_key)

#auth
(token, frob) = flickr.get_token_part_one(perms='write')
if not token: raw_input("Press ENTER after you authorized this program")
flickr.get_token_part_two((token, frob))


search = flickr.photos_getWithoutGeoData( sort='date-posted-desc')
for photo in search.photos[0].photo:
#print photo['id'] + " " + photo['title']
getexif = flickr.photos_getExif(photo_id = photo['id'] )
if( getexif.photo):
lat = lon = ""
for exif in getexif.photo[0].exif:
if( exif['label'] == 'Latitude' ):
lat = ( exif.raw[0].text )
if( exif['label'] == 'Longitude' ):
lon = ( exif.raw[0].text )
if( exif['label'] == 'Altitude' ):
alt = ( exif.raw[0].text )
if( exif['label'] == 'GPS Time (atomic clock)' ):
time = ( exif.raw[0].text )
if( exif['label'] == 'Direction of Image' ):
dire = ( exif.raw[0].text )


a = lat.split(",\n")
b = lon.split(",\n")
if( (len(a) == 3 and len(b) == 3 ) and (lat != '0/0,\n0/0,\n0/0' and lon != '0/0,\n0/0,\n0/0' ) ):
#print lat
#print lon
da = a[0].split("/")
ma = a[1].split("/")
lat = int(da[0]) +float( ma[0] ) /float(ma[1]) / 60
db = b[0].split("/")
mb = b[1].split("/")
lon = int(db[0]) +float( mb[0] ) /float(mb[1]) / 60
print "http://maps.google.co.jp/?ie=UTF8&ll="+str(lat)+","+str(lon)+"&spn=0.001073,0.002006&z=19"
flickr.photos_geo_setLocation(photo_id = photo['id'],lat=lat,lon = lon)



プログラムの簡単な説明

flickrにあがっているGeo情報が付いていない画像をとってきてExIfにGeoTagがあるかどうかをチェック。
GeoTagが付いている場合は、Flickr形式に変換して、FlickrにGeo情報を付与。


※2009/03/03 修正
 flickrにはAPIを利用しなくてもGeoTagを自動で付与するオプションがあります。