2011-06-03 62 views
0

我正在Django建立一個房地產網站,並有一個家庭模式,它存儲包括地址在內的各種信息。數據庫後端正在使用MySQL。Django:GeoDjango適合我的網站嗎?

想要創建一個Yelp喜歡搜索。

  • 搜索用戶可以輸入郵政編碼或城市名稱,然後獲得該地區的主頁結果。

  • 用戶還可以從該點選擇半徑(5英里,10英里......)並獲得更多/更少的結果。

  • 搜索結果會顯示在谷歌地圖上,用戶可以放大/縮小以獲得地圖內的新搜索結果。

地理Django的般配嗎?猜測沒有太多人使用GeoDjango,因爲我找不到很多文檔來解決上述問題。

看了看official doc幾個小時後,我無法真正找到相關示例來解決我的問題,也不確定它是否與使用MySQL的現有網站相集成。對於我的簡單位置使用可能太複雜了?

如果是Geo Django,我真的很好奇,如果是的話,那麼我會更積極深入地研究它。如果沒有,我會嘗試自己構建它。

GeoDjango的任何指導或提示或如何建立系統將是非常有益的,將非常感激。

回答

3

GeoDjango內置能夠處理這樣的事情我已經浪費了約10-20小時。假設你Home模式是這樣的:

from django.contrib.gis.db.models import PointField 

class Home(Model): 
    location = PointField() 
    .. etc 

你可以像這樣的點的x英里範圍內獲取所有Home型號:

from django.contrib.gis.measure import D 
from django.contrib.gis.geos import Point 

Home.objects.filter(location__distance_lte=(Point([...]), D(mi=x))) 

基本上,你需要給到過濾器什麼是一個元組包含一個幾何(您的案例中的Point)和距離(與D對象。您有大範圍的單位來表示距離,在您的案例mi)。

此外,這不會在MySQL中工作,因爲沒有後端功能來處理它。你最好的選擇是PostgreSQL。

+0

謝謝你的代碼和解釋片段。所以,PostgreSQL是唯一的方法去...我看到你使用了PointField ...我將如何獲得基於郵政編碼的結果?我應該創建也有PointField的郵政編碼模型,並將其與Home模型相匹配嗎? – DavidL 2011-06-03 20:51:05

+0

@DavidL在這種情況下,我建議閱讀這篇文章http://groups.google.com/group/geodjango/msg/77235bd5d350e416。它有一個包含所有zipcode的文件的鏈接,並告訴你如何將它們導入到數據庫中。之後,你做一個'Zipcode.filter(mpoly__contains = Point(...))' – 2011-06-03 20:57:30

-1

GeoDjango的作品,但它很難安裝新手用戶。 GeoDjango也對MySQL有一些限制。據我所知它顯示了最好的postgresql。

你在geodjango安裝中遇到什麼問題?

之前,我開始明白GeoDjango內置安裝過程:)

+0

GeoDjango是Django最新版本的標準版本。你是指建立PostGIS? – 2011-06-03 16:42:42

+0

是的,geodjango postgres依賴關係的安裝非常複雜。也許mysql的安裝比較簡單,我在很久以前就使用了geodjango和mysql。 – 2011-06-03 16:48:53

+1

啊。在這種情況下,我建議分享你在這個安裝過程中學到的東西,而不是勸阻人們...... – 2011-06-03 17:22:52

1

我在Django上建立了一個類似功能的網站(MySQL數據庫充滿了地址和緯度/經度座標)。我與那些更熟悉Django和GeoDjango的同齡組進行了交談,他們建議我的項目可能有點矯枉過正。

因此,如果遷移數據庫是一個巨大的痛苦,而不是必要的,看起來你可能會過得很好,只需堅持你當前的數據庫,並使用Haversine公式查詢來找到最近的點位置。

0

如果您已經在使用Django,GeoDjango會有很大的意義。不過,你也應該考慮在你的用例中使用Lucene。它可以處理地理查詢,如果你需要做多方面的查詢和模糊搜索(我想在一個有很多家庭的網站上使用的東西),可能會比mysql查詢更好。