Ⅰ 怎么样用Python实现地理编码
引言
今天看到一篇阿里云的文章天下武功,唯快不破,以物流行业为例,分析了 PostgreSQL 与 Greenplum 在地理位置信息处理,最佳路径算法,机器学习等方面的物流行业应用方法。其中提到了地址转换成坐标的问题,更专业些的名词应该是“地理编码”,即知道一个地址,如北京市海淀区上地十街10号,怎么样可以获取到对应的经纬度位置信息(40,116),或者反过来。
地理编码概念
很多地图相关的厂商都提供了相关的API,我们可以直接利用这些API得到这些信息。比如网络的Geocoding API。
Geocoding API是一类接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# 、C++、Java等开发语言发送请求且接收JSON、XML的返回数据。Geocoding API包括地址解析和逆地址解析功能:
Paste_Image.png
地理编码:即地址解析,由详细到街道的结构化地址得到网络经纬度信息,例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”。同时,地理编码也支持名胜古迹、标志性建筑名称直接解析返回网络经纬度,例如:“网络大厦”地址解析的结果是“lng:116.30815,lat:40.056885” 。
逆地理编码:即逆地址解析,由网络经纬度信息得到结构化地址信息,例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。
不过,需要说明的一点是,若想使用网络的这套API的前提是,有网络账号并申请相应的Key。其实,除了网络之外,谷歌、ESRI、微软的Bing等都有类似的地理编码服务。不过这些服务大多没有专门针对Python的库并且彼此之间的Json结构也不一致。于是乎专治不服的Python大神做了一个专门的地理编码工具geocoder,将这些不同厂商的服务整合统一起来。
地理编码工具geocoder
首先看一下它都支持哪些公司的地理编码服务:
Provider
Optimal
Usage Policy
ArcGIS World
Bai China API key
Bing World API key
CanadaPost Canada API key
FreeGeoIP World
Geocoder.ca CA & US Rate Limit
GeocodeFarm World Policy
GeoNames World Username
GeoOttawa Ottawa
Google World Rate Limit, Policy
HERE World API key
IPInfo World
Mapbox World API key
MapQuest World API key
Mapzen World API key
MaxMind World
OpenCage World API key
OpenStreetMap World Policy
Tamu US API key
TomTom World API key
What3Words World API key
Yahoo World
Yandex Russia
TGOS Taiwan
安装
pip install geocoder
地理编码
import geocoder
g = geocoder.google("1403 Washington Ave, New Orleans, LA 70130")
g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng
输出为
[29.9287839, -90.08421849999999]
也可以查看完整的geojson
g.geojson
输出为
{'bbox': [-90.0855674802915,
29.9274349197085,
-90.0828695197085,
29.9301328802915],
'geometry': {'coordinates': [-90.08421849999999, 29.9287839],
'type': 'Point'},
'properties': {'accuracy': u'ROOFTOP',
'address': u'1403 Washington Ave, New Orleans, LA 70130, USA',
'bbox': [-90.0855674802915,
29.9274349197085,
-90.0828695197085,
29.9301328802915],
'city': u'New Orleans',
'confidence': 9,
'country': u'US',
'county': u'Orleans Parish',
'encoding': 'utf-8',
'housenumber': u'1403',
'lat': 29.9287839,
'lng': -90.08421849999999,
'location': '1403 Washington Ave, New Orleans, LA 70130',
'neighborhood': u'Garden District',
'ok': True,
'place': u'ChIJGyFHWc2lIIYRYSoneaXAUiw',
'postal': u'70130',
'provider': 'google',
'quality': u'street_address',
'state': u'LA',
'status': 'OK',
'status_code': 200,
'street': u'Washington Ave'},
'type': 'Feature'}
直接用Google尝试查询中文地址时失败
g = geocoder.google(u"北京市海淀区上地十街10号")
g.ok
输出为
False
用网络应该没问题,不过我没有申请相应的key。切换到arcgis,能够成功编码
g = geocoder.arcgis(u"北京市海淀区上地十街10号")
g.latlng
输出为
[40.050934, 116.30079]
逆地理编码
g = geocoder.google([29.9287839, -90.08421849999999], method='reverse')
print g.address
print g.city
print g.state
print g.country
输出为
1403 Washington Ave, New Orleans, LA 70115, USA
New Orleans
LA
US
换成中国的地址
g = geocoder.google([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country
输出为
Bai Du Da Sha, Haidian Qu, Beijing Shi, China, 100193
Beijing
Beijing Shi
CN
用arcgis的服务试试
g = geocoder.arcgis([40.050934, 116.30079], method='reverse')
print g.address
print g.city
print g.state
print g.country
输出为
None
北京市
北京市
CHN
Google转换成的是英文,但地址比较全。arcgis虽然是中文,但是详细的地址居然输出为了None,这有个X用。
其他
geocoder 的功能不止于此,它还可以查IP(包括自己的)。
g = geocoder.ip('199.7.157.0')
print g.latlng
print g.city
g = geocoder.ip('me')
print g.latlng
print g.city
输出为
[43.6934, -79.4857]
Toronto
[51.05, 13.75]
Dresden
查询一个城市的空间包围盒
g = geocoder.arcgis(u"山东")
g.bbox
输出为
{'northeast': [38.976997, 121.976998], 'southwest': [33.022997, 116.022998]}
小结
空间信息既可以利用行政区划、自然地理区域等文本信息描述,也可以用坐标系统、数字(邮编等)来标识。利用地理编码技术,可以将空间信息的地理定位要素与相应的文本信息关联起来。本文主要介绍了geocoder地理编码这一小工具,可以方便快捷的利用地图等相关厂商提供的地理编码服务,将文字描述的位置转换成地图上的经纬度,或者通过地图上的某个位置坐标获得相应的位置信息文字描述。
Ⅱ 什么是地理编码
地理编码指的是将统计资料或是地址信息建立空间坐标关系的过程。
地理编码非同一般意义上的数字编码,不是用数字或字母来代表某一对象,而是跟据各数据点的地理坐标或空间地址(如省市、街区、楼层、房间等),将数据库中的数据与其在地图上相对应的图形元素一一对应。即给每个数据赋予X、Y值,从而确定该数据标在图上的位置的过程。
地理编码又称地址匹配。是为识别点、线、面的位置和属性而设置的编码,它将全部实体按照预先拟定的分类系统,选择最适宜的量化方法,按实体的属性特征和集合坐标的数据结构记录在计算机的储存设备上。
地理编码有正向地理编码、反向地理编码、向量式地理编码、网格式地理编码四种服务类型。
1、正向地理编码,是将地址或地名描述转换为地球表面上相应位置的过程。正向地理编码提供地址定位引擎、行政区划引擎、街道引擎。
2、反向地理编码,是将地球表面的地址坐标转换为标准地址的过程,反向地理编码提供了坐标定位引擎,通过地面某个地物的坐标值来反向查询得到该地物所在的行政区划、所处街道、以及最匹配的标准地址信息。
3、向量式地理编码,是指使用坐标参考系统去定义点、线、面特征的位置。 向量化:指将网格式资料转换为向量形式的过程。
4、网格式地理编码(也叫栅格化地理编码),是指使用建立于矩阵或方格的座标系统来标定位置,这样的位置资料包含栏与列,称为图元。 栅格化:指将向量式资料转换为网格形式的过程。
Ⅲ 什么是地理编码主要有哪三种方法其算法分别是怎样的
地理编码(Geocoding)又称地址匹配(address-matching),指建立地理位置坐标与给定地址一致性的过程。也是指在地图上找到并标明每条地址所对应的位置。地理编码是GIS中比较重要的一个功能。
地址匹配,或地理编码,就是一个通过地址中某路段的起始,终了位置,并同时考虑到单双号因素,以确定地理位置的过程.
一个大型的政府GIS要求能够将任何数据移植到空间坐标系中,这个过程包括对数据的准确分类和注册,以及使所有的数据能够与一个空间坐标系建立关联;从而保证数据库中的每一个对象被准确无误地叠加在地图上,建立空间信息与非空间信息之间的联系。因此,地理编码在城市空间定位和分析领域内具有非常广泛的应用,如满足城市规划建设以、公安部门119、110报警系统等基于位置的服务要求。
地理编码的方式主要有:反向地理编码服务、向量式地理编码、网格式地理编码
反向地理编码服务
反向地理编码服务实现了将地球表面的地址坐标转换为标准地址的过程,反向地理编码提供了坐标定位引擎,帮助用户通过地面某个地物的坐标值来反向查询得到该地物所在的行政区划、所处街道、以及最匹配的标准地址信息。通过丰富的标准地址库中的数据,可帮助用户在进行移动端查询、商业分析、规划分析等领域创造无限价值。
向量式地理编码
向量式地理编码(vector geocoding)指使用坐标参考系统去定义点、线、面特征的位置。 向量化(vectorization):指将网格式资料转换为向量形式的过程。
网格式地理编码
网格式地理编码(raster geocoding)指使用建立于矩阵或方格的座标系统来标定位置,这样的位置资料包含栏与列,称为图元(pixel)。 栅格化(rasterization)指将向量式资料转换为网格形式的过程。
Ⅳ 高德地图的API怎么用URL实现地理编码/逆地理编码
API的相关问题有两种咨询求助的解决方式:
1、官方API论坛发帖
http://bbs.amap.com/forum.php?gid=1
2、或者发送邮件到官方邮箱:[email protected]
Ⅳ 什么是地理编码作用是什么
地理编码是为识别点、线、面的位置和属性而设置的编码,它将全部实体按照预先拟定的分类系统,选择最适宜的量化方法,按实体的属性特征和集合坐标的数据结构记录在计算机的储存设备上。
作用:
1、提供了坐标定位引擎,帮助用户通过地面某个地物的坐标值来反向查询得到该地物所在的行政区划、所处街道、以及最匹配的标准地址信息。通过丰富的标准地址库中的数据,可帮助用户在进行移动端查询、商业分析、规划分析等领域创造无限价值。
2、提供的专业和多样化的引擎以及丰富的数据库数据使得服务应用非常广泛,在资产管理、规划分析、供应物流管理和移动端输入等方面为用户创造无限的商业价值。
(5)什么是逆地理编码扩展阅读:
相关地理定位服务:
GIS:
地理信息系统是一个决策支持系统,它具有信息系统的各种特点。地理信息系统与其他信息系统的主要区别在于其存储和处理的信息是经过地理编码的,地理位置及与该位置有关的地物属性信息成为信息检索的重要部分。
在地理信息系统中,现实世界被表达成一系列的地理要素和地理现象,这些地理特征至少由空间位置参考信息和非位置信息两个部分组成。
地理信息系统首先是一种计算机系统:该系统通常又由若干个相互关联的子系统构成,如地理数据采集子系统、地理数据管理子系统、地理数据处理和分析子系统、地理数据可视化表达与输出子系统等。
这些子系统的构成影响着地理信息系统硬件的配置,功能与效率、数据处理的方式和产品输出的类型等。
GPS:
由于GPS技术所具有的全天候、高精度和自动的测量特点作为先进的测量手段和新的生产力,已经融入了国民经济建设、国防建设和社会发展的各个应用领域。
RS:
"遥感",顾名思义,就是遥远的感知。地球上的每一个物体都在不停地吸收、发射和反射信息和能量。其中的一种形式-电磁波,早已经被人们所认识和利用。
人们发现不同物体的电磁波特性是不同的。遥感就是根据这个原理来探测地表物体对电磁波的反射和其发射的电磁波,从而提取这些物体的信息,完成远距离识别物体。
各种卫星通过不同的遥感技术实现不同的用途,如气象卫星是用于气象的观测预报;海洋水色卫星用于海洋观测;陆地资源卫星用于陆地上所有土地、森林、河流、矿产、环境资源等的调查。
雷达卫星是以全天候(不管阴天、云雾)、全天时(不管黑天、白天)以及能穿透一些地物(如水体、植被及土地等)为特点的对地观测遥感卫星。
Ⅵ 在地理信息系统中,什么是地理编码(Geocoding)和地址匹配
地理编码(Geocoding)又称地址匹配(address-matching),指建立地理位置坐标与给定地址一致性的过程。也是指在地图上找到并标明每条地址所对应的位置。地理编码是GIS中比较重要的一个功能。
地址匹配,或地理编码,就是一个通过地址中某路段的起始,终了位置,并同时考虑到单双号因素,以确定地理位置的过程.
一个大型的政府GIS要求能够将任何数据移植到空间坐标系中,这个过程包括对数据的准确分类和注册,以及使所有的数据能够与一个空间坐标系建立关联;从而保证数据库中的每一个对象被准确无误地叠加在地图上,建立空间信息与非空间信息之间的联系。因此,地理编码在城市空间定位和分析领域内具有非常广泛的应用,如满足城市规划建设以、公安部门119、110报警系统等基于位置的服务要求。
参考:卢毅敏 面向电子政务的地理信息系统研究
Ⅶ 高德api地理编码和逆地理编码问题
我利用CoreLocatio下的locManager=[[CLLocationManager alloc]init];
// locManager.delegate=self;
// locManager.desiredAccuracy=kCLLocationAccuracyBest;
// locManager.distanceFilter=5.0f;
// [locManager startUpdatingLocation];
方法获取当前位置的经纬度,然后用
MASearch *maSearch=[[MASearch alloc]init];
*searchOption=[[ alloc]init];
searchOption.config=@"SPAS";
searchOption.x=self.klatitude;
searchOption.y=self.klongitude;
[maSearch :searchOption]
不要多想 这样的提问没有意义
很多烦恼都是我们自己找的
Ⅷ 高德地图逆地理编码结果没有数据,是什么问题
我利用CoreLocatio下的locManager=[[CLLocationManageralloc]init];//locManager.delegate=self;//locManager.desiredAccuracy=kCLLocationAccuracyBest;//locManager.distanceFilter=5.0f;//[];方法获取当前位置的经纬度,然后用MASearch*maSearch=[[MASearchalloc]init];*searchOption=[[alloc]init];searchOption.config=@"SPAS";searchOption.x=self.klatitude;searchOption.y=self.klongitude;[:searchOption]
Ⅸ 逆地理请求什么意思
逆地理编码,又称地址解析服务,是指从已知的经纬度坐标到对应的地址描述(如行政区划、街区、楼层、房间等)的转换。常用于根据定位的坐标来获取该地点的位置详细信息,与定位功能是黄金搭档。也就是坐标转地址。
逆地理编码就很实用了,很多时候后台都会返回经纬度,然后APP端根据经纬度来定位。