😺

PLATEAUのCityGMLに所在(建物の住所)を追加するスクリプトを作った。

2022/09/19に公開

スクリーンショット 2022-07-27 0.53.14.png

経緯度を逆ジオコーディング

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")

ソースコードはこちら

https://github.com/SohMitian/get_address_with_PLATEAU

Discussion