C#百度地图获取经纬度
GreAmbWang 人气:0前言
公司的一个内部网站维护,需要根据地名填写经纬度,最终同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 }
参考
加载全部内容