Координаты, пересекающиеся с ограничительной рамкой после применения правила правой руки - PullRequest
2 голосов
/ 01 октября 2019

Я пытаюсь запросить местоположение в ограничивающей рамке. Ограничительная рамка страны, которую Россия отображает с востока на запад, охватывает в основном всю Канаду и ничего из России (что явно неверно) и возвращает города в Канаде, Польше и Словакии.

Я использовал ForceRHR (Django 1.11) и ForcePolygonCW (Django 2.2) для принудительного применения правила правой руки, и, похоже, для правильного упорядочивания координат ограничивающего прямоугольника, но я получаю одинаковые результаты запроса для обычного ограничивающего прямоугольника и ограничивающего прямоугольника RHR.

Вот соответствующие поля в модели Location ...

from django.contrib.gis.db import models as gis_models
point = gis_models.PointField(blank=True, null=True, geography=True)
bounding_box = gis_models.PolygonField(blank=True, null=True)

И вот что я пробовал ...

from locations.models import Location
from django.contrib.gis.db.models.functions import ForceRHR, ForcePolygonCW

russia = Location.objects.annotate(rhr=ForcePolygonCW('bounding_box')).get(pk=1646)
print(russia.bounding_box)
in_russia = Location.objects.filter(point__intersects=russia.bounding_box)
print(in_russia)

print(russia.rhr)
in_russia2 = Location.objects.filter(point__intersects=russia.rhr)
print(in_russia2)

Вот результаты кодавыше:

SRID=4326;POLYGON ((19.638861 41.185902, 19.638861 81.856903, -168.997849 81.856903, -168.997849 41.185902, 19.638861 41.185902))

<QuerySet [<Topic: 00-001 Warsaw, Poland>, <Topic: 048 01 Rožňava, Slovakia>, <Topic: 053 51 Richnava, Slovakia>, <Topic: 50.2112, -170.2624>, <Topic: 50.9566, -170.7638>, <Topic: 51.5734, -170.2439>, <Topic: 51.7759, -169.4604>, <Topic: 51.8281, -170.4743>, <Topic: 51.9097, -170.0422>, <Topic: 51.9108, -169.5701>, <Topic: 51.9771, -169.6288>, <Topic: 51.9782, -169.3368>, <Topic: 52.0036, -170.8657>, <Topic: 52.0231, -170.4362>, <Topic: 52.0362, -170.5883>, <Topic: 52.0641, -169.6883>, <Topic: 52.1027, -170.0871>, <Topic: 52.1242, -170.4661>, <Topic: 52.1272, -170.5383>, <Topic: 52.1295, -170.4205>, '...(remaining elements truncated)...']>

SRID=4326;POLYGON ((19.638861 41.185902, -168.997849 41.185902, -168.997849 81.856903, 19.638861 81.856903, 19.638861 41.185902))

<QuerySet [<Topic: 00-001 Warsaw, Poland>, <Topic: 048 01 Rožňava, Slovakia>, <Topic: 053 51 Richnava, Slovakia>, <Topic: 50.2112, -170.2624>, <Topic: 50.9566, -170.7638>, <Topic: 51.5734, -170.2439>, <Topic: 51.7759, -169.4604>, <Topic: 51.8281, -170.4743>, <Topic: 51.9097, -170.0422>, <Topic: 51.9108, -169.5701>, <Topic: 51.9771, -169.6288>, <Topic: 51.9782, -169.3368>, <Topic: 52.0036, -170.8657>, <Topic: 52.0231, -170.4362>, <Topic: 52.0362, -170.5883>, <Topic: 52.0641, -169.6883>, <Topic: 52.1027, -170.0871>, <Topic: 52.1242, -170.4661>, <Topic: 52.1272, -170.5383>, <Topic: 52.1295, -170.4205>, '...(remaining elements truncated)...']>

Я ожидаю получить места в России, поэтому я что-то делаю не так или весь подход неверен?

...