在寫論文搞數據的過程中遇到的問題,記錄一下小白快速解決辦法。
1.如果只需要地址的經緯度數據,直接用這個網站地理編碼 (百度) 地址轉經緯度 - 批量工具網 (piliang.tech),里面有百度和高德地圖編碼,個人也用python和高德地圖匹配了一遍,結果是靠譜的。
所需工具:網頁,將地址從excel里粘貼過來就行。
2.如果需要識別這個地址所在省、市、區以及代碼等問題。
方法一(不推薦,存在坐標系轉換問題):先用第一步識別出經緯度,然后用Arcgis生成點數據后跟區縣數據用identity識別一下就會用點所在區縣的信息。
所需工具:Arcgis,帶有地理信息的區縣地圖
步驟:
- 文件>添加數據-把含有經緯度坐標的數據導入Arcgis,如果出現沒有注冊類等問題,可能是因為excel版本過高,選擇97-03版的就好了
- 在表格右鍵>顯示XY數據>X經度,Y緯度
- 對生成的事件右鍵>數據>導出數據>添加到當前,如果不進行這一步,會沒有OID,無法進行標識
- 加載地圖>arctoolbox>分析工具>疊加分析>標識
- 新生成的表就包含了標識的內容,右鍵打開屬性表就可以看到
方法二:用python和高德地圖直接返回省、市、區等信息
所需工具:高德開放平台 | 高德地圖API (amap.com),python(下載Anaconda用spyder,選這個是因為里面含有很多打包好的函數可以直接用,或者熟練運用python的朋友可以隨心意)
解決辦法主要分為兩步
1.從高德地圖獲取key
2.用python進行地址解析,返回經緯度
- 高德地圖API注冊,在我的應用里面申請key,選web服務
- 打開spyder,輸入以下代碼,運行快捷鍵shift+enter,選中前三行,右下角沒有報錯就證明可以引用
import requests import json import codecs from openpyxl import Workbook wb = Workbook() sheet = wb.active sheet.title="qiang" def get_location(address,i): print(i) url = "http://restapi.amap.com/v3/geocode/geo" data = {'key':'*****',#在高德地圖獲得的key 'address': address } r = requests.post(url,data=data).json() sheet["A{0}".format(i)].value = address.strip('\n') print(r) if r['status']=='1': if len(r['geocodes'])>0: GPS = r['geocodes'][0]['location'] sheet["B{0}".format(i)].value='['+GPS+']'#這里獲取經緯度 citycode = r['geocodes'][0]['citycode'] sheet["E{0}".format(i)].value='['+citycode+']'#這里獲取城市行政區划代碼 adcode = r['geocodes'][0]['adcode'] sheet["G{0}".format(i)].value='['+adcode+']'#這里獲取區縣行政區划代碼 else: sheet["B{0}".format(i)].value='[]' else: sheet["B{0}".format(i)].value='none' f=codecs.open(r"D:\import.csv","r","utf-8")#導入文件 i=0 while True: line=f.readline() i=i+1 if not line: f.close() wb.save(r"D:/results.csv")#導出位置 break get_location(line,i)
- 導出csv的經緯度坐標為[,]格式,用excel>數據>分列,可以提取出來
注:不論是第一種方法還是第二種方法,都有識別精確度的問題,批量識別以后建議還是瀏覽一遍有沒有異常。咨詢過身邊的同學老師,普遍是直接用火星坐標系定位到WGS84里面,但是個人認為有些不精准,關於火星坐標系和WGS84的轉換另寫一篇。