C#通过百度地图API根据地名获取经纬度
在开发涉及地理位置的应用时,手动输入经纬度往往效率低下。本文详细演示如何利用C#语言调用百度地图开放平台的Web服务API(Geocoding),自动化完成从详细地址到经纬度坐标的转换,并提供完整的类封装与调用示例。
准备条件
在使用API之前,需要在百度地图开放平台注册并创建应用以获取访问密钥(AK)。该密钥是调用接口的必要凭证。
- 访问百度地图开放平台控制台:https://lbsyun.baidu.com/apiconsole/key#/home
- 登录百度账号,在“创建应用”页面填写应用名称和服务类型,提交后获取对应的AK值。
了解API文档与参数
百度地图提供了地理编码(Geocoding)接口,支持根据地名获取经纬度。该接口采用GET请求方式,基本URL格式如下:
https://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation
更多技术细节可查看官方指南:https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
主要请求参数
address:要解析的地址名称,需进行URL编码。ak:步骤一中申请的访问密钥。output:返回数据格式,通常使用json。
响应数据结构
接口成功响应时的状态码status为0,其他数值代表不同错误类型。返回结果中通常包含地点的具体位置信息。
实现代码逻辑
在C#项目中,可以通过定义对应JSON结构的实体类来反序列化API返回的数据,并使用HttpClient或HttpWebRequest发起异步请求。
第1步:定义数据模型
根据API文档返回的字段,定义用于存储结果的类结构,确保属性类型匹配。
public class GeocodingResult
{
public int status { get; set; } = -1;
public string msg { get; set; }
public Result result { get; set; }
}
public class Result
{
public Location location { get; set; }
public int precise { get; set; }
public int confidence { get; set; }
public int comprehension { get; set; }
public string level { get; set; }
}
public class Location
{
public float lng { get; set; }
public float lat { get; set; }
}第2步:构建请求辅助类
封装HTTP请求方法,支持动态传入地址并返回JSON字符串。以下示例使用了基于HttpWebRequest的异步实现:
public class Config
{
// 替换为实际申请的 AK
public static string Ak { get; set; } = "xxxxxxxxxxxxxx";
}
public class HttpRequestHelper
{
public static async Task<string> RequestUrl(string url)
{
string content = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
using (StreamReader sr = new StreamReader(response.GetResponseStream()))
{
content = await sr.ReadToEndAsync();
}
}
return content;
}
}
public class GeocodingMap
{
public static async Task<GeocodingResult> GetGeocoding(string address)
{
// API 文档:https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
string url = $@"https://api.map.baidu.com/geocoding/v3/?address={address}&output=json&ak={Config.Ak}";
string strJson = await HttpRequestHelper.RequestUrl(url);
var requestResult = JsonSerializer.Deserialize<GeocodingResult>(strJson);
return requestResult;
}
}第3步:调用与解析
在业务逻辑中调用上述方法,并根据返回的状态码判断是否成功提取经纬度:
var geocoding = await GeocodingMap.GetGeocoding(address);
if (geocoding.status == 0)
{
// 提取经度和纬度
var axisX = geocoding.result.location.lng;
var axisY = geocoding.result.location.lat;
}以上就是C#调用百度地图API根据地名获取经纬度的详细内容,更多关于C#调用API、BaiduMaps、GeoCoding的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









