C#通过百度地图API根据地名获取经纬度

Ivy
Ivy
发布时间:2026-10-16 | 4人浏览过
原创

在开发涉及地理位置的应用时,手动输入经纬度往往效率低下。本文详细演示如何利用C#语言调用百度地图开放平台的Web服务API(Geocoding),自动化完成从详细地址到经纬度坐标的转换,并提供完整的类封装与调用示例。

准备条件

在使用API之前,需要在百度地图开放平台注册并创建应用以获取访问密钥(AK)。该密钥是调用接口的必要凭证。

  1. 访问百度地图开放平台控制台:https://lbsyun.baidu.com/apiconsole/key#/home
  2. 登录百度账号,在“创建应用”页面填写应用名称和服务类型,提交后获取对应的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的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表