zoukankan      html  css  js  c++  java
  • 如何通过经纬度获取地址信息?

    摘要

    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 表示响应格式(通常为 jsonxml)。

    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(必需)- 指示地址解析请求是否来自装有位置传感器的设备。该值必须为 truefalse

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

    实例一:创建查询坐标(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" 表示地址解析成功,但未返回结果。如果地址解析过程中传递的偏远位置 addresslatlng 并不存在,则会出现这种情况。
    • "OVER_QUERY_LIMIT" 表示您超出了配额。
    • "REQUEST_DENIED" 表示您的请求被拒绝,通常是由于缺少 sensor 参数。
    • "INVALID_REQUEST" 通常表示缺少查询参数(addresslatlng)。

    实例一:在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 Program
    10 {
    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是一个字符串,包含此位置的人类可读地址。通常该地址相当于“邮政地址”,有时会因不同国家/地区而存在差异。

    实现代码如下:

    View Code
     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 Program
    11 {
    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 }

    输出结果:



    我叫刘皓,很高兴您能阅读完我的这篇文章。
    我花了大量时间和精力来完成这篇文章,如果文章对您有帮助,请不要忘了点推荐哦!
    如果您能点击右边的打赏按钮,打赏一杯咖啡钱,我将获得更多的动力和能量写出下一篇好文章。

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
    我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan
  • 相关阅读:
    使用isinstance()函数,判断输入的函数是否为已知的类型。raise() 引发异常。
    maya命令的运用。范例1。#举一反三
    maya中英文切换
    变量和maya命令 #getAttr #setAttr #xform #connectAttr #disconnectAttr
    变量和maya命令 #polySphere命令,创建、查询、编辑。
    PyCharm配置Maya开发环境
    希望与憧憬
    Java RandomAccessFile基本的用法
    Java 文件(File)类
    计算机编码问题
  • 原文地址:https://www.cnblogs.com/liuhaorain/p/2334018.html
Copyright © 2011-2022 走看看