【问题标题】:Converting geometry point to lat/long in Geodjango app在 Geodjango 应用程序中将几何点转换为纬度/经度
【发布时间】:2013-09-24 15:29:42
【问题描述】:

我正在使用 Django、Geodjango、OpenLayers 和 PostGIS 创建一个网络地图应用程序。我想将 OpenLayers 底图缩放到从组合框中选择的城市位置,我想我可以通过将纬度/经度坐标和缩放级别传递给 OpenLayers 来做到这一点。

我有一个视图函数,它运行一个带有所选城市过滤器的 django 查询,然后计算返回的 QuerySet 的质心,如下所示。

centroid = LGA.objects.get(name=lga).geom.centroid

我目前设置地图中心的方式是静态的,代码如下:

var center = new OpenLayers.LonLat(133.0, -27.0).transform(
    new OpenLayers.Projection("EPSG:4326"),
    map.getProjectionObject()
    );

这些坐标是针对澳大利亚中心的,但我想使用带有纬度和经度变量的 Django 模板为所选城市动态设置地图中心。我不确定如何从我在视图函数中计算的质心获取纬度和经度,或者是否有另一种方法可以通过传递几何而不是坐标来在 OpenLayers 中设置地图中心。

提前感谢您的帮助。

【问题讨论】:

    标签: django openlayers latitude-longitude point geodjango


    【解决方案1】:

    啊,我想通了,很简单。您可以通过在 django 查询的末尾添加“.x”或“.y”来访问 Lat 和 Long 值,如下所示:

    centroid = LGA.objects.get(name=lga).geom.centroid.x
    

    【讨论】:

    • 您正在获取GeometryField 实例的xy 属性。说adding '.x' or '.y' to the end of the django query 有点误导。
    • 也许需要进一步澄清:
    • latitude = GEOSGeometry.centroid.ylongitude = GEOSGeometry.centroid.x。您帖子中的顺序听起来像 lat = x 和 lon = y,这在大多数情况下都是不正确的。
    【解决方案2】:

    您的几何点格式是什么?你能给我们举个例子吗? 据我了解,您的几何点不在投影中EPSG:4236(用于纬度和经度),而是其他格式(投影)对吗?正常的方法是在 Openlayers 中使用 Point.transform 方法转换投影,但在 GeoDjango 中不计算。

    【讨论】:

    • 例如 google map 使用投影 EPSG:900913,所以如果你想将几何点从 google map 转换为 Lon/Lat,你可以这样做:point.transform(new OpenLayers.Projection("EPSG: 900913"), 新 OpenLayers.Projection("EPSG:4326"));
    • 您好,感谢您的回复。我编辑了我的问题以提供更多细节,并添加了我当前如何设置地图中心的代码。我想根据所选城市动态执行此操作。我的城市几何图形存储在 EPSG 4326 中。我正在尝试找到一种从几何点到 Long/Lat 的方法来动态设置中心,除非有其他方法......?
    • 现在基于你的新帖子我知道你想要什么,很高兴看到 geom.centroid.x 为你工作,另一种方法是在 opnelayers 上这样做:var lonlat = new OpenLayers.LonLat (质心.x,质心.y); map.setCenter(lonlat, 5);请注意“质心”是您从 Django 查询中通过 AJAX 传递的几何点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 2013-09-09
    • 2021-09-24
    • 1970-01-01
    相关资源
    最近更新 更多