2010-08-03 112 views
4

我正在使用看似太碎片化以便無法有效查詢的無線電地圖。當我詢問單個點是否在多重多邊形內(我已經測試過「內部」/「包含」/「重疊」)時,響應時間爲20-40秒。我使用PostGIS和GeoDjango來抽象查詢。如何使用PostGIS高效查詢大型多邊形

多面體列有一個GiST索引,我試過了VACUUM ANALYZE。我使用PostgreSQL 8.3.7。和Django 1.2。

這張地圖延伸到大的地理區域。它們最初由地形意識無線電工具生成,並且由the radio cells/polygons are therefore fragmented生成。

我的目標是查詢多面體內的點(即可能包含或不包含信號的房屋)。

所有的無線電地圖都由100.000和300.000個頂點(總數)組成,並且數量變化很大。一些地圖的多邊形少於10個。從那裏跳到10,000到30.000多邊形之間。多邊形與頂點的比例似乎不會影響查詢完成的時間。

我使用投影座標系,並使用相同的系統爲房屋和無線電部門。 Qgis表明無線電部門和地圖正確放置在地形中。

我的測試查詢一次只有一個房子在一個單一的無線電地圖。我已經測試如「內」 /「包含」 /「重疊」的查詢,其結果是相同的:

  • 子第二響應如果房子「遠離」無線電地圖(我想這是因爲它在查詢中自動使用的邊界框之外)。

  • 如果住宅/地點靠近或位於無線電地圖內,則需要20-40秒的響應時間。

我是否有其他方法來優化查詢,還是必須以某種方式更改/簡化源材料?任何建議表示讚賞。

+0

您可以在專門的網站上找到GIS相關的問題更多專家解答http://gis.stackexchange.com/questions – amercader 2010-08-03 22:05:54

+0

請詹姆斯,你會介意分享在這裏,你做了什麼,我是個新手,我面臨同樣的問題,我不知道如何做到這一點非常感謝。 – 2012-02-06 07:09:41

回答

3

首先我會做的事情是分裂multipolygons成單一的多邊形和創建新的索引。那麼這個指數將會更有效。現在整個多面體有一個大邊界框,索引只能告訴房子是否在邊界框內。所以,與整個數據集相關的較小的多邊形,更有效的索引使用。甚至有技術將單個多邊形拆分爲具有網格的較小的多邊形,以使查詢的索引部分更加有效。但是,首先要用ST_Dump()將多邊形分割爲單個多邊形。如果在同一個表中有很多屬性,將其放入另一個表中並且只保留一個ID,告訴它屬於哪個電子地圖是明智的。否則,你會得到很多重複的屬性數據。

HTH 尼克拉斯

+0

謝謝!在將地圖分割成網格之後,表現完成了(與之前相比)。我現在可以在每個處理器內核每秒處理超過100個房屋的情況下進行批量覆蓋查詢。 – 2010-08-11 19:14:45