IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope: Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
跳转到主要内容

developerWorks 中国  >  Web development  >

真正的 Web 2.0: Geonames.org 上的开放地理信息系统

探索一个可以处理位置和地点名称的免费开放站点

developerWorks
文档选项

未显示需要 JavaScript 的文档选项

英文原文

英文原文


级别: 中级

Uche Ogbuji, 合伙人, Zepheira, LLC

2008 年 10 月 31 日

为用户和开发人员提供地理信息的最佳资源之一就是借助开放数据的威力。GeoNames 是与地理信息有关的一个数据库、Web 服务和目标站点。它具有 REST 风格的富 API 并能通过使用 Linking Open Data 约定提供 Semantic Web 特性。通过本文了解如何从用户和开发人员的角度使用 GeoNames。

Web 的动人之处在于您经常会遇到某些资源,而几个星期之后不禁感叹如果没有这些资源自己该如何是好。而 Web 2.0 开放数据的动人之处(也是本专栏的焦点所在)则在于这类资源有时包括了在 Web 中创建自己的一席之地所需要的全部数据。GeoNames 就是这样一个站点和服务,它本身就是一个不可或缺的资源,而且还是其他 必需服务的重要组成部分。此站点围绕经良好设计且可免费使用的地理信息数据库构建。其主页很好地描述了这一点:

GeoNames 地理信息数据库可在知识共享归属许可下免费下载。它包含 800 万个地理名称,由 650 万个特征组成,其中包括 220 万个居住地和 180 万个备用名称。所有特征均分门别类地放入 9 个特征类,这些特征类再细分为 645 个特性代码。[...]。数据可通过一系列 web 服务和数据库导出免费使用。GeoNames 现可服务每天 1100 多万次的 web 服务请求。[...] 。GeoNames 也在集成各种地理信息数据,比如不同语言的地名、海拔、人口数量和其他一些信息。

在本文中,我将向您展示 GeoNames 为用户和开发人员提供的主要特性。

GeoNames 主页

在本专栏中,我将站点的主用户页面称为站点的主页(façade),将开放数据的接口称为基础。GeoNames 主页 是用来指出确切位置的有用工具。假设您正在阅读一本小说,在小说中提及了科罗拉多的一个小镇,名为 “Superior”。您可以直接登录这个站点并在主搜索框内输入 “Superior, Colorado”。显示结果应该如图 1 所示。


图 1. GeoNames 针对 “Superior, Colorado” 的搜索结果
GeoNames 搜索结果

就搜索引擎而言,最顶部的结果通常与所查找内容最为接近,可以单击本地名 “Superior” 或是单击左侧的地图推针(push-pin)图标。但是得到的结果不同。单击本地名会转到一个由 Google 地图支持的信息页面,给出此位置的纬度和经度,在本例中,这个信息页面是 http://www.geonames.org/maps/google_39.953_-105.169.html (一个整洁、干净、不容易攻击的 URL,这也是 GeoNames 的优势之一)。此位置位于 Boulder County 的东南角,并且地图包含了多个特性:所查询的地区(Superior 镇本身)、诸如山和湖这样的地理特性、一些显著的建筑和其他地标(比如本地邮局)。图 2 是此页面的一个快照。


图 2. GeoNames 内的纬度/经度地区页面
纬度/经度地区页面

注意到此地区的图标是与顶部搜索结果(图 1)相关联的那个图标相同的 “P” 形推针(泪滴形状)。如果返回那个搜索结果页并单击该图标,就会得到针对该具体特性放大的更详细的地图,这次由不同的 URL http://www.geonames.org/5440838/superior.html 给出。图 3 是此页面的一个快照。


图 3. GeoNames 内的具体特性页面
具体特性页面

基础

您可能已经注意到 GeoNames 非常有助于您对地理位置上下文的了解,而不管您的起点如何,但是,让此服务如此有特色的还是它的开放数据基础。您可以下载此站点的全部数据库转储文本,而且得益于知识共享归属许可,您还能免费使用它,该许可只要求您确认如果使用了服务,还会链接回 GeoNames。此服务可以在 Web 或其他的商业应用程序内使用。

您也可以通过其丰富的 Web 服务来使用 GeoNames。它是基于 REST 风格设计的,所以您可以使用任何用来从 URL 请求数据的代码。在 GeoNames 上所能执行的查询的种类很多。如下所示的是其中一个例子:

  • 找到某个邮编所代表位置的周边地区,按国家返回(返回 XML 文件或 JSON 提要)。
  • 找到接近给定纬度/经度的邮编(返回 XML 文件)。
  • 找到具有给定地理特征的 “子集(例如,某个国家的省、该省管辖的各地区,返回 XML 文件或 JSON 提要)。
  • 找到接近给定纬度/经度、邮编或地名的相关 Wikipedia 文章(返回 XML 文件或 JSON 提要).
  • 找到某个国家的所有邻国(返回 XML 文件或 JSON 提要)。
  • 找到由 4 个纬度/经度对所确定的地理范围内的全部气象台及其最新的气象观测(返回 XML 文件)。
  • 获得给定纬度/经度所在的时区(返回 XML 文件或 JSON 提要)。
  • 获得代表陆地地区的纬度/经度所对应的以米为单位的海拔(返回 XML 文件或 JSON 提要)。




回页首


真正的 Web 3.0

GeoNames 不仅是 Web 2.0 最有用的支持站点,而且现在也是构成 “Web 3.0”(Semantic Web)的一部分。在本专栏的早期文章(参见 参考资料)中,我讨论过 Linking Open Data (LOD),它是 Semantic Web 出现的最初推动力。GeoNames 是 LOD 的关键部分,这归功于其对地理 RDF 元数据的支持(实际上,它支持非常详细的本体论以尝试建立清晰的上下文)。在之前的讨论中,我论及了使用 HTTP 303 代码将 URI 赋予非计算性资源,比如人和抽象的属性。GeoNames 使用这种方式为各个地区提供适合 Semantic Web 的 URI。以上述 Colorado Superior 镇的 URI http://www.geonames.org/5440838/superior.html 为例,将 “www” 替换为 “sws” 并删除文件部分,就得到了 GeoNames Semantic Web URI http://sws.geonames.org/5440838/。如果通过支持 RDF 的代理访问它,就会得到如清单 1 所示的 303 重定向:


清单 1. 对 GeoNames 的 Semantic Web 请求
				
    $ curl -I -H "Accept: application/rdf+xml"
    http://sws.geonames.org/5440838/HTTP/1.1 303 See Other
Date: Mon, 07 Jul 2008 05:23:47 GMT
Server: Apache/2.2.4 (Linux/SUSE)
Location: http://sws.geonames.org/5440838/about.rdf
Vary: Accept-Encoding
Content-Type: text/html; charset=iso-8859-1
    
    

cURL 是用来打造 HTTP 请求的一个命令行工具,该工具可以针对几乎所有类型的请求进行配置。 我通过头部设置 -H "Accept: application/rdf+xml" 向服务器给出 Semantic Web 代理的信号,这样的头部设置表明用户代理期待的是一个 RDF 响应。 我还使用了 -I 选项来要求它使用 HTTP HEAD 请求,只获得响应头。您可以看到 303 响应代码,而且 Semantic Web 代理可以遵循 Location: http://sws.geonames.org/5440838/about.rdf 响应头来获得有关此地区的更多信息,如清单 2 所示。


清单 2. 对某个 GeoNames 地区的 RDF 数据的 cURL 请求
				
    $ curl -H "Accept: application/rdf+xml" http://sws.geonames.org/5440838/about.rdf
    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
<rdf:RDF
    xmlns="http://www.geonames.org/ontology#"
    xmlns:foaf="http://xmlns.com/foaf/0.1/"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:wgs84_pos="http://www.w3.org/2003/01/geo/wgs84_pos#">
<Feature rdf:about="http://sws.geonames.org/5440838/">
<name>Superior</name>
<featureClass rdf:resource="http://www.geonames.org/ontology#P"/>
<featureCode rdf:resource="http://www.geonames.org/ontology#P.PPL"/>
<inCountry rdf:resource="http://www.geonames.org/countries/#US"/>
<population>11186</population>
<wgs84_pos:lat>39.9527634</wgs84_pos:lat>
<wgs84_pos:long>-105.1685977</wgs84_pos:long>
<parentFeature rdf:resource="http://sws.geonames.org/5574999/"/>
<nearbyFeatures rdf:resource="http://sws.geonames.org/5440838/nearby.rdf"/>
<locationMap>http://www.geonames.org/5440838/superior.html</locationMap>
<wikipediaArticle rdf:resource="http://en.wikipedia.org/wiki/Superior%2C_Colorado"/>
<owl:sameAs rdf:resource="http://dbpedia.org/resource/Superior%2C_Colorado"/>
<wikipediaArticle rdf:resource="http://de.wikipedia.org/wiki/Superior_%28Colorado%29"/>
<wikipediaArticle rdf:resource="http://nl.wikipedia.org/wiki/Superior_%28Colorado%29"/>
<wikipediaArticle rdf:resource="http://pt.wikipedia.org/wiki/Superior_%28Colorado%29"/>
<wikipediaArticle rdf:resource="http://vo.wikipedia.org/wiki/Superior_%28Colorado%29"/>
</Feature>
</rdf:RDF>
    
    

请注意,这里没有使用 -I 选项,因此得到的将是响应体。如果还想得到响应头,可以使用 -i 选项。结果 RDF 文档包括很多有关此资源的有用信息,所有内容均根据 GeoNames ontology 提供。除了能得到用来提供此地区的常用名的 name 属性之外,有时还会得到 alternateName,它能提供地名的其他版本,包括其他语言的地名版本。纬度和经度根据 W3C “Basic Geo (WGS84 lat/long) Vocabulary” 的要求给出。父特征 http://sws.geonames.org/5574999/ 指的是 Boulder County。locationMap 属性给出的是我在第一节中提到的那个用户友好的地图显示。 owl:sameAs 给出的是 DBPedia 上的抽象资源,DBPedia 是另一个重要的 LOD 站点,它提供了 Wikipedia 文章的 Seman tic Web 版本。您还可以看到指向 Wikipedia 的直接链接,包括除英语之外的其他语言的链接。

请注意,如果在访问 sws.geonames.org 时省略了 Accept 头,或者如果对 Accept: */* 使用了典型的浏览器设置,那么得到的将不是到 RDF 的 303 重定向,而是到用户地图视图的 301(永久)重定向。其主要目的是避免那些尚不支持 Semantic Web 约定的客户机产生混淆。





回页首


结束语

GeoNames 的使用几乎是无止境的,这主要得益于它在易于使用的数据平台上综合了丰富的地理信息。您不必过多考虑该平台的细节,因为现在已经有了很多针对 GeoNames 的客户机库,并且语言版本众多,包括 Java、Python、Ruby 和 Perl。总之,相关工具、库、插件等领域都在迅速发展,这一点与其他任何一种有用的服务无异。在享用 GeoNames 带来的各种好处的同时,也请您考虑为之做出自己的贡献,或自愿担任它的代表。最近我注意到 Nigeria 地区缺少一个代表,我就自告奋勇担任了此职。



参考资料

学习

获得产品和技术
  • 获得诸多 可用于 GeoNames 的客户机库和插件中的一种。

  • 使用 cURL 探索和测试 RESTful Web 服务。


讨论


关于作者

Uche Ogbuji

Uche Ogbuji 是 Zepheira, LLC 的合伙人,这家公司专门提供下一代 Web 技术解决方案。Ogbuji 先生是 4Suite 的首席开发人员,这是一种用于 XML、RDF 和知识管理应用程序的开放源代码平台;也是 Versa RDF 查询语言的首席开发人员。他是一位出生在尼日利亚的计算机工程师和技术作家,目前定居在科罗拉多的博尔德。




对本文的评价










回页首


IBM 公司保留在 developerWorks 网站上发表的内容的著作权。未经IBM公司或原始作者的书面明确许可,请勿转载。如果您希望转载,请通过 提交转载请求表单 联系我们的编辑团队。
    关于 IBM 隐私条约 联系 IBM 使用条款