使用postgres计算两个坐标之间的距离?

时间:2017-05-21 10:06:09

标签: postgresql coordinates postgis

我有工作机会与postgres合作,我对此并不太了解。这家伙告诉我要建立一个简单的数据库,它可以自动计算到我家的距离,从一些其他地方(酒吧,药店,博物馆,等等......)的地理位置给出一切。

我已经安装了postgres,也是postgis并创建了一个数据库。你能给我一些关于我应该怎么做这个任务的提示吗?我可以使用任何教程或资源来简化这项任务吗?我应该使用postgis吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

PostGIS将轻松完成此任务。无边地理有一个很好的PostGIS tutorial。我还建议你熟悉Ch3& PostGIS手册中的4个。

我强烈建议你学习&如果您要处理空间数据,请了解投影和未投影坐标之间的差异。投影意味着坐标取自“圆形地球”并调整或投影到平面地图页面(坐标通常以英尺或米为单位,具体取决于所用投影的属性)。这使得能够对距离,区域,方向,交叉点,包含等进行计算上有效的正常笛卡尔计算。使用投影时需要权衡 - 当投影曲线时,不能保留所有区域,距离,形状,方向或者在平面地图上浮出水面。不同的预测针对不同的权衡进行了优化。投影数据的计算仅在地球表面的相对较小部分上是准确的。有许多地图投影可供选择,以满足各种需求和地区。如果您要使用投影数据,则需要选择适合您目的和位置的投影。如果您不理解预测,那么您的查询很容易产生垃圾而不会意识到它。

未投影的数据(即您所拥有的原始Lat / Lon坐标)涉及更复杂的计算,因为它们是在代表地球的椭球体的曲面上完成的。有许多参考坐标系用于表达Lat / Lon,但最常见的是“WGS84”(表示“GPS”坐标)。

PostGIS对象(以OGC定义的“简单特征”的形式)可以存储为“几何”类型(投影坐标)或“地理”类型(WGS84中未投影的Lon / Lat:注意顺序,常见的混乱来源!)。作为一点皱纹,Lon / Lat(再次订购!)也可以存储为“伪投影”几何类型(对于WGS84 Lon / Lat,投影SRID通常为'4326')。

用于计算距离的方法取决于您选择存储点的方式(“几何”或“地理”)。

有关使用几何和地理点测量距离的优秀示例,请参阅PostGIS文档中的ST_Distance。请注意,如果您希望计算投影地图距离,则需要选择适当的地图投影,并使用ST_Transform将您的点投影到相应的空间参考系统(当前处于SRID 4326-“GPS”坐标)。对于只有几个点,差异根本不会明显,但是一旦你开始做很多更复杂的空间查询,差异就会很大。 PostGIS具有更多几何类型的功能,而不是可能影响您决策的地理类型。另请参阅ST_DistanceSpheroid了解另一种计算Lon / Lat坐标距离的可能性。

首先,我会将您的积分存储为“地理位置”,以简化您的实验。您的距离将以米为单位的“大圆”计算,您最初不必担心投影。