#阅读原文

摘要

Google Maps API Web Services,是一个为您的地图应用程序提供地理数据的 Google 服务的 HTTP 接口集合。具体包括:Google Geocoding API、Google Directions API、Google Elevation API、Google Places API。本文将探讨如何通过Google Geocoding API服务来获取地址信息。


目录

  • 什么是网络服务?
  • 区分地址解析与反地址解析
  • 地址查询(反地址解析)请求
  • 地址查询(反地址解析)响应
  • 处理响应结果

1. 什么是网络服务?

Google Maps API 提供这些网络服务作为从外部服务中请求 Google Maps API 数据以及在您的地图应用程序中使用它们的接口。这些网络服务使用特定网址的 HTTP 请求并将网址参数作为参数提供给服务。一般来讲,这些服务会在 HTTP 请求中以 JSON 或 XML 的形式传回数据,供您的应用程序进行解析和/或处理。

一个典型的网络服务请求通常采用以下形式:

http://maps.google.com/maps/api/service/output?parameters

其中 service 表示所请求的特定服务,output 表示响应格式(通常为 json 或 xml)。

2.地址解析与反地址解析

地址解析是将地址(如“1600 Amphitheatre Parkway, Mountain View, CA”)转换为地理坐标(如纬度 37.423021 和经度 -122.083739)的过程,您可以根据转换得到的坐标放置标记或定位地图。Google Geocoding API 可让您通过 HTTP 请求直接访问地址解析器。此外,该服务还可让您执行反向操作(将坐标转换为地址),此过程称为“反向地址解析”(地址查询)。

3. 地址查询(反向地址解析)请求

Google Geocoding API 请求必须采用以下形式:

http://maps.google.com/maps/api/geocode/output?parameters

其中,output 可以是以下值之一:

  • json(建议)表示以 JavaScript 对象表示法 (JSON) 的形式输出
  • xml 表示以 XML 的形式输出

有些参数是必需的,有些是可选的。根据网址的标准,所有参数均使用字符 & (&) 分隔。下面枚举了这些参数及其可能的值。

Google Geocoding API 使用以下网址参数定义地址查询请求:

  • latlng(必需)- 您希望获取的、距离最近的、可人工读取地址的纬度/经度文本值。
  • bounds(可选)- 要在其中更显著地偏移地址解析结果的可视区域的边框。
  • region(可选)- 区域代码,指定为 ccTLD(“顶级域”)双字符值。
  • language(可选)- 传回结果时所使用的语言。请注意,我们会经常更新支持的语言,因此该列表可能并不详尽。如果未提供 language,地址解析器将尝试尽可能使用发送请求的区域的本地语言。
  • sensor(必需)- 指示地址解析请求是否来自装有位置传感器的设备。该值必须为 true 或 false

注意:bounds 和 region 参数只会影响地址解析器返回的结果,但不能对其进行完全限制。

实例一:创建查询坐标(39.910093,116.403945)的地址信息的请求,要求以xml格式输出响应,语言为简体中文(zh-CN)。

http://maps.google.com/maps/api/geocode/xml?latlng=39.910093,116.403945&language=zh-CN&sensor=false

注意:经纬度书写的顺序为(纬度,经度)。

实例二:利用C#在客户端程序中创建上述请求。

1 WebClient client = new WebClient();2 string url = "http://maps.google.com/maps/api/geocode/xml?latlng=39.910093,116.403945&language=zh-CN&sensor=false";3 client.Encoding = Encoding.UTF8;4 string responseTest = client.DownloadString(url);

4. 地址查询(反向地址解析)响应

地址解析响应将以网址请求路径中的 output 标记所指示的格式传回。XML 响应包含一个 <GeocodeResponse>和两个顶级元素:

  • <status> 包含请求中状态代码。(非常重要)
  • 零或多个 <result> 元素,每个元素都包含单独的一组地址解析地址信息和几何图形信息。

地址解析响应对象中的 "status" 字段包含请求的状态,并且可能包含调试信息,以帮助您追溯地址解析未正常工作的原因。

"status" 字段可能包含以下值:

  • "OK" 表示未发生错误;地址成功进行了解析并且至少传回了一个地址解析结果。(判断请求是否成功响应)
  • "ZERO_RESULTS" 表示地址解析成功,但未返回结果。如果地址解析过程中传递的偏远位置 address 或 latlng 并不存在,则会出现这种情况。
  • "OVER_QUERY_LIMIT" 表示您超出了配额。
  • "REQUEST_DENIED" 表示您的请求被拒绝,通常是由于缺少 sensor 参数。
  • "INVALID_REQUEST" 通常表示缺少查询参数(address 或 latlng)。

实例一:在IE浏览中输入上述实例一中的请求,查看响应结果。

浏览器中显示如下信息(该截图只是响应结果的部分信息):

实例二:通过控制台输出上述实例二的响应。

C#代码:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Net; 6  7 namespace GeoCodeTest 8 { 9     class Program10     {11         static void Main(string[] args)12         {13             WebClient client = new WebClient();14             string url = "http://maps.google.com/maps/api/geocode/xml?latlng=39.910093,116.403945&language=zh-CN&sensor=false";15             client.Encoding = Encoding.UTF8;16             string responseTest = client.DownloadString(url);17 18             Console.Write("{0}",responseTest);19 20             Console.Read();21 22         }23     }24 }

输出结果(该截图只是响应结果的部分信息):

5. 处理响应结果

通过上述内容,我们已经能够得到xml响应信息。但是,响应结果包含很多信息,因此我们需要解析出需要的地址信息。具体实现过程为:

第一步:判断status的状态信息。

第二步:获取formatted_address 地址信息。

注意:formatted_address是一个字符串,包含此位置的人类可读地址。通常该地址相当于“邮政地址”,有时会因不同国家/地区而存在差异。

实现代码如下:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Net; 6 using System.Xml; 7  8 namespace GeoCodeTest 9 {10     class Program11     {12         static void Main(string[] args)13         {14             WebClient client = new WebClient();//webclient客户端对象15             string url = "http://maps.google.com/maps/api/geocode/xml?latlng=39.910093,116.403945&language=zh-CN&sensor=false";//请求地址16             client.Encoding = Encoding.UTF8;//编码格式17             string responseTest = client.DownloadString(url);//下载xml响应数据18 19             XmlDocument doc = new XmlDocument();//创建XML文档对象20 21             if(!string.IsNullOrEmpty(responseTest))22             {23               doc.LoadXml(responseTest);//加载xml字符串24 25 //获取状态信息26               string xpath = @"GeocodeResponse/status";27               XmlNode node = doc.SelectSingleNode(xpath);28               string status = node.InnerText.ToString();29               30               if(status == "OK")31               {32                   //获取地址信息33                   xpath = @"GeocodeResponse/result/formatted_address";34                   node = doc.SelectSingleNode(xpath);35                   string address = node.InnerText.ToString();36 37                   Console.WriteLine("地址:{0}",address);//输出地址信息38               }39               40             }41             42 43             Console.Read();44 45         }46     }47 }

输出结果:

作者: 可米小子 
出处: http://liuhaorain.cnblogs.com 
欢迎转载或分享,但请务必声明文章出处。如果文章对您有帮助,希望你能 推荐关注

如何通过经纬度获取地址信息?相关推荐

  1. php 腾讯地图 地址逆解析 根据经纬度获取地址信息

    弄了个小程序的定位,需要获取到地址信息 前端想站着把钱挣了,所以我就需要把经纬度转成地址信息返回 原文档地址:腾讯开发文档 其实简单,就是拼接一下参数就好 这里直接放码,下次用直接复制就好 funct ...

  2. python通过经纬度获取地址信息

    爬取社交数据时,有时候会碰到用经纬度表示地理位置信息,这种情况下需要进行转换以获取地理位置信息. 例如获取到的数据是{"business_id":"1SWheh84yJX ...

  3. 百度地图通过经纬度获取地址信息

    以前用的都是通过谷歌的坐标调用谷歌api 最近 发现老是连不上谷歌服务器. 于是找了找百度的, 地址为 http://developer.baidu.com/map/webservice-geocod ...

  4. 高德地图根据经纬度获取地址信息

    主要是使用高德里面地理编码与逆地理编码的getAddress这个方法, 根据逆向地理编码:将地理坐标(经纬度)转换成地址描述信息,对应为AMap.Geocoder的getAddress方法. 具体使用 ...

  5. java根据经纬度获取地址信息(腾讯地图)

    目录 前置条件 基本开发环境 相关模块的使用 实现效果 完整代码 后端 前端 前置条件 申请开发者密钥(key)申请密钥 腾讯地图WebService API 开发参考文档     WebServic ...

  6. uni-app获取位置信息(经纬度转换地址信息)

    uniapp获取位置信息,获取到的信息为经纬度,再通过转换成地址信息 1.使用uni.getLocation()获取位置信息 2.下载qqmap-wx-jssdk.js插件插件下载地址 3.使用腾讯位 ...

  7. 百度地图根据经纬度获取地址

    2019独角兽企业重金招聘Python工程师标准>>> 百度地图根据经纬度获取地址 查询地址要内部实现MKSearchListener接口 Java代码 public class S ...

  8. java调用腾讯地图根据经纬度获取位置信息

    这是java提交经纬度信息,然后获取该经纬度所在省市区的一个方法,话不多说直接上代码: package com.lmj.util;import net.sf.json.JSONObject; impo ...

  9. java后端根据经纬度获取地址(高德地图)

    1.申请高德地图key 2.逆地理编码(坐标->地址)-地理X: https://lbs.amap.com/demo/jsapi-v2/example/geocoder/regeocoding ...

最新文章

  1. 【组队学习】【31期】IOS开发
  2. 手把手快速实现 Resnet 残差模型实战
  3. 使用选择排序和二分查找在数组中查找数据
  4. 石川es6课程---12、Promise
  5. TableCellRenderer TableCellEditor(三)
  6. WPF/E 2007年2月CTP发布了
  7. ThreadLocal_OSIV模式_FIlter_Web ajax
  8. 【SQL编程】Greenplum 实现树结构+自定义函数+避免函数重复调用+ function cannot execute on a QE slice 问题处理(优化过程全记录)
  9. 使用JavaScriptSerializer进行序列化日期类型应该注意时区的问题
  10. 安装docker-machine
  11. 虚拟机centos6.5 --安装jdk
  12. 域还原的三种模式,以及应用场景
  13. [DiMP跟踪算法]代码学习笔记
  14. 欧姆龙plc的IO存储器区详解
  15. android 下载instagram动态中图片的demo
  16. 怎样进入金蝶服务器修改参数,金蝶KIS专业版的系统参数在哪里设置
  17. 抽样:理论与应用(第二版) 金勇进 课程笔记 1~4章
  18. 星际争霸2 自由之翼+虫群之心+虚空之遗+遭遇战破解(中文三部曲整合版)
  19. 跨境电商如何利用Quora帮你引上万流量
  20. 鼓励别人谈论他们自己

热门文章

  1. 【PyCharm使用教程】10分钟快速学会使用PyCharm
  2. 公务员备考(三十五) 行测 常识文史
  3. 《惢客创业日记》2020.07.08(周三)给三剑客取名
  4. Python入门实战系列文章
  5. 头歌实践教学平台:Java面向对象 - 类与对象
  6. 解决:virtualbox导入ovf报错0X80004005和0xc0000034
  7. 我的前端学习之路<总结>
  8. 玻璃管标签的材质、读取、应用领域详细介绍
  9. C++十六进制转八进制
  10. C#:十六进制字节数组 转换成 字符串、字符串形式的16进制数据 转换成 十六进制字节数组