我在Django中啓動web應用程序,它必須提供一個簡單的任務:從DB獲取所有足夠接近其他記錄的記錄。我應該使用高級GeoDjango庫來進行一個簡單的計算嗎?
例如:Iam在latlang(50,10)中,我需要使用拉特距離我5km以內的所有記錄。
我發現Geodjango的東西叫做GeoDjango,但它包含了很多其他的依賴和庫,比如GEOS,POSTGIS和其他我並不需要的東西。我只需要這一個範圍功能。
所以我應該使用GeoDjango,或者只是寫我自己的範圍計算查詢?
我在Django中啓動web應用程序,它必須提供一個簡單的任務:從DB獲取所有足夠接近其他記錄的記錄。我應該使用高級GeoDjango庫來進行一個簡單的計算嗎?
例如:Iam在latlang(50,10)中,我需要使用拉特距離我5km以內的所有記錄。
我發現Geodjango的東西叫做GeoDjango,但它包含了很多其他的依賴和庫,比如GEOS,POSTGIS和其他我並不需要的東西。我只需要這一個範圍功能。
所以我應該使用GeoDjango,或者只是寫我自己的範圍計算查詢?
絕對不是自己寫的。隨着您對地理數據更加熟悉,您會意識到這一特殊計算並不簡單,例如參見this question以進行詳細討論。然而,在這個問題中給出的大多數解答(答案)只能產生近似的結果。部分原因是地球不是一個完美的球體。
另一方面,如果您使用MySQL(5.7以上版本)或postgresql的地理空間擴展,則可以使用ST_DWithin函數。
ST_DWithin - 如果幾何形狀在彼此的指定距離內,則返回true。對於幾何單位是空間參考的單位,對於地理單位以米爲單位,測量默認爲use_spheroid = true(圍繞球體測量),爲了更快速檢查,use_spheroid = false沿球體進行測量。
ST_DWithin利用自制解決方案無法實現的空間索引。當啓用GeoDjango時,ST_DWithin可用作django查詢集的篩選器,形式爲dwithin
最後但並非最不重要的是,如果您編寫自己的代碼,則必須編寫大量代碼才能對其進行測試。 dwithin經過徹底測試。
僅僅因爲你不需要它們並不意味着'GeoDjango'不需要它們。出於某種原因,它們被稱爲「依賴關係」:「GeoDjango」由這些構建塊構建。圖書館可以爲您節省大量時間,並隨着時間的推移而改善。既然它不傷害你,如果你使用它,爲什麼不:)? –
非常傷害我。我在開發中使用Windows,在Prod中使用Ubuntu ...我已經遇到了問題:Postgree,Django中的python posgre支持和GEOS ..所以我無法想象我會變得多麼瘋狂,什麼時候它不會輕輕地安裝在Ubuntu上..我也只是測試我的概念(我是IT學生,而不是公司) – ziomagic
我不知道你從哪裏得到計算從經緯度座標的線性距離是「簡單計算」的想法。它可能變得非常複雜。 –