【问题标题】:OSMWidget Django form location coodinates are incorrectOSMWidget Django 表单位置坐标不正确
【发布时间】:2021-03-24 05:22:55
【问题描述】:

我有以下表单域

point = gis_forms.PointField(widget=gis_forms.OSMWidget(
                            attrs={'map_width': 800,
                                   'map_srid': 4326,
                                   'map_height': 500,
                                   'default_lat': 49.246292,
                                   'default_lon'-123.116226,
                                   'default_zoom': 7,}))

表单在django中呈现为

<form method="post">
  {% csrf_token %}
  {{ form|crispy }}
  <button type="submit">Submit for Review</button>
</form>

但是当数据进入 POST 时,位置不正确。

def register_storage(request):
    if request.method == 'POST':
        form = MyGeoForm(request.POST)
        if form.is_valid():
            data=form.cleaned_data
            print(data.get('point'))
            print(data.get('point').srid)

SRID 显示为 3857 和奇怪的默认坐标 -13645232.541356523 6283123.725041488

我以为这是我的 django 版本,但由于 GDAL 的某些功能,它已更新到 3.1.3。但没有运气。

这里很迷茫。

【问题讨论】:

  • -13645232.541356523 6283123.725041488相当于SRS中的-123.116226 49.2462923857,所以坐标没有错。自己看吧:SELECT ST_AsText(ST_Transform('SRID=4326;POINT(-123.116226 49.246292)'::GEOMETRY,3857));。你的问题到底是什么?干杯
  • 仅此而已?为什么即使我手动希望小部件使用 4326,它仍显示为 3857?甚至文档都说默认值为 4326。不知道为什么我需要将其转换回来..
  • 我也遇到了这种情况……我这辈子都搞不清楚发生了什么。在 Django 管理员中,坐标正确显示为 4326(例如 SRID=4326;POLYGON ((0.6564331054687499 ...),而如果我 print(mymodelobject.geom) 我得到 SRID=3857;POLYGON ((73107.017232... 你有没有找到这个 @soysushi 的答案?
  • @Simon 嘿,所以我通过使用 Point 库将其转换为 Jim 提到的解决了它。我做了from django.contrib.gis.geos import Point ,然后在后面的一条线上。 user_location = Point(longitude, latitude, srid=4326)
  • 嘿@soysushi 感谢您回复我。如果它有帮助,我想我已经深究了。上周我发布了一个与您类似的问题,我想我终于解决了。如果您有兴趣,可以在这里阅读:stackoverflow.com/questions/69084910/…

标签: python django postgis geodjango


【解决方案1】:

您必须在表单字段中明确定义 SRID。我不确定为什么会这样(你会认为它会像 Django/GeoDjango 的其余部分一样默认为 4326),但它似乎就是这样。您的代码应为:

point = gis_forms.PointField(
    srid=4326,
    widget=gis_forms.OSMWidget(
        attrs={
            "map_width": 800,
            "map_srid": 4326,
            "map_height": 500,
            "default_lat": 49.246292,
            "default_lon": -123.116226,
            "default_zoom": 7,
        }
    ),
)

【讨论】:

    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    • 2019-04-19
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多