百度地图API根据地名获取经纬度
运用了Geocoding API,它包括地址解析和逆地址解析功能。
地址解析是指,由详细到街道的结构化地址得到百度经纬度信息,且支持名胜古迹、标志性建筑名称直接解析返回百度经纬度。例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”,“百度大厦”地址解析的结果是“lng:116.30815,lat:40.056885”
逆地址解析是指,由百度经纬度信息得到结构化地址信息。例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。注意:
1.因为Geocoding和反Geocoding使用的门址数据以及算法都不是一样的,所以会出现不能一一对应的现象。
2.解析过程中可能会出现一对坐标值对应多个地址门牌信息,本接口将返回距离坐标点最近的一个地址门牌信息。
使用方法:
第一步,申请key,去百度开发者平台http://lbsyun.baidu.com/apiconsole/key申请AK(用户密钥),申请key需要注册百度账号;
申请时请求校验方式选择IP白名单检验,若设置为0.0.0.0/0 则代表不做任何限制。
第二步,拼写发送http请求的url,注意需使用第一步申请的key;
第三步,接收http请求返回的数据(支持json和xml格式)。
百度地图API服务说明见其主页:
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
地址解析:根据地址获取坐标
http://api.map.baidu.com/geocoder?address=地址&output=输出格式类型&key=用户密钥&city=城市名
逆地址解析:根据坐标获取地址
http://api.map.baidu.com/geocoder?location=纬度,经度&output=输出格式类型&key=用户密钥
C#定义一个类Geo
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
public class Geo
{
///
/// latitude
///
private string _latitude = ""; ///
/// longtitude
///
private string _longtitude = ""; ///
/// default constructor
///
public Geo()
{ } ///
///类Geo提供经纬度
///
public Geo(string latitude, string longtitude)
{
_latitude = latitude;
_longtitude = longtitude;
} ///
/// 根据地名获取经纬度
///
public Geo(string location)
{
string ak = ".........";//输入在百度开发者平台免费申请的密钥
string url = string.Format("http://api.map.baidu.com/geocoder/v2/?address={0}&output=json&ak={1}&callback=showLocation", location, ak);
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
string[] tmpArray = sr.ReadToEnd().Split(new char[] { ',', ':' });
_latitude = tmpArray[];//纬度
_longtitude = tmpArray[];//经度
}
}
}
catch (System.Net.Sockets.SocketException ex)
{
Console.WriteLine("网络中断");
}
catch (Exception ex)
{
//throw ex;
Console.WriteLine("异常类型:{0}", ex.GetType());
Console.WriteLine("异常信息:{0}", ex.Message);
Console.WriteLine("异常来源:{0}", ex.Source);
Console.WriteLine("异常堆栈:{0}", ex.StackTrace);
Console.WriteLine("内部异常:{0}", ex.InnerException);
}
} ///
/// get latitude
///
public string Latitude
{
get { return _latitude; }
set { _latitude = value; }
} ///
/// get longtitude
///
public string Longtitude
{
get { return _longtitude; }
set { _longtitude = value; }
}
}
类Geo定义
调用方法:
Geo position = new Geo(地名);
MessageBox.Show("经度:" + position.Longtitude + ";纬度:" + position.Latitude);//显示对应经纬度
以上是地址解析方法,逆地址解析方法大同小异。
PS:
百度地图API每个开发者账号每天调用“地理编码”API 服务的总次数(即配额)是有限的,未认证是6000次,认证成功是30万次。
若想不受限,可以用天地图API(完全免费,只需输入地址且无需ak),它的地址解析url如下:
http://api.tianditu.gov.cn/geocoder?ds={"keyWord":"地址"}
(使用时需注意url内的“{}”和双引号都需要加转义字符,双引号前加" \ ",大括号须连续写两个,如"{"须写成"{{",转义后为一个大括号)
天地图API服务说明见其主页:
http://lbs.tianditu.gov.cn/server/guide.html
最新文章
- 利用AE编写切图工具的一些探讨
- django文件批量上传-简写版
- uva 1339
- 记录一次centos6.4版本的VSFTP本地用户登陆的配置
- Centos php项目发布问题
- 【转】APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了
- 使chrome支持跨域访问
- UVA 10765 Doves and bombs
- 无刷新分页 Ajax,JQuery,Json
- JSON - 使用cJSON 解析Qt通过UDP发送的JSON数据
- iOS-UINavigationBar【颜色设置】
- Python 爬虫-进阶开发之路
- iView页面Modal中内嵌Tabs,重新显示Modal时默认选中Tabs的第一项
- python的优点
- [c/c++] programming之路(24)、字符串(五)——字符串插入,字符串转整数,删除字符,密码验证,注意事项
- [LeetCode] 98. Validate Binary Search Tree(是否是二叉搜索树) ☆☆☆
- java生成word的几种方案
- H - Tickets dp
- 原生的强大DOM选择器querySelector - querySelector和querySelectorAll
- 使用Spring实现读写分离( MySQL实现主从复制)(转)