Как использовать Geo Django PostGIS ForceRHR / ForcePolygonCW - PullRequest
0 голосов
/ 09 марта 2020

У меня есть модель с полем, называемым «geom», который является MultiPolygonField. Когда я запрашиваю экземпляры модели, я бы хотел, чтобы данные в этом поле следовали правилу правой руки. Поскольку я использую PostGIS на сервере, у меня есть поддержка ForceRHR (я использую Django 2.06), но я не могу понять, как его использовать.

В views.py я получаю URL-запрос с парами имя-значение, и я преобразую этот словарь в словарь, подходящий для использования в фильтре:

def field_datasets(request):
    client_name = 'MSFF'
    grower = Growers.objects.filter(name__exact=client_name).get()

    fields = serialize('geojson', Fields.objects.filter(grower__exact=grower.id).filter(
    Q(*[(k,v)for k,vs in request.GET.lists() for v in vs], _connector=Q.OR)
    ))

    return HttpResponse(fields, content_type='json'

Я пробовал это:

...
    test = Fields.objects.filter(grower__exact=grower.id).filter(
        Q(*[(k,v)for k,vs in request.GET.lists() for v in vs], _connector=Q.OR)
    )

    test.update(geom = ForceRHR('geom'))
    fields = serialize('geojson', test)
...

и я ' мы попробовали это:

...
    test = Fields.objects.filter(grower__exact=grower.id).filter(
        Q(*[(k,v)for k,vs in request.GET.lists() for v in vs], _connector=Q.OR)
    )

    for item in test:
        rhr_geom = ForceRHR(item.geom)
        test[item].geom = rhr_geom

    fields = serialize('geojson', test)
...

В документации сказано: Принимает одно поле или выражение geographi c и возвращает модифицированную версию многоугольника / мультиполигона, в которой все внешние кольца ориентированы по часовой стрелке, а все внутренние кольца ориентированы против часовой стрелки. Неполигональные геометрии возвращаются без изменений.

Как еще я должен пропустить поле geographi c?

...