2023年6月21日发(作者:)
获取百度地图POI数据三(模拟关键词搜索) 上⼀篇博⽂中讲到如何获取⽤于搜索的关键词,并且已经准备好了⼀百五⼗万的关键词 这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等。有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜索地点,从⽽获取其返回的POI数据。下⾯直接上代码~ ⼀ 、准备好⽤于存储数据的数据库表 由于百度返回的POI数据都是JSON字符串且⼦节点⾮常多,为了按照⼦节点⼀⼀存储,就需要建这么⼀张包含很多字段的表,虽然⿇烦,但是信息很全⾯。当然各位也可以选择性的存储其中的数据。 ⼆、获取并解析数据的代码class Program { static string[] strArr = { "name", "addr", "address_norm", "alias", "aoi", "area_name", "brand_id", "cla", "di_tag", "ext_display", "geo", "indoor_pano", "navi_update_time", "new_catalog_id", "primary_uid", "show_tag", "std_tag", " static string[] flaArr = { "navi_x", "navi_y" }; static string[] intArr = { "acc_flag", "area", "biz_type", "catalogID", "click_flag", "detail", "diPointX", "diPointY", "dis", "dist2route", "dist2start", "ext_type", "f_flag", "father_son", "flag_type", "geo_type", "ismodified", "pano", "poiType static List
int total = ; DataTable tempDt = eDataTable("select name,addr from SHPOI", ); foreach (DataRow row in ) { (row["name"].ToString() + "," + row["addr"].ToString()); } for (int i = 0; i < ; i++) { string kw = kwList[i]; string keyWord = "上海市" + kw; for (int j = 0; j < 200; j++) { string url = "/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=&wd=" + keyWord + "&c=289&pn=" + j; int count = DownloadPOIInfoFromBMap(url, -1, keyWord + j); if (count == -1) break; ine("成功写⼊数据:" + count + "条 执⾏次数:" + (j + 1) + " KeyWord:" + keyWord + " kwNum:" + (f(kw) + 1) + " tatal:" + total); } } ine("ok"); y(); } private static int DownloadPOIInfoFromBMap(string url, int typeId, string fileName) { int count = 0; Stream responseStream; string restring; try { HttpWebRequest request = (HttpWebRequest)(url); = "GET"; HttpWebResponse response = (HttpWebResponse)ponse(); responseStream = ponseStream(); StreamReader sr = new StreamReader(responseStream, t); restring = End(); } catch { ine("⽹络异常"); return count; } string[] strArr = (new string[] { "u" }, ); StringBuilder sb = new StringBuilder(); (strArr[0]); try { for (int i = 1; i < ; i++) { string code = strArr[i]; int value = 32(ing(0, 4), 16); (tFromUtf32(value)); if ( > 4) { (ing(4, - 4)); } } } catch { return count; } JObject jo; try { jo = (JObject)alizeObject(ng()); } catch { //⼀些数据⽆法正确转换为json对象 需要特别处理 Regex regex = new Regex(""{"index_tag".*?"}""); //MatchCollection collection = s(ng()); string data = ng(); data = e(data, """"); try { jo = (JObject)alizeObject(data); } catch { Regex regex1 = new Regex(""{"shop_id".*?"}""); data = e(data, """"); try { jo = (JObject)alizeObject(data); } catch { try { ("⽆法构建JSON对象 "); llText(@"D:errorData" + fileName + ".txt", data); } catch { } return count; } } } return SavePOIToDB(jo, typeId); } private static int SavePOIToDB(JObject jo, int typeId) { int count = 0; try { if (jo["content"].Children().Count() == 0) return -1; } catch { if (jo != null) return -1; } foreach (JToken child in jo["content"].Children()) { List
使⽤关键词模拟百度地图的搜索功能从⽽获取返回的POI数据的⽅法能够获取⼤量的POI数据 由于返回的数据中没有百度经纬度坐标信息,只有百度墨卡托的坐标,所以还需要调⽤它的API 通过坐标转换的⽅⽅法来获取百度经纬度坐标。这就需要申请开发密钥了,⽽且每个密钥⼀天最多只能进⾏⼗万次的坐标转换。 以下是本⼈获取的部分POI数据:
以上就是本⼈获取百度地图POI数据的⽅式,由于关键词数量在百万级别 ⽽且百度每次返回的数据的页数也不近相同,多的有百页,少的仅有⼀条设置没有,所以程序需要运⾏很长的时间,本⼈运⾏两周程序也才获取到⼀百多万数据。预计程序运⾏完成时POI数据总量或与关键词总量相差⽆⼏,也能达到⼀百五⼗万左右,虽然并不知道百度地图上海地区的POI数据具体有多少,但是⼀百多万的数据量已经能够做些分析了。
2023年6月21日发(作者:)
获取百度地图POI数据三(模拟关键词搜索) 上⼀篇博⽂中讲到如何获取⽤于搜索的关键词,并且已经准备好了⼀百五⼗万的关键词 这其中有门牌号码,餐馆酒店名称,公司名称,道路名称等。有了这些数据,我们就可以通过代码,模拟我们在百度地图的搜索框中搜索地点,从⽽获取其返回的POI数据。下⾯直接上代码~ ⼀ 、准备好⽤于存储数据的数据库表 由于百度返回的POI数据都是JSON字符串且⼦节点⾮常多,为了按照⼦节点⼀⼀存储,就需要建这么⼀张包含很多字段的表,虽然⿇烦,但是信息很全⾯。当然各位也可以选择性的存储其中的数据。 ⼆、获取并解析数据的代码class Program { static string[] strArr = { "name", "addr", "address_norm", "alias", "aoi", "area_name", "brand_id", "cla", "di_tag", "ext_display", "geo", "indoor_pano", "navi_update_time", "new_catalog_id", "primary_uid", "show_tag", "std_tag", " static string[] flaArr = { "navi_x", "navi_y" }; static string[] intArr = { "acc_flag", "area", "biz_type", "catalogID", "click_flag", "detail", "diPointX", "diPointY", "dis", "dist2route", "dist2start", "ext_type", "f_flag", "father_son", "flag_type", "geo_type", "ismodified", "pano", "poiType static List
int total = ; DataTable tempDt = eDataTable("select name,addr from SHPOI", ); foreach (DataRow row in ) { (row["name"].ToString() + "," + row["addr"].ToString()); } for (int i = 0; i < ; i++) { string kw = kwList[i]; string keyWord = "上海市" + kw; for (int j = 0; j < 200; j++) { string url = "/?newmap=1&reqflag=pcmap&biz=1&from=webmap&da_par=direct&pcevaname=pc4.1&qt=s&da_src=&wd=" + keyWord + "&c=289&pn=" + j; int count = DownloadPOIInfoFromBMap(url, -1, keyWord + j); if (count == -1) break; ine("成功写⼊数据:" + count + "条 执⾏次数:" + (j + 1) + " KeyWord:" + keyWord + " kwNum:" + (f(kw) + 1) + " tatal:" + total); } } ine("ok"); y(); } private static int DownloadPOIInfoFromBMap(string url, int typeId, string fileName) { int count = 0; Stream responseStream; string restring; try { HttpWebRequest request = (HttpWebRequest)(url); = "GET"; HttpWebResponse response = (HttpWebResponse)ponse(); responseStream = ponseStream(); StreamReader sr = new StreamReader(responseStream, t); restring = End(); } catch { ine("⽹络异常"); return count; } string[] strArr = (new string[] { "u" }, ); StringBuilder sb = new StringBuilder(); (strArr[0]); try { for (int i = 1; i < ; i++) { string code = strArr[i]; int value = 32(ing(0, 4), 16); (tFromUtf32(value)); if ( > 4) { (ing(4, - 4)); } } } catch { return count; } JObject jo; try { jo = (JObject)alizeObject(ng()); } catch { //⼀些数据⽆法正确转换为json对象 需要特别处理 Regex regex = new Regex(""{"index_tag".*?"}""); //MatchCollection collection = s(ng()); string data = ng(); data = e(data, """"); try { jo = (JObject)alizeObject(data); } catch { Regex regex1 = new Regex(""{"shop_id".*?"}""); data = e(data, """"); try { jo = (JObject)alizeObject(data); } catch { try { ("⽆法构建JSON对象 "); llText(@"D:errorData" + fileName + ".txt", data); } catch { } return count; } } } return SavePOIToDB(jo, typeId); } private static int SavePOIToDB(JObject jo, int typeId) { int count = 0; try { if (jo["content"].Children().Count() == 0) return -1; } catch { if (jo != null) return -1; } foreach (JToken child in jo["content"].Children()) { List
使⽤关键词模拟百度地图的搜索功能从⽽获取返回的POI数据的⽅法能够获取⼤量的POI数据 由于返回的数据中没有百度经纬度坐标信息,只有百度墨卡托的坐标,所以还需要调⽤它的API 通过坐标转换的⽅⽅法来获取百度经纬度坐标。这就需要申请开发密钥了,⽽且每个密钥⼀天最多只能进⾏⼗万次的坐标转换。 以下是本⼈获取的部分POI数据:
以上就是本⼈获取百度地图POI数据的⽅式,由于关键词数量在百万级别 ⽽且百度每次返回的数据的页数也不近相同,多的有百页,少的仅有⼀条设置没有,所以程序需要运⾏很长的时间,本⼈运⾏两周程序也才获取到⼀百多万数据。预计程序运⾏完成时POI数据总量或与关键词总量相差⽆⼏,也能达到⼀百五⼗万左右,虽然并不知道百度地图上海地区的POI数据具体有多少,但是⼀百多万的数据量已经能够做些分析了。
发布评论