前言
公司的一个内部网站维护,需要根据地名填写经纬度,最终同echarts生成地图。
之前数据比较少,直接经纬度查询查的,/
现在数据越来越多,手动查询太麻烦,于是想到通过地图api批量查询,最后选择了百度地图API。
步骤
一、到百度地图开放平台注册认证,并创建应用,获取ak
百度地图开放平台:/apiconsole/key#/home
二、查看api文档
根据地名获取经纬度的接口,可以使用逆地理编码
https://api./geocoding/v3/?address=北京市海淀区上地十街10号&output=json&ak=您的ak&callback=showLocation //GET请求
接口功能介绍如下/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 文档:/index.php?title=webapi/guide/webservice-geocodingstring url = @$"https://api./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根据地名获取经纬度 - 慕尼黑哲哉 - 博客园