前言
公司的一个内部网站维护,需要根据地名填写经纬度,最终同echarts生成地图。
之前数据比较少,直接经纬度查询查的,https://jingweidu.bmcx.com/
现在数据越来越多,手动查询太麻烦,于是想到通过地图api批量查询,最后选择了百度地图API。
步骤 一、到百度地图开放平台注册认证,并创建应用,获取ak
百度地图开放平台:https://lbsyun.baidu.com/apiconsole/key#/home
二、查看api文档
根据地名获取经纬度的接口,可以使用逆地理编码
https://api.map.baidu.com/geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求
接口功能介绍如下https://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding
查看请求参数
可以看到几个主要的参数address,ak,output
、查看返回结果参数
status为返回结果状态值,成功返回0,其它值都是失败
三、创建GeocodingMap类,根据地名获取经纬度
根据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; }
}
创建几个类,存储ak,请求url,获取经纬度,为了演示方便,这里将几个类写在一起
public class Config
{
public static string Ak { get; set; } = "xxxxxxxxxxxxxx";//这里根据实际填写,填写刚才申请的应用ak
}
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;
}
}
调用
var geocoding = await GeocodingMap.GetGeocoding(address);
if (geocoding.status == 0)
{
//经纬度
var axisX = geocoding.result.location.lng;
var axisY = geocoding.result.location.lat
}
参考
百度地图API根据地名获取经纬度 - 慕尼黑哲哉 - 博客园
到此这篇关于C#调用百度地图API根据地名获取经纬度geocoding的文章就介绍到这了,更多相关C#百度地图获取经纬度内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!