2011-06-03 6 views
0

私はDjangoに不動産サイトを建設しており、住所を含むさまざまな情報を保存するホームモデルを持っています。データベースバックエンドはMySQLを使用しています。Django:GeoDjangoは私のウェブサイトに適していますか?

を作成します。Yelpのような検索があります。

  • ユーザーが郵便番号または都市名を入力できる場所で検索し、その地域でホーム結果を取得します。

  • ユーザーは、ポイントから半径(5 mi、10 mi ...)を選択して、より多くの結果を得ることができます。

  • 検索結果はGoogleマップに表示され、ユーザーはズームイン/ズームアウトして地図内で新しい検索結果を取得できます。

ジオジャンゴここで良いフィットですか?あまりにも多くの人がGeoDjangoを使用していると推測すると、上記の問題を解決するために多くのドキュメントを見つけることができないからです。

official docを約2時間見た後、私は問題の関連例を見つけられず、MySQLを使用して既存のウェブサイトとどれだけうまく統合されているかわかりません。私のシンプルな場所の使い方はあまりに洗練されていませんか?

ジオジャンゴがうまくいけば、私は本当に興味があります。もしそうなら、私はもっと積極的かつ深くそれを調べます。そうでなければ、私はそれを自分で構築しようとします。

GeoDjangoやシステムの構築方法に関するガイダンスは非常に参考になり、とても感謝しています。

答えて

3

GeoDjangoはそのようなものを扱うことができます。あなたの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も持った郵便番号モデルを作成し、それをホームモデルとマッチさせるべきですか?その場合は – DavidL

+0

@DavidL、http://groups.google.com/group/geodjango/msg/77235bd5d350e416という記事をお読みください。すべての郵便番号を含むファイルへのリンクがあり、DBにインポートする方法を教えてくれます。その後、あなたは 'Zipcode.filter(mpoly__contains = Point(...))'を行い、 –

-1

GeoDjangoは動作しますが、初心者の方にはインストールが非常に難しいです。また、GeoDjangoにはMySQLにいくつかの制限があります。私が知っているように、それはpostgresqlで最高を示しています。

geodjangoのインストールで正確に何が問題になりますか?

私はgeodjangoのインストールプロセスを理解し始めた約10〜20時間前に無駄にした:)

+0

GeoDjangoはDjangoの最新バージョンに標準で付属しています。あなたはPostGISを設定することを指していますか? –

+0

はい、geodjangoのpostgres依存関係のインストールはかなり複雑です。たぶんmysqlのインストールが簡単です、私はずっと前にmysqlでgeodjangoを使ってきました。 –

+1

ああ。その場合、私は人々を落胆させるのではなく、このセットアッププロセスで学んだことを共有することをお勧めします。 –

1

私はDjangoに類似の機能(アドレスと緯度/経度の完全なMySQLデータベース)を持つサイトを構築しました。私はDjangoとGeoDjangoにもっと精通しているコホートと話をしました。彼らは私のプロジェクトには少し残忍かもしれないと勧めました。

データベースを移行することは非常に苦痛であり、必要ではない場合は、現在のデータベースに固執し、Haversineの式クエリを使用して、最も近いポイントを特定することができます。

0

GeoDjangoは既にDjangoを使用している場合には非常に意味があります。しかし、あなたのユースケースにLuceneを使用することも考慮する必要があります。それは地理的なクエリを扱うことができ、多面的なクエリやファジー検索(私はたくさんの家を持つサイトで使いたいと思っている)をする必要がある場合は、おそらくmysqlクエリよりも優れています。

関連する問題