django - OSMGeoAdmin 反向坐标中的 OpenStreetMap 图层

标签 django openstreetmap geodjango

在我的 django 应用程序中,当我在管理中时,由于 OSMGeoAdmin 类(来自 django.contrib.gis.admin),我显示了一张 map ,唯一的问题是这张 map 有点反转 GPS 坐标(纬度,长的)。

示例:点(48, 2) 应指向奥尔良(法国)附近,而不是 map 指向索马里附近的 (2, 48)。

这对服务器来说不是问题,但当我想检查这些坐标时就会出现问题。

有人可以帮我解决这个问题吗?

最佳答案

如果你的数据库中的坐标是错误的,你应该修复它。在 ./manage.py shell 中:

from app.models import Point

for obj in Point.objects.all():
    obj.lat, obj.lng = obj.lng, obj.lat
    obj.save()

现在您只需解决“某种反向”问题即可。首先,坐标存储方式错误的原因。

编辑

如果您只想以相反的方式返回坐标,您可以在模型上定义自定义方法,以向对象添加自定义“行级”功能。请参阅:Model methods .

def _get_reversed_point(self):
    "Returns the reversed point (lng, lat)."
    return (self.point.lng, self.point.lat)
reversed_point = property(get_reversed_point)

现在您可以正常查询数据库,并且在处理反转点时使用 obj.reversed_point 它将返回反转的元组。

编辑2

reversed_point 不是表单的一部分,因此不能在更改 View 中使用,除非您自己添加它。这是由 ModelAdmin.form 完成的。在表单中,您可以(重新)定义字段并指定小部件。通过覆盖删除的小部件来创建小部件。事情是这样的:

from somewhere import SomeWidget

class MyWidget(SomeWidget):
    def render(self, name, value, attrs=None):
        output = []
        template = '<p>Your html that will display a beautiful map. Point: %(lat)s %(lng)s</p>'
        output.append(template % {'lat':self.instance.point.lat, 'lng':self.instance.point.lng, })
        output.append(super(SomeWidget, self).render(name, value, attrs))
        return mark_safe(u''.join(output))


class MyForm(forms.ModelForm):
    point = forms.SomeField(widget=MyWidget)

    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)

        if hasattr(self, 'instance'):
            # This gives the widget access to all fields in MyModel object.
            self.fields['point'].widget.instance = self.instance

    class Meta:
        model = MyModel
        exclude = []

class MyAdmin(admin.ModelAdmin):
    form = MyForm

GeoDjango 附带 some widgets 。阅读他们的代码是一个很好的起点,并且将了解小部件在哪里以“错误”的方式应用点信息。祝你好运。

关于django - OSMGeoAdmin 反向坐标中的 OpenStreetMap 图层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18568025/

相关文章:

javascript - axios如何获取.catch()中的状态码?

django - 如何向 Django 装置中的日期时间字段提供当前时间?

google-maps - Openstreetmap 数据与 OpenLayers 对比谷歌地图?

django - 如何在多多边形或多个多边形上进行空间查找 "contained"?

django - Azure Django 最大并发连接数

python - 在 Django 项目中设置日志文件的最大大小

android - OpenStreetMap 未在 Android 上显示

sql - Postgres 更喜欢 coSTLy ST_Intersects() 而不是廉价索引

django - geodjango gdal 3坐标顺序更改

postgresql - 尝试将 PostGIS 与 Postgres 一起使用 : "ERROR: could not open extension control file"