Почему печать показывает SRID 3847 в Geodjango?

Я разрабатываю приложение с использованием Geodjango и PostGIS. В административной области моего сайта все полигоны отображаются правильно с SRID (по умолчанию) 4326, например

SRID=4326;POLYGON ((0.6564331054687499 52.13854550670472, 0.6289672851562499 52.08456959594681, 0.7553100585937497 52.08456959594681, 0.6564331054687499 52.13854550670472))

Почему, когда я print захожу на веб-сервер/консоль, SRID отображается в 3857? Приведенный выше полигон области администрирования печатается как:

SRID=3857;POLYGON ((73073.79904062848 6825215.129639958, 70016.31790922143 6815431.190019455, 84080.73111369385 6815431.190019455, 73073.79904062848 6825215.129639958))

Я не знаю, могу ли я продолжать работать с многоугольниками, поскольку в настоящее время я не могу быть уверен в их проекции.

Итак, отвечаю на свой собственный вопрос. Это потребовало много зубодробительных усилий, и я не уверен, что я просто тупой или здесь есть какая-то ошибка. Для тех, кому это нужно, официальную документацию Django по геопространственным полям можно найти здесь.

Насколько я понимаю, "геопространственные вещи" (использую этот термин широко) в Django по умолчанию используют WGS84 (SRID 4326). Это, как я понимаю, означает, что если вы не будете из кожи вон лезть, чтобы переопределить аргумент/атрибут, то по умолчанию будет использоваться 4326. По какой-то причине это не относится к полям формы GeoDjango.

В то время как выше в своем вопросе я указал свое геопространственное поле как:

class jobForm(forms.ModelForm):
    location = PolygonField(
        widget=OSMWidget(
            attrs={'map_width': 800,
                   'map_height': 500,
                   'map_srid': 4326,
                   'template_name': 'gis/openlayers-osm.html',
                   'default_zoom':8,
                   'default_lat': 52,
                   'default_lon': 0.5}))

Что я должен был сделать, так это явно задать аргумент SRID. Таким образом, это должно быть:

class jobForm(forms.ModelForm):
    location = PolygonField(
        srid=4326,
        widget=OSMWidget(
            attrs={'map_width': 800,
                   'map_height': 500,
                   'map_srid': 4326,
                   'template_name': 'gis/openlayers-osm.html',
                   'default_zoom':8,
                   'default_lat': 52,
                   'default_lon': 0.5}))

В документации Django я не нашел упоминания о том, почему, если вы не указываете SRID в поле геометрии формы, она начинает выдавать координаты в 3857. Но это происходит по... причинам. Если есть законная причина, почему так происходит - возможно, я что-то упустил в документации - то я бы искренне хотел знать, что происходит.

Вернуться на верх