2017-09-26 18 views
0

Rで書かれたコードで、村間の水の量(またはシェイプファイルポリゴンの点)を検出しました。私は2379以上の村(村は数値を持つ)の無向グラフを作成しているので、それは28億の組み合わせをもたらすでしょう。グラフは単なるデータフレームです。私は100メートル間隔でVillage2にVillage1、たとえば、からポイントを作成する関数を持っている、すべての組み合わせについてはシェイプファイル多角形の点の検出を速くするR

VillageName1, VillageName2 
Village1, Village2 
Village1, Village3 
Village1, Village4 
... 
Village2379, Village2378 

:私は、各村の座標を持っています。したがって、Village1とVillage2が1km離れると、8点が作成されます。この関数は比較的高速に実行されます。

Village1とVillage2が別々の2つの島にある場合、100メートルの水量を検出できるように、World Ocean shapefile(6.9mb)を使用していますが、非常に遅い(計算あたり約4秒) 28億回を実行することは永遠にかかるでしょう。

私はそれらの村(インドネシア)に基づいて国にシェープファイル(ocean_indo_shapefile)をフィルタリング試してみました:

sea <- readOGR('World_EEZ_v8_2014.shp') 
ocean_indo_shapefile <- sea[sea$Country == "Indonesia", ] 

#this function creates the points from Village1 to Village2 in 100m intevals, output is a dataframe 
points <- create_coordinates(village1_lat, village1_long, village2_lat, village2_long, 0.1) 

coordinates(points) <- ~ Longitude + Latitude 
proj4string(points) <- proj4string(ocean_indo_shapefile) 
#the calculation below is slow 
water_in_meter <- length(points[ocean_indo_shapefile,]) 

私は誰もが、私はこれをはるかに高速にする可能性がどのように提案を助けることができるかどうかわかりません、私はどんな助けにも感謝します。前もって感謝します。

+0

postgisが行く方法かもしれない –

+0

最後の行だけが遅いですか? 'points'はデータフレームですか? –

+0

私は以前にPostGISを使ったことがありませんでした。 – iPho

答えて

0

%over%の機能をspから利用しようとすることがあります。それは、どの点が水の中に入るかを比較的迅速に示すことができます(あなたのシェイプファイルが示すものと仮定します)。あなたは、村ごとの集計を得るために後で行うためのデータを持っています。

+0

提案していただきありがとうございます。 – iPho

+0

データのサンプルをアップロードできる場合は、いくつかのアプローチを試すことができます – Jul