成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

想知道所在的城市有多少條道路?我用Python發(fā)現(xiàn)北京一共有1.5萬(wàn)條道路!

開發(fā) 后端
今天我們開啟一個(gè)系列吧,關(guān)于城市道路的,本篇主要演示獲取城市道路數(shù)據(jù),接下來(lái)我們會(huì)在此基礎(chǔ)上拓展1-2篇好玩的案例,敬請(qǐng)期待!

[[410624]]

本文轉(zhuǎn)載自微信公眾號(hào)「可以叫我才哥」,作者才哥。轉(zhuǎn)載本文請(qǐng)聯(lián)系可以叫我才哥公眾號(hào)。

大家好,我是才哥。

最近被催更了,害~

今天我們開啟一個(gè)系列吧,關(guān)于城市道路的,本篇主要演示獲取城市道路數(shù)據(jù),接下來(lái)我們會(huì)在此基礎(chǔ)上拓展1-2篇好玩的案例,敬請(qǐng)期待!

好了,我們開始今天的案例介紹。

1. 需求分析

我們以北京為例,希望獲取該城市全部道路名稱信息,主要字段有道路id、道路名稱及所在區(qū),基于高德地圖的api接口。

我們找到高德api文檔:https://lbs.amap.com/api/webservice/guide/api/search#t8

在搜索POI部分發(fā)現(xiàn)了查詢城市道路名稱的關(guān)鍵字搜索接口如下,但是該接口最多只能返回1000個(gè)數(shù)據(jù)。很明顯北京市不止1000條道路,那么如何獲取全部道路呢?

關(guān)鍵字搜索

終于,我們發(fā)現(xiàn)多邊形搜索的接口,它可以對(duì)指定的矩形區(qū)域內(nèi)的道路進(jìn)行搜索,這樣我們就腦洞一個(gè)想法將北京市按照經(jīng)緯度分割為若干小區(qū)域,如何搜索各個(gè)區(qū)域內(nèi)的道路數(shù)據(jù)后匯總就可以了,為了盡可能不要有遺漏,我們可以將區(qū)域顆粒度劃分的小一些。

多邊形搜索

那么,新的問(wèn)題也來(lái)了:如何進(jìn)行經(jīng)緯度區(qū)域劃分呢?我們又找到了行政區(qū)域查詢接口文檔:https://lbs.amap.com/api/webservice/guide/api/district

該接口通過(guò)行政區(qū)名稱關(guān)鍵字就可以返回該行政區(qū)域的邊界經(jīng)緯度,如何我們只需要取經(jīng)緯度各自的最大最小值就可以得到北京市所在的矩形區(qū)域,接著對(duì)這個(gè)矩形區(qū)域進(jìn)行細(xì)化即可。

行政區(qū)域查詢

思路有了,我們就開始干活吧!

2. 獲取行政區(qū)域邊界數(shù)據(jù)

直接按照開發(fā)者文檔的案例演示編寫代碼如下:

  1. import requests 
  2. import pandas as pd 
  3. import os 
  4.  
  5. url = 'https://restapi.amap.com/v3/config/district?' 
  6. key = '你的key' # 自己在高德開放平臺(tái)注冊(cè)一個(gè)即可 
  7. keywords = '北京' # 可以換成你所在的城市 
  8. params = { 
  9.     'key':key
  10.     'keywords':keywords, 
  11.     'subdistrict':0, 
  12.     'extensions':'all',         
  13.     } 
  14.  
  15. r = requests.get(url,params=params) 
  16. data = r.json() 
  17. polyline = data['districts'][0]['polyline'
  18. polyline_list = polyline.split(';'
  19. df = pd.DataFrame(polyline_list,columns=['經(jīng)緯度']) 
  20. df[['經(jīng)度','緯度']] = df['經(jīng)緯度'].str.split(',',n=1,expand=True).astype(float
  21.  
  22. # 獲取區(qū)域邊界經(jīng)緯度 
  23. latitude_max = df['經(jīng)度'].max() 
  24. latitude_min =  df['經(jīng)度'].min() 
  25. longitude_max =  df['緯度'].max() 
  26. longitude_min =  df['緯度'].min() 

最后,矩形區(qū)域的四個(gè)點(diǎn)的經(jīng)緯度如下:

  1. 左上角:115.423411,41.060816 
  2.  
  3. 右上角:117.514625,41.060816 
  4.  
  5. 左下角:115.423411,39.442758 
  6.  
  7. 右下角:117.514625,39.442758 

矩形區(qū)域

上圖中我們可以看到矩形區(qū)域很多部分不屬于北京,所以在后續(xù)的道具數(shù)據(jù)采集的時(shí)候需要進(jìn)行判斷道具歸屬省份是否為北京。

3. 將行政區(qū)域分塊

既然我們得到了北京所屬矩形區(qū)域的邊界點(diǎn)經(jīng)緯度,那么直接這個(gè)矩形區(qū)域進(jìn)行網(wǎng)格化就行了,處理過(guò)程比較簡(jiǎn)單,直接看代碼:

  1. # 繪制網(wǎng)格,這里按照20*20共400個(gè)網(wǎng)格 
  2. def get_polygons(latitude_num,longitude_num): 
  3. #    latitude_num = 20 
  4. #    longitude_num = 20 
  5.     latitude_step = (latitude_max - latitude_min)/latitude_num 
  6.     longitude_step = (longitude_max - longitude_min)/longitude_num 
  7.     polygons = [] 
  8.     for i in range(latitude_num): 
  9.         latitude_leftup = latitude_min + latitude_step * i 
  10.         latitude_rightdown = latitude_min + latitude_step * (i+1) 
  11.         for j in range(longitude_num): 
  12.             longitude_leftup = longitude_max - longitude_step * j 
  13.             longitude_rightdown = longitude_max - longitude_step * (j+1)         
  14.             polygon = f'{latitude_leftup},{longitude_leftup}|{latitude_rightdown},{longitude_rightdown}' 
  15.             polygons.append(polygon)      
  16.      
  17.     return polygons 

我們得到了用于區(qū)域搜索經(jīng)緯度坐標(biāo)對(duì)如下:

  1. # polygons  
  2. ['115.423411,41.060816|115.5279717,40.979913100000005'
  3.  '115.423411,40.979913100000005|115.5279717,40.8990102'
  4.  '115.423411,40.8990102|115.5279717,40.8181073'
  5.  '115.423411,40.8181073|115.5279717,40.7372044'
  6. ... 

網(wǎng)格化

4. 獲取道路數(shù)據(jù)

到這一步,我們只需要遍歷全部的坐標(biāo)對(duì)polygons,然后搜索該區(qū)域內(nèi)滿足歸屬省份為北京市的全部道路即可。

  1. # 獲取指定區(qū)域指定page的道路數(shù)據(jù)并存到本地 
  2. def get_road(polygon,page): 
  3.     url = 'https://restapi.amap.com/v3/place/polygon?' 
  4.     params = { 
  5.         'key':key
  6.         'polygon':polygon, 
  7.         'keywords':'道路名'
  8.         'types':190301, 
  9.         'offset':20, 
  10.         'page':page, 
  11.         'extensions':'all',         
  12.         }   
  13.     r = requests.get(url,params=params)     
  14.     data = r.json()       
  15.     pois = data['pois'
  16.     file_name = '北京道路名稱數(shù)據(jù).csv' 
  17.     for poi in pois: 
  18.         if poi['pname'] =='北京市'
  19.             df = pd.DataFrame({ 
  20.                 'road_id' : poi['id'], 
  21.                 'road_name' : poi['name'], 
  22.                 'road_adname' : poi['adname'
  23.             },index=[0]) 
  24.             if os.path.exists(file_name): 
  25.                 df.to_csv(file_name, mode='a', header=False
  26.                   index=None, encoding='utf_8_sig'
  27.             else
  28.                 df.to_csv(file_name, index=None, encoding='utf_8_sig'
  29.  
  30.     return pois  
  31. # 這里分為20*20共400個(gè)區(qū)域 
  32. polygons = get_polygons(20,20)    
  33. for i,polygon in enumerate(polygons): 
  34.     page = 1 
  35.     while True
  36.         pois = get_road(polygon, page) 
  37.         if pois == []: 
  38.             break 
  39.         page += 1 
  40.     print(f'\r正在爬取第{i+1}/400個(gè)區(qū)域的道路數(shù)據(jù)',end=''

最終,我們得到了北京一共有14994條道路,其中各區(qū)道路數(shù)分別如下:

區(qū) 道路數(shù)
順義區(qū) 2164
大興區(qū) 1826
通州區(qū) 1310
朝陽(yáng)區(qū) 1264
海淀區(qū) 1088
房山區(qū) 912
密云區(qū) 907
西城區(qū) 896
東城區(qū) 818
昌平區(qū) 801
平谷區(qū) 770
豐臺(tái)區(qū) 673
延慶區(qū) 553
門頭溝區(qū) 378
懷柔區(qū) 372
石景山區(qū) 262
總計(jì) 14994

 

責(zé)任編輯:武曉燕 來(lái)源: 可以叫我才哥
相關(guān)推薦

2023-04-13 08:00:59

路由協(xié)議動(dòng)態(tài)路由

2010-09-02 15:16:06

私有云

2010-09-06 09:21:01

私有云

2020-08-04 08:48:34

數(shù)據(jù)彈屏技術(shù)

2021-12-06 08:03:53

IP地址程序

2018-04-17 09:28:08

陳奕迅評(píng)論秘密

2014-01-21 17:36:58

2017-08-21 10:05:57

Python影評(píng) 爬蟲

2019-01-30 12:59:25

數(shù)據(jù)科學(xué)數(shù)據(jù)管理職業(yè)

2022-07-11 10:04:37

軟件開發(fā)編碼

2024-06-03 08:15:00

2021-04-30 15:30:54

大數(shù)據(jù)互聯(lián)網(wǎng)數(shù)據(jù)分析

2013-05-16 10:15:11

信息泄密彭博Bloomberg

2023-09-13 13:22:14

2021-10-26 22:25:24

Windows 11Windows微軟

2025-02-12 09:10:00

AI模型數(shù)據(jù)

2023-04-17 14:08:31

微信數(shù)據(jù)訓(xùn)練信息

2022-04-12 16:39:55

數(shù)據(jù)泄露網(wǎng)絡(luò)攻擊

2012-12-12 09:52:18

程序員

2018-08-27 07:01:33

數(shù)據(jù)分析數(shù)據(jù)可視化租房
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产成人精品a视频一区www | 91成人午夜性a一级毛片 | jizz在线免费观看 | 亚洲三级av| 亚洲国产精品久久久 | 久久免费精品 | 天天射网站 | 成人特级毛片 | 成人亚洲精品久久久久软件 | 亚洲男女视频在线观看 | 国产欧美在线 | 超碰在线播 | 国产日韩一区二区 | 亚洲男人网 | 日本视频一区二区 | 看特级黄色片 | 一区二区三区在线播放 | 中文字幕亚洲专区 | 好姑娘高清在线观看电影 | 成人国产精品久久 | 黄色片大全在线观看 | 国产精品久久久久久久一区二区 | 色视频在线观看 | 成人av一区 | 欧美一级做a爰片免费视频 国产美女特级嫩嫩嫩bbb片 | 久久99精品久久久久久国产越南 | 一区二区视频 | 国产良家自拍 | 天堂一区二区三区 | 美女福利网站 | 国产一区二区久久 | 久久99久久| 久久51| 久久久这里都是精品 | 97av在线| 国产日韩欧美另类 | 久久久久久久久久久久久9999 | 一区二区三区高清 | 超黄视频网站 | 亚洲精品一区中文字幕 | 亚洲人成人一区二区在线观看 |