1. 程式人生 > >使用天地圖服務為地名資料找到地理座標

使用天地圖服務為地名資料找到地理座標

起因是 x老師想從微信公佈的中國歷史文化名鎮名村擬公佈名單裡,找出對應鎮、村的地理座標。

名單裡的鎮、村資訊其實格式非常標準,也很完整,如下:

第一反應是希望查詢天地圖介面中的行政區劃API,因為該介面可以返回對應行政區劃的面狀要素資訊。

但是通過閱讀介面說明,我們發現:行政區介面僅返回縣級以上行政區劃資訊。而我們需要的是鎮、村資訊。

因此,只能放棄,將村鎮資訊作為“地名地址”資料,使用地理編碼API,查詢鎮政府和村中心的點要素資訊。

 

對於天地圖服務的使用,和百度地圖、高德地圖一樣,需要註冊後,獲得註冊碼,作為向伺服器傳送請求時的一個引數。但目前天地圖服務的請求次數並沒有限制,十分適宜作為科研的資料來源。

程式碼如下:(已把token替換為一串無意義的數字了)

 1  -*- coding: utf-8 -*-
 2 """
 3 Created on Wed Dec 26 09:43:56 2018
 4 利用天地圖的行政區劃api完成地址解析
 5 
 6 
 7 @author: shirley
 8 """
 9 
10 import requests
11 import pandas as pd
12 
13 application_key='57df1fe06eb196694bb0bb939ecc0'
14 
15 input_filename = "village.txt"
16 output_filename="
village.csv" 17 18 def getParam(searchWord): 19 20 url = 'http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"'+searchWord+'"}&tk='+application_key 21 print(url) 22 try: 23 response = requests.request('GET',url) 24 response.encoding = 'utf-8' 25 location = response.json()
26 return location['location'] 27 except Exception as ex: 28 print(ex) 29 30 31 csvFile = open('error.csv','a',encoding='utf-8') 32 csvFile.write(url+',') 33 return '' 34 35 txt = pd.DataFrame.from_csv(input_filename,sep='',encoding='utf-8',header=None) 36 shp_lat_list = [] 37 shp_lon_list = [] 38 39 for address_name in txt.values: 40 shape = getParam(address_name[0].strip()) 41 shp_lat_list.append(shape['lat']) 42 shp_lon_list.append(shape['lon']) 43 44 txt['lat'] = shp_lat_list 45 txt['lon'] = shp_lon_list 46 txt.to_csv(output_filename)