Lisää

GeoDjango/PostGIS -etähaku ei toimi

GeoDjango/PostGIS -etähaku ei toimi


Rakennan apin tekemään etähakuja Django 1.8: n, GeoDjangon, Django REST Frameworkin ja PostGIS: n avulla.

Paikallisesti käytän PostGIS 2.1.7: tä, isäntäni (PythonAnywhere) käyttää 2.1.4: ää ... En pysty asentamaan aiempaa versiota paikallisesti (ei niin vahva valmistuksen ja asennuksen kanssa).

Ongelmana on, että paikallisesti api-pyyntö, kuten http: // localhost: 8000/v1/test-entry/8.5513076999999988%2055.6684179999999955/ei palauta mitään, kuten pitäisi. Mutta tekemällä sama pyyntö (käyttämällä samoja koordinaatteja) PythonAnywhere -liveversiossa palautetaan kaikki tietokannan merkinnät. Koodi on sama sekä paikallisesti että PA: ssa. Etäisyyshaun koodi on seuraavanlainen:

palauta TestEntry.objects.filter (pnt__distance_lte = (pnt, 10))

Ainoa ero, jonka näen, on PostGIS -versio, mutta näyttää epätodennäköiseltä, että tällainen perustoiminto ei toimi vanhemmassa versiossa.

Onko kenelläkään kokemusta tällaisista tekniikoista ja antaa minulle vinkkejä siitä, mikä voisi olla vialla?


Selittää mitä tapahtui yllä olevissa kommenteissa:

pnt__distance_ltekäsikirjan mukaan kääntää

pnt__distance_lte = (pnt, 10)

osaksi

ST_Etäisyys (poly, pnt) <= 10

ST_Etäisyyspostgisissa käyttäytyy eri tavalla maantieteen ja geometrian suhteen:

Geometria-tyypille Palauttaa 2-ulotteisen suorakulmaisen minimietäisyyden (perustuu alueelliseen viittaukseen) kahden geometrian välillä projisoiduissa yksiköissä. Maantieteellisen tyypin oletusarvo palauttaa pallomaisen minimietäisyyden kahden maantieteellisen alueen välillä metreinä

Ongelma voi olla joko yhdessä järjestelmän toiminnassa geomissa ja toisessa geogissa tai molemmissa geomissa, mutta eri SRID: issä.

Lopulta yksi järjestelmä valitsi kohteita 10 metrin säteellä ja toinen 10 asteen säteellä (4326 yksikköä).


Katso video: PostGIS and Django REST Framework Part 1 Installation