2016-05-11 2 views
0

J'ai un modèle qui est basé sur un shapefile:Geodjango- ne peut pas obtenir le point dans un polygone

Mon modèle est: des modèles d'importation django.contrib.gis.db

class RegionBorder(models.Model): 

    region_code = models.CharField(max_length=9) 
    region_name = models.CharField(max_length=24) 

    mpoly = models.MultiPolygonField(srid=27700) 
    objects = models.GeoManager() 

    def __str__(self): 
     return self.region_name 

J'ai importé avec succès les polygones dans ma base de données:

len(RegionBorder.objects.all()) 
9 

Mais lorsque je tente de trouver un point dans les polygones, je ne reçois rien en arrière. Je sais que le point doit être dans le polygone car ce sont des cartes des régions de l'Angleterre et j'essaie de trouver la colonne de Nelsons au milieu de Londres.

p = GEOSGeometry("Point(-0.127907 51.507786)", srid=27700) 

RegionBorder.objects.filter(mpoly__contains=p) 
[] 

Qu'est-ce que je fais mal? J'ai échangé les coordonnées juste au cas où je les aurais eu à l'envers, j'ai supprimé les arguments srid et j'ai recommencé. C'est la première fois que je fais des choses SIG, donc je suis complètement perdu

Répondre

0

Je définis le mauvais SRID pour les points. Correction en utilisant srid 4326 pour les points lng/lat puis en transformant pour corriger la projection avant la recherche

from django.contrib.gis.geos import GEOSGeometry 

p = GEOSGeometry("Point(-0.127907 51.507786)", srid=4326) # 4326 for standard lng/lat coordinates 

# Transform to same coordinate system as maps 
p.transform(27700) 

RegionBorder.objects.filter(mpoly__contains=p) 
[<RegionBorder: London>]