小议地理编码

如果你在一家从事GIS开发的软件公司呆上一阵子,一定经常听到人们提起"地理编码"这个词。那么,什么是地理编码呢?


我们先来看一看维基百科中是怎么解释的:


Geocoding is the process of assigning geographic coordinates (e.g.
latitude-longitude) to street addresses, as well as other points and
features. With geographic coordinates, the features can then be mapped and
entered into Geographic Information Systems.


——From Wikipedia, the free encyclopedia.


地理编码是将地理坐标(例如经纬度)赋予街道地址还有其他点位和地理特征的过程。有了地理坐标,地理特征就可以被显示到地图上或运用到地理信息系统中。


相反的,由一个地理坐标得到相应的地址表述的过程,就称作"逆地理编码(Reverse Geocoding)"。


地理编码和逆地理编码都是很常用的功能。例如,你想去海龙大厦,于是进入某个本地搜索网站,输入关键字"海龙大厦",然后你就得到了一张标有"海龙大厦"
的地图。在这个过程中,地理编码的步骤被隐含着,因为对于一般用户来说,得到经纬度的数值是没有用处的,只要得到包含目标的地图就可以了。对于后台服务,
则经历了两个步骤:第一步,通过地理编码查询得到海龙大厦的地理坐标;第二步,取得一幅这个坐标附近的地图,把"海龙大厦"标在这个地图上显示给用户。又
例如,你从GPS设备得到了你当前的经纬度,可是你并不知道自己身在何处,这个时候你可以通过逆地理编码服务得到你当前所在的地区名和街道名,并且了解到
你附近有什么标志性建筑(地标),你还可以把这个地址描述发给你的朋友从而让他方便地找到你。


那么,地理编码功能又是如何实现的呢?首先,当然要有一个地址库了。也就是一个包含着地理坐标信息的地址列表。有了这个地址库,我们就可以迅速的查询到某
个地址的地理坐标。但是,任何一个小城市也都会存在着数不胜数的地址,想要采集出全部的地址及其坐标几乎是不可能的。于是,在美国以及许多国家,人们通过
一种叫做"地址插值"的方法来计算某个地址的坐标。假设我们知道中关村大街1号的坐标和中关村大街50号的坐标,就可以近似的认为中关村大街2号至49号
这些地址平均分布在整个中关村大街上,于是我们就可以用数学公式近似计算出中关村大街2号至49号全部地址的坐标。这种方法当然会存在一定误差。美国大部
分城市地址的规则度较高,所以地址插值法在美国的实用性还比较好,但是对于中国现在地址分布较乱的国情,这种编码过程就不太适用了。因此,我们不得不尽可
能多地来收集地址信息。而这样浩大的工程,通常都会由政府部门来投资。另外,国内有测绘资质的商业公司也都在采集数据。


逆地理编码的过程通常这样:根据指定的地理坐标,从空间数据库中分别查询出该坐标所在的城市名称、区域名称、街道名称以及附近的地标,然后把这些信息组合成一个­完整的地址描述。例如:北京市海淀区中关村大街1号海龙大厦附近。


Google Maps
API是现在热门的免费地图接口,但是它并不包含地理编码服务,因此Google的官方文档中建议用户使用一些其它的开放地理编码服务。而互联网上能够找
到的地理编码服务几乎都是美国和加拿大的数据。在中国能够提供免费数据的只有灵图一家(http://freemosp.51ditu.com),
在灵图的开放接口中,包含了38个城市的地理编码及逆地理编码服务。美中不足的是,灵图的地理编码服务目前只能通过名称来查找位置,而不能通过地址来进行
查找。例如,你用"海龙大厦"作为关键字可以查找到"中关村大街1号"及其经纬度,但是用"中关村大街1号"作为关键字却不能匹配到"海龙大厦"。


位置服务其实是一把双刃剑,人们享受着位置服务带来的便利,同时又担心自己的隐私受到侵犯。而国家更不希望位置信息落入敌国或恐怖组织的手中。因此灵图公
布出来的地理坐标都是经过了偏移的,这是一个折衷的办法,使得我们能够在法律许可的范围内得到地址和经纬度数据。


地理编码和位置搜索经常被人们混淆,其实它们之间并没有很明显的界线。通常,位置搜索的方式更加灵活,为了更加准确地搜索出我们关心的位置,我们可以加入
区域和类别等限制条件,但是如果我们的目的依然是获取某个地方的"地理坐标",那么我们实际上就是在进行"地理编码"。

你可能感兴趣的:(编码)