2011-06-03 4 views
0

Je construis un site immobilier à Django et j'ai un modèle Home, qui stocke diverses informations, y compris l'adresse. Le backend de base de données utilise MySQL.Django: GeoDjango est-il un bon site pour mon site?

Vous voulez créer un Yelp comme recherche.

  • Une recherche où les utilisateurs peuvent entrer le code postal ou le nom de la ville, puis obtenir les résultats de Home dans cette zone.

  • Les utilisateurs peuvent également choisir le rayon (5 mi, 10 mi ...) du point et obtenir plus/moins de résultats.

  • Les résultats de la recherche seront sur google map et les utilisateurs peuvent zoomer avant/arrière pour obtenir de nouveaux résultats de recherche sur la carte.

est-Geo Django un bon ajustement ici? En supposant que peu de gens utilisent GeoDjango, je ne trouve pas beaucoup de documents pour résoudre les problèmes mentionnés ci-dessus.

Après avoir regardé ses official doc pendant environ quelques heures, je ne peux pas vraiment trouver d'exemple pertinent pour mes problèmes et je ne sais pas comment il s'intègre bien avec le site Web existant en utilisant MySQL. Peut-être trop sophistiqué pour mon utilisation simple de l'emplacement?

Je suis vraiment curieux de savoir si Geo Django est un bon ajustement, si c'est le cas ... alors je vais y regarder de manière plus agressive et profonde. Sinon, je vais essayer de le construire par moi-même.

Des conseils ou astuces sur GeoDjango ou sur la façon de construire le système seraient très utiles et seront grandement appréciés.

Répondre

3

GeoDjango pourrait gérer quelque chose comme ça. Supposons que votre modèle Home ressemble à ceci:

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

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

Vous pouvez chercher tous les Home modèles dans les x miles d'un point comme celui-ci:

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

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

Fondamentalement, ce que vous devez donner au filtre est un tuple contenant une géométrie (Point dans votre cas), et la distance (avec l'objet D.Vous avez une large gamme d'unités pour représenter la distance, dans votre cas mi). En outre, cela ne fonctionnera pas dans MySQL car il n'y a pas de fonction backend pour le gérer. Votre meilleur pari est PostgreSQL.

+0

Merci pour l'extrait de code et d'explication. PostgreSQL est donc la seule solution ... Je vois que vous avez utilisé PointField ... Comment obtenir des résultats basés sur le code postal? Dois-je créer un modèle de code postal avec PointField et le faire correspondre avec le modèle Home? – DavidL

+0

@DavidL dans ce cas, je suggère de lire cet article http://groups.google.com/group/geodjango/msg/77235bd5d350e416. Il a un lien vers un fichier avec tous les codes postaux, et vous indique comment les importer dans une base de données. Après cela, vous faites un 'Zipcode.filter (mpoly__contains = Point (...))' –

-1

GeoDjango fonctionne mais il est très difficile à installer pour un utilisateur novice. GeoDjango a aussi des limitations sur MySQL. Comme je sais, il montre le meilleur sur le postgresql.

Quel est exactement le problème que vous rencontrez dans l'installation de geodjango?

J'ai perdu environ 10-20 heures avant que je comprendre le processus d'installation de GeoDjango :)

+0

GeoDjango est livré en standard dans les dernières versions de Django. Parlez-vous de la mise en place de PostGIS? –

+0

Oui, l'installation des dépendances de geodjango postgres est assez compliquée. Peut-être que l'installation de mysql est plus facile, j'ai utilisé geodjango avec mysql il y a longtemps. –

+1

Ah. Dans ce cas, je vous recommande de partager ce que vous avez appris au cours de ce processus d'installation plutôt que de décourager les gens ... –

1

J'ai construit un site sur Django avec des fonctionnalités similaires (base de données MySQL pleine d'adresses et coordonnées lat/long). J'ai parlé avec des cohortes qui sont plus familières avec Django et GeoDjango et ils ont recommandé que cela soit un peu exagéré pour mon projet.Donc, si la migration de la base de données est très pénible et pas nécessaire, il semble que vous ne vous en teniez qu'à votre base de données actuelle et que vous utilisiez une requête de formule Haversine pour trouver les points les plus proches d'un emplacement.

0

GeoDjango a beaucoup de sens si vous utilisez déjà Django. Cependant, vous devriez également envisager d'utiliser Lucene pour votre cas d'utilisation. Il peut gérer les requêtes géographiques, et fonctionne probablement mieux que les requêtes mysql si vous avez besoin de faire des requêtes multi-facettes et de la recherche floue (quelque chose que je voudrais utiliser sur un site avec beaucoup de maisons).