😺
PLATEAUのCityGMLに所在(建物の住所)を追加するスクリプトを作った。
経緯度を逆ジオコーディング
GoogleMaps APIのreverse_geocodeを使って経緯度から所在を取得します。
googleapikey = 'apikey'
gmaps = googlemaps.Client(key=googleapikey)
geocord = lat + ", " + lon
results = gmaps.reverse_geocode((geocord), language='ja')
add = [d.get('formatted_address') for d in results]
list_add = add[1].split()
return list_add[1]
CityGMLをパース
Python標準のXMLパーサーを使ってCityGMLをパースします。
あんまりキレイなコードじゃないですが、今回はまあ動けば良し。
# XMLツリーを取得
tree = ElementTree.parse('53394610_bldg_6697_2_op.gml')
# rootを取得
root = tree.getroot()
# 建物オブジェクトの経緯度のタグまで取得
for building in root.findall('{http://www.opengis.net/citygml/2.0}cityObjectMember'):
for gml_posList in building[0].findall('{http://www.opengis.net/citygml/building/2.0}lod0RoofEdge')[0][0][0][0][0][0]:
# 経度と緯度に分割して取得
posList = gml_posList.text.split()
# addressタグを作成
address = ElementTree.SubElement(building[0], 'address')
# 逆ジオコーディングのメソッドを呼び出して所在をaddressタグに書き込む
address.text = ga.rev_geo(posList[0], posList[1])
tree = ElementTree.ElementTree(root)
# ファイルを出力
tree.write('test.gml', encoding="UTF-8")
ソースコードはこちら
Discussion