gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 13:19:46 24 4
gpt4 key购买 nike

我得到一份与 postgres 一起工作的工作机会,但我不太了解它。那家伙告诉我要建立一个简单的数据库,它会自动计算从一些其他地方(酒吧、药店、博物馆等...)的列表到我家的距离,一切都以地理坐标给出。

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

谢谢。

最佳答案

PostGIS 可以轻松做到这一点。 Boundless Geo 有出色的PostGIS tutorial .我还建议您熟悉 PostGIS 手册的第 3 章和第 4 章。

如果您要使用空间数据,我强烈建议您了解投影坐标和非投影坐标之间的区别。投影意味着坐标已经从“圆形地球”获取并调整或投影到平面 map 页面上(坐标通常以英尺或米为单位,具体取决于所用投影的属性)。这使得可以对距离、面积、方向、交叉点、包含等进行计算高效的法线笛卡尔计算。使用投影需要权衡取舍——当你投影一条曲线时,你不能保留所有的面积、距离、形状、方向或表面到平面 map 上。不同的预测针对不同的权衡进行了优化。对投影数据的计算仅在地球表面相对较小的部分上是准确的。有许多 map 投影可以满足不同的需求和地点。如果您要使用投影数据,则需要选择适合您的目的和位置的投影。如果您不理解投影,您的查询很容易在不知不觉中产生垃圾。

非投影数据(即您拥有的原始纬度/经度坐标)涉及复杂得多的计算,因为它们是在代表地球的椭球体的曲面上完成的。有许多引用坐标系用于表示纬度/经度,但最常见的是“WGS84”(这是“GPS”坐标的表达方式)。

PostGIS 对象(以 OGC 定义的“简单要素”的形式)可以存储为“几何”类型(投影坐标)或“地理”类型(WGS84 中未投影的经/纬度:注意顺序,一个常见的混淆来源!)。有点麻烦,Lon/Lat(再次订购!)也可以存储为“伪投影”几何类型(对于 WGS84 Lon/Lat,通常投影 SRID 为“4326”)。

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

参见 ST_Distance从 PostGIS 文档中获取使用几何点和地理点测量距离的优秀示例。请注意,如果您希望计算投影 map 距离,您需要选择合适的 map 投影并使用 ST_Transform。将您的点投影到适当的空间引用系统(当前在 SRID 4326-“GPS”坐标中)。只有几点差异根本不会引人注意,但是一旦您开始执行许多更复杂的空间查询,差异就会很明显。 PostGIS 对于几何类型的功能比地理类型的功能多得多,这可能会影响您的决定。另见 ST_DistanceSpheroid从 Lon/Lat 坐标计算距离的另一种可能性。

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

关于postgresql - 使用postgres计算两个坐标之间的距离?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44095546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com