2016-10-15 69 views
1

我在我的配置中列出了一個名爲Velon的所有自行車站的JSON列表,以及它們的緯度,經度,自行車數量和容量。Python中的映射

我想計算在巴黎不同地區的自行車站的自行車數量的比例averages(number_of_bikes/bike_capacity)。我想創建一個城市的映射/函數區分不同的區域(=,以便當我把座標發回我的數量或區域),以便當我嘗試計算每個城市的平均部分我可以插入自行車站的座標,並直接進入所在區域的自行車數量的平均值。

我可以做到這一點,當這些地區彼此平行,並由水平/垂直海峽線界定。

for k in range(len(bike_station_list): 
    if lat(bike_station_k)<lat_district_1 and lng(bike_station_k <lng_disctrict_1 

... and so on 

然而在現實中巴黎地區要複雜得多。

如何創建城市的地圖,可以告訴我在哪個地區。

我的第一個想法是創建一個巨大的矩陣,所有的縱向和橫向座標都與它所在的區域的數量相關,但看起來有點誇張。

感謝您的幫助!

+0

手術問題是否最接近(就時間而言)vs我在哪個地區?最近也很容易計算... – dawg

+0

以及我想做一個精確的表示,所以我寧願有確切的地區 - 但我不妨試試最接近,如果它太耗費 –

+0

但假設最接近100米穿過一個地區邊界,地區站在該地區的另一邊? – dawg

回答

1

你需要一個近似的你所在地區的等高線地圖,所以這些地區的邊界可以是一些例如直線段。然後你需要一種方法來確定你是否在這樣一個封閉的輪廓內。

你會發現怎麼做here

鑑於該算法的複雜性,你的大矩陣是不是太糟糕的主意,如果您滿意的分辨率說10 * 10米如果你想覆蓋30 * 30公里的面積,那就是3000 * 3000 == 9,000,000平方米。電腦無法輕易處理,包括涉及的搜索。

+0

你知道我在哪裏可以找到這樣的矩陣或我必須手工製作嗎? –

+0

如果你有巴黎的彩色(按地區)紙質地圖,一些預處理會讓你有業務。拍攝一張照片,使用PIL或Pillow在內存中讀取它,計算來自多個相鄰像素的平均顏色,並通過空間採樣來減小尺寸(每個x * y像素取一個像素,因此每10m x 10m區域取1個像素。 –

1

如果你可以找到一個近似於巴黎地區的多邊形頂點的座標,那麼這會減少到point-in-polygon的問題。正如該文章中提到的,您可以使用光線投射或繞組編號算法來解決此問題。

2

你可以使用谷歌的地理編碼API

https://maps.googleapis.com/maps/api/geocode/json?latlng=48.874809,2.396988

在響應中獲得通過協調區信息:

{ 
    long_name: "20th arrondissement", 
    short_name: "20th arrondissement", 
    types: [ 
     "political", 
     "sublocality", 
     "sublocality_level_1" 
    ] 
} 

here。 但是,每天您將被限制爲2500個免費請求(如果您支付更多費用),您需要註冊一個API密鑰。