【发布时间】: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