将几何点转换为经纬度在Geodjango应用中

3

我正在使用Django、Geodjango、OpenLayers和PostGIS创建一个Web地图应用程序。我想要在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中的地图中心。
谢谢您提前的帮助。
Ro
2个回答

7
啊,我想通了,原来如此简单。您可以通过在Django查询的末尾添加“x”或“y”来轻松访问Lat和Long值,具体方法如下:
centroid = LGA.objects.get(name=lga).geom.centroid.x

3
你正在获取GeometryField实例的xy属性。说“将'.x'或'.y'添加到Django查询的末尾”可能会让人误解。 - Bibhas Debnath
可能需要更多的澄清: - MarMat
2
纬度 = GEOSGeometry.centroid.y 经度 = GEOSGeometry.centroid.x。你的发布顺序使其听起来像是纬度 = x 和经度 = y,这在大多数情况下都是不正确的。 - MarMat

0
你的几何点格式是什么?可以给我们提供一个例子吗? 据我理解,你的几何点不是在经纬度投影EPSG:4236中(这是用于纬度和经度的),而是其他格式(投影)对吧?通常的方法是使用Openlayers的Point.transform方法将投影转换,但不能在GeoDjango中计算。

例如,谷歌地图使用投影EPSG:900913,因此如果您想将一个几何点从谷歌地图转换为经度/纬度,可以执行以下操作:point.transform(new OpenLayers.Projection("EPSG:900913"), new OpenLayers.Projection("EPSG:4326")); - JSC
嗨,感谢回复。我编辑了我的问题以提供更多细节,并添加了我目前设置地图中心的代码。我想根据所选城市动态执行此操作。我的城市几何图形存储在EPSG 4326中。我正在尝试找到一种从几何点到经度/纬度的方法来动态设置中心,除非还有其他方法...? - user2642365
根据您的新帖,我现在知道您想要什么了。很高兴看到geom.centroid.x对您有用,另一种方法是通过OpenLayers来完成,代码如下:var lonlat = new OpenLayers.LonLat(centroid.x, centroid.y); map.setCenter(lonlat, 5); 请注意,“centroid”是您从Django查询中通过AJAX传递的几何点。 - JSC
顺便提一下,这两个链接可以帮助您理解我的意思:http://dev.openlayers.org/docs/files/OpenLayers/Geometry/Point-js.html 和 http://dev.openlayers.org/docs/files/OpenLayers/BaseTypes/LonLat-js.html - JSC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接