在写论文搞数据的过程中遇到的问题,记录一下小白快速解决办法。

1.如果只需要地址的经纬度数据,直接用这个网站地理编码 (百度) 地址转经纬度 - 批量工具网 (piliang.tech),里面有百度和高德地图编码,个人也用python和高德地图匹配了一遍,结果是靠谱的。

所需工具:网页,将地址从excel里粘贴过来就行。

2.如果需要识别这个地址所在省、市、区以及代码等问题。

方法一(不推荐,存在坐标系转换问题):先用第一步识别出经纬度,然后用Arcgis生成点数据后跟区县数据用identity识别一下就会用点所在区县的信息。

所需工具:Arcgis,带有地理信息的区县地图

步骤:

  • 文件>添加数据-把含有经纬度坐标的数据导入Arcgis,如果出现没有注册类等问题,可能是因为excel版本过高,选择97-03版的就好了
  • 在表格右键>显示XY数据>X经度,Y纬度
  • 对生成的事件右键>数据>导出数据>添加到当前,如果不进行这一步,会没有OID,无法进行标识

Java 高德根据经纬度转成行政区编码 高德地址经纬度_python

 

 

  •  加载地图>arctoolbox>分析工具>叠加分析>标识

Java 高德根据经纬度转成行政区编码 高德地址经纬度_python_02

Java 高德根据经纬度转成行政区编码 高德地址经纬度_数据_03

  •  新生成的表就包含了标识的内容,右键打开属性表就可以看到

方法二:用python和高德地图直接返回省、市、区等信息 

所需工具:高德开放平台 | 高德地图API (amap.com),python(下载Anaconda用spyder,选这个是因为里面含有很多打包好的函数可以直接用,或者熟练运用python的朋友可以随心意)

解决办法主要分为两步

1.从高德地图获取key

2.用python进行地址解析,返回经纬度

  •  高德地图API注册,在我的应用里面申请key,选web服务

 

Java 高德根据经纬度转成行政区编码 高德地址经纬度_高德地图_04

 

 

  •  打开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的转换另写一篇。