
影刀RPA GIS地图数据处理GeoJSON转换与坐标采集作者林焱 | 分类影刀RPA新手教程 | 难度★★★什么情况用物流规划、门店选址、外卖配送范围划定等场景需要批量处理地理数据。比如从高德地图搜索上海市所有星巴克获取每家店的经纬度把Excel里的地址列表批量转为坐标地理编码把GeoJSON行政区划数据导入系统。用影刀RPA 高德地图API自动完成地址→坐标转换、兴趣点搜索、地理围栏判断等操作省去手工复制粘贴。怎么做第一步申请高德地图API Key拼多多店群自动化报活动上架访问高德开放平台lbs.amap.com注册开发者账号创建应用获取Key。免费版每天有5000次调用额度个人使用足够。第二步地址批量转坐标地理编码# 影刀Python节点地理编码importrequests AMAP_KEY你的高德Key# 从影刀凭证管理读取defgeocode(address,city上海):地址转经纬度urlhttps://restapi.amap.com/v3/geocode/geoparams{key:AMAP_KEY,address:address,city:city,}resprequests.get(url,paramsparams).json()ifresp[status]1andresp[count]!0:locationresp[geocodes][0][location]# 121.473701,31.230416lng,latlocation.split(,)return{address:address,lng:float(lng),lat:float(lat),formatted:resp[geocodes][0][formatted_address],level:resp[geocodes][0][level],# 匹配精度}returnNone# 批量转换addresses[上海市浦东新区陆家嘴,上海市静安区南京西路,北京市朝阳区国贸]results[]foraddrinaddresses:rgeocode(addr)ifr:results.append(r)print(f{r[address]}→ ({r[lng]},{r[lat]}) [{r[level]}])# 写入Excel第三步周边搜索找门店/竞品# 影刀Python节点搜索周边POIdefsearch_poi(keywords,city上海,offset20):搜索兴趣点urlhttps://restapi.amap.com/v3/place/textparams{key:AMAP_KEY,keywords:keywords,city:city,offset:offset,page:1,extensions:all,}all_pois[]page1whileTrue:params[page]page resprequests.get(url,paramsparams).json()ifresp[status]!1:breakpoisresp.get(pois,[])forpoiinpois:all_pois.append({name:poi[name],address:poi[address],lng:poi[location].split(,)[0],lat:poi[location].split(,)[1],type:poi.get(typecode,),})# 判断是否还有下一页totalint(resp.get(count,0))ifpage*offsettotal:breakpage1returnall_pois# 搜索上海所有星巴克starbuckssearch_poi(星巴克,上海,offset25)print(f搜索到{len(starbucks)}家星巴克)第四步坐标反查经纬度→地址# 影刀Python节点逆地理编码defreverse_geocode(lng,lat):经纬度转地址urlhttps://restapi.amap.com/v3/geocode/regeoparams{key:AMAP_KEY,location:f{lng},{lat},extensions:base,}resprequests.get(url,paramsparams).json()ifresp[status]1:componentresp[regeocode][addressComponent]return{province:component.get(province),city:component.get(city),district:component.get(district),formatted:resp[regeocode][formatted_address],}returnNone# GPS设备回传的坐标反查locationreverse_geocode(121.473701,31.230416)print(f位于{location[formatted]})第五步GeoJSON处理# 判断坐标是否在某个区域内importjson# 加载行政区划GeoJSON可从高德开放平台下载withopen(shanghai_districts.json,r,encodingutf-8)asf:geojsonjson.load(f)# 使用shapely做空间判断# pip install shapelyfromshapely.geometryimportPoint,shape districts{}forfeatureingeojson[features]:district_namefeature[properties][name]districts[district_name]shape(feature[geometry])# 判断某个坐标属于哪个区deffind_district(lng,lat):pointPoint(lng,lat)forname,polygonindistricts.items():ifpolygon.contains(point):returnnamereturn未知print(f陆家嘴属于{find_district(121.473701,31.230416)})有什么坑坑1高德API坐标顺序是经度,纬度高德返回的location字段格式是121.473701,31.230416逗号前是经度lng逗号后是纬度lat。很多人搞反了导致坐标跑到海上或国外。记忆技巧经度longitude排前面——“东西南北”。坑2坐标系不一致TEMU店群矩阵自动化运营核价报活动高德用的是GCJ-02火星坐标系GPS设备输出的是WGS-84。同一位置的经纬度在两种坐标系下差几百米。如果你把GPS坐标直接拿去查高德地图位置会偏移。需要调用高德的坐标转换API先转换。# 坐标转换 WGS-84 → GCJ-02defconvert_coords(lng,lat,from_typegps):urlhttps://restapi.amap.com/v3/assistant/coordinate/convertparams{key:AMAP_KEY,locations:f{lng},{lat},coordsys:from_type,# gpsWGS-84}resprequests.get(url,paramsparams).json()ifresp[status]1:returnresp[locations]# 返回GCJ-02坐标坑3搜索有分页限制高德POI搜索每次最多返回25条总结果不超过900条即最多翻36页。如果搜全国星巴克可能超出900上限。建议按城市分别搜索来突破限制。坑4地址匹配精度不稳定地址上海市浦东新区世纪大道100号匹配精度高但浦东陆家嘴可能匹配到浦东新区而非具体点位。尽量提供完整地址省市区路号匹配精度会高很多。坑5API免费配额高德Web服务API免费版每天5000次调用。如果你有10000个地址要做地理编码超过免费配额后API会返回错误。需要申请企业版或分多天执行。总结GIS数据处理的核心是坐标系对齐。同一个物理位置WGS-84、GCJ-02、BD-09百度坐标系三个坐标值完全不同。团队内部统一用高德就用GCJ-02用百度就用BD-09别混着用。