需要使用GeoDjang在postGIS上执行

2024-10-01 15:48:14 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我第一次在postGIS中使用GeoDjango。在安装和一些运行正常的测试之后,我关心的是当表行增长时的查询性能。在

我保存了一个几何点经纬度,这是我从谷歌地理编码(WGS84,或srid4326)得到的。我的问题是远程操作在我的应用程序中非常常见。我经常需要靠近地标。几何数学是非常复杂的,所以即使我有一个空间索引,它可能会花费太长的时间在一个附近的地区有超过1000个点。在

那么有没有任何方法可以投影这种几何类型来更快地进行距离运算?有人知道一个Django库可以呈现包含这些点的Google地图吗?在

关于如何加快GeoDjango的空间查询有什么建议吗?在


Tags: 应用程序编码远程空间数学性能地理经纬度
3条回答

如果你能将你的工作区域调整到地图投影中,那将总是更快,因为像距离计算这样的事情所需的数学调用就更少了。然而,如果你有真正的全球数据,那就吸收它:使用地理信息。如果您只有美国大陆的数据,请使用类似爱普生:2163http://spatialreference.org/ref/epsg/2163/

您的工作区域越受约束,在地图投影中获得的结果就越精确。请参见州平面预测,了解美国区域区域的高度受限、精确预测,或更大的次国家地区的UTM预测。在

我正在研究这个话题。据我所知,从geopy库中获得的坐标是srid4326格式的,因此可以毫无问题地将它们存储在几何体字段类型中。这将是使用几何图形的GeoDjango模型的一个示例:

class Landmark(models.Model):
   point = models.PointField(spatial_index = True,
                           srid = 4326,
                           geography = True)

   objects = models.GeoManager()

顺便说一句,要非常小心地将经度/纬度按这个确切的顺序传递到PointField。geopy返回纬度/经度坐标,因此需要反转它们。在

为了将一个坐标系中的点转换为另一个坐标系,我们可以使用GEOS和GeoDjango。90026谷歌将9126点投影到著名的43i中:

^{pr2}$

这样我们就可以把坐标存储在投影系统中,这样会有更好的数学性能。 用于在管理站点界面中显示Google地图中的点。我们可以使用this great article。在

我决定继续使用地理类型,将来我会转换它们,以防需要提高性能。在

一般来说,GeoDjango将在适当的情况下在几何体列上创建和使用空间索引。在

对于主要处理点之间距离的应用程序,Geography type(在postgis1.5中引入,并由GeoDjango支持)可能是一个很好的适合。GeoDjango说它提供了“WGS84距离查询更好的性能”[link]。在

相关问题 更多 >

    热门问题