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

想知道所在的城市有多少條道路?我用Python發現北京一共有1.5萬條道路!

開發 后端
今天我們開啟一個系列吧,關于城市道路的,本篇主要演示獲取城市道路數據,接下來我們會在此基礎上拓展1-2篇好玩的案例,敬請期待!

[[410624]]

本文轉載自微信公眾號「可以叫我才哥」,作者才哥。轉載本文請聯系可以叫我才哥公眾號。

大家好,我是才哥。

最近被催更了,害~

今天我們開啟一個系列吧,關于城市道路的,本篇主要演示獲取城市道路數據,接下來我們會在此基礎上拓展1-2篇好玩的案例,敬請期待!

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

1. 需求分析

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

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

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

關鍵字搜索

終于,我們發現多邊形搜索的接口,它可以對指定的矩形區域內的道路進行搜索,這樣我們就腦洞一個想法將北京市按照經緯度分割為若干小區域,如何搜索各個區域內的道路數據后匯總就可以了,為了盡可能不要有遺漏,我們可以將區域顆粒度劃分的小一些。

多邊形搜索

那么,新的問題也來了:如何進行經緯度區域劃分呢?我們又找到了行政區域查詢接口文檔:https://lbs.amap.com/api/webservice/guide/api/district

該接口通過行政區名稱關鍵字就可以返回該行政區域的邊界經緯度,如何我們只需要取經緯度各自的最大最小值就可以得到北京市所在的矩形區域,接著對這個矩形區域進行細化即可。

行政區域查詢

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

2. 獲取行政區域邊界數據

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

  1. import requests 
  2. import pandas as pd 
  3. import os 
  4.  
  5. url = 'https://restapi.amap.com/v3/config/district?' 
  6. key = '你的key' # 自己在高德開放平臺注冊一個即可 
  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=['經緯度']) 
  20. df[['經度','緯度']] = df['經緯度'].str.split(',',n=1,expand=True).astype(float
  21.  
  22. # 獲取區域邊界經緯度 
  23. latitude_max = df['經度'].max() 
  24. latitude_min =  df['經度'].min() 
  25. longitude_max =  df['緯度'].max() 
  26. longitude_min =  df['緯度'].min() 

最后,矩形區域的四個點的經緯度如下:

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

矩形區域

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

3. 將行政區域分塊

既然我們得到了北京所屬矩形區域的邊界點經緯度,那么直接這個矩形區域進行網格化就行了,處理過程比較簡單,直接看代碼:

  1. # 繪制網格,這里按照20*20共400個網格 
  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 

我們得到了用于區域搜索經緯度坐標對如下:

  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. ... 

網格化

4. 獲取道路數據

到這一步,我們只需要遍歷全部的坐標對polygons,然后搜索該區域內滿足歸屬省份為北京市的全部道路即可。

  1. # 獲取指定區域指定page的道路數據并存到本地 
  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 = '北京道路名稱數據.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個區域 
  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個區域的道路數據',end=''

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

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

 

責任編輯:武曉燕 來源: 可以叫我才哥
相關推薦

2023-04-13 08:00:59

路由協議動態路由

2010-09-02 15:16:06

私有云

2010-09-06 09:21:01

私有云

2020-08-04 08:48:34

數據彈屏技術

2018-04-17 09:28:08

陳奕迅評論秘密

2021-12-06 08:03:53

IP地址程序

2014-01-21 17:36:58

2017-08-21 10:05:57

Python影評 爬蟲

2019-01-30 12:59:25

數據科學數據管理職業

2022-07-11 10:04:37

軟件開發編碼

2024-06-03 08:15:00

2021-10-26 22:25:24

Windows 11Windows微軟

2021-04-30 15:30:54

大數據互聯網數據分析

2023-09-13 13:22:14

2013-05-16 10:15:11

信息泄密彭博Bloomberg

2025-02-12 09:10:00

AI模型數據

2023-04-17 14:08:31

微信數據訓練信息

2022-04-12 16:39:55

數據泄露網絡攻擊

2012-12-12 09:52:18

程序員

2018-08-27 07:01:33

數據分析數據可視化租房
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕在线不卡播放 | 国产精品一区二区三级 | 国产精品视频不卡 | 麻豆av一区二区三区久久 | 97色伦网 | 在线免费观看色 | 亚洲一区在线播放 | 91久久综合亚洲鲁鲁五月天 | 亚洲iv一区二区三区 | 久青草影院 | 精品成人佐山爱一区二区 | 国产精品女人久久久 | 超碰免费观看 | 国产精品视频导航 | 一区二区免费 | 国产蜜臀97一区二区三区 | 九九久久免费视频 | 亚洲精品一区二三区不卡 | 亚洲精视频 | 丝袜 亚洲 欧美 日韩 综合 | av网站在线播放 | 日韩精品在线一区 | 国产精品久久久久久久久久久久 | 中文字幕第二十页 | 久久一级大片 | 一级黄色大片 | 欧美激情一区二区 | 亚洲资源在线 | 天天操网 | 日韩午夜在线播放 | 99久久精品国产麻豆演员表 | 国产成人99久久亚洲综合精品 | 亚洲视频手机在线 | 日本在线观看视频 | 精品美女在线观看视频在线观看 | 狠狠狠色丁香婷婷综合久久五月 | 欧美一级片在线观看 | 91av在线免费播放 | 欧美日韩精品一区二区三区视频 | 久久精品国产一区老色匹 | 精品日韩一区 |