【问题标题】:What SRID should I use for my application and how?我应该为我的应用程序使用什么 SRID 以及如何使用?
【发布时间】:2011-06-10 05:20:25
【问题描述】:

我将 PostgreSQL 与 PostGIS 一起使用。我所有的数据都已经附加了十进制纬度/经度(即 -87.34554 33.12321),但要使用 PostGIS,我需要将其转换为某种类型的 SRID。 我的大部分查询都是在特定半径内查找数据。

我应该使用什么 SRID?我已经创建了一个 SRID 4269 的几何列。 在这个例子中: link text 作者正在将 SRID 4269 转换为 SRID 32661。我对如何以及何时使用这些 SRID 感到非常困惑。任何有关该主题的精简版都将不胜感激。

【问题讨论】:

    标签: postgresql gis postgis


    【解决方案1】:

    只要您从不打算将数据重新投影/转换到另一个坐标系,从技术上讲,您使用什么坐标并不重要。但是,假设您不想丢弃重要的元数据,并且确实想对其进行转换,您将需要确保分配的 srid 与数据匹配,以便 postgis 知道时机成熟时该做什么。

    那么为什么要从 epsg:4269 重新投影?答案是因为某些类型的查询(例如距离)在这个“未投影”的世界中毫无意义。您的单位是十进制度,而 x 十进制度的直接测量是不同的实际距离,具体取决于您在地球的哪个位置。

    在您上面的示例中,有人使用 epsg:32661,因为他们认为这将使他们在工作时更加准确。如果您的数据位于全球特定区域,您可以选择一个投影准确的那个区域。如果它跨越整个地球,您必须选择一个“可以”满足您需求的投影。

    现在幸运的是,PostGIS 有一些方法可以让这一切变得更容易。对于近似距离,您可以只使用 st_distance_sphere 函数,正如您可能猜到的那样,它假设地球是一个球体。或者更准确的 st_distance_spheroid。使用这些,您不需要重新投影,并且您可能会很好地进行距离查询,除非在边缘情况下。较新版本的 PostGIS 还允许您使用 geography columns

    tl;dr - 使用 st_distance_spheroid 进行距离查询,将数据存储在地理列中,或将其转换为本地投影(存储时或在运行中,取决于您的需要)。

    【讨论】:

    • 我对此投反对票是因为:“答案是因为某些类型的查询(例如距离)在这个“未投影”的世界中毫无意义。您的单位是十进制度,并且x十进制度的直接测量是不同的实际距离,具体取决于您在地球的哪个位置。”在一个“未投影”的词中,有一个距离的概念,这里是球体:(en.wikipedia.org/wiki/Great-circle_distance)它只是有点难以计算。至于纬度/经度坐标中的距离计算,这在 postgis postgis.net/docs/ST_Distance.html 中不是问题
    • 公平点 - 我应该注意到距离,因为它是 lof 坐标的简单差异。但是您的评论也具有误导性:您指向的距离计算是一种将纬度/经度投影(在本例中为球体)的形式,因此您可以获得“合理”的距离答案。但它仍在投射。虽然 PostGIS 可以通过地理坐标为您在后台执行此操作,但如果您将 epsg:4326 与几何列一起使用,st_distance 会产生令人困惑的(例如简单的坐标差异)结果。
    • 这不是误导,我不是说“纬度/经度投影到球体中”我是说球体上有距离的概念,而你没有投射一个球体来感受它。 lat/lon 只是一个描述球体上点的坐标系。它们与投影无关,投影是一种将 N 维空间(在我们的例子中为球体)转换为另一个 M 维空间(通常是笛卡尔 2 暗平面)的方法,其中距离的概念更加直观和清晰。投影是从一个坐标系转换到另一个坐标系的结果。
    • 技术上纬度/经度不是描述球体上点的坐标系。例如,您将从具有 epsg:4326 与 epsg:4269 的 GPS 获得不同的纬度/经度。是的,做球面数学相对容易,但纬度/经度并不存在于真空或球体中。有时它们用于椭球体,有时用于球体,有时用于非地球行星。它们只是单位,当考虑它们与地球上某个点的关系时,必须发挥作用。然而,这些都与 OP 无关(尽管我现在很后悔我的“未预测”评论)。
    • 感谢您的意见。正确,就GIS而言,当一个人定义坐标系时,他谈到了基准,它由椭圆体的形状定义,从本初子午线和一组坐标偏移以参数化椭圆体表面上的点(纬度, lon 或 x、y、z 等)。就此而言,WSG84 椭球比 NAD83 中使用的椭球长 0.21 毫米。但同样,您不必投影来执行距离计算。您可以在“未投影”即(纬度,经度)坐标中执行此操作。
    【解决方案2】:

    看看这个问题:How do you know what SRID to use for a shp file?

    SRID 只是将 WKT 存储在数据库中的一种方式(您可能已经注意到,尽管您存储经纬度点,但首选存储是带有数字和大写字母的长字符串)。

    SRID 或EPSG 可能因国家/州/...而有所不同...尽管有一些非常常见的,尤其是您提到的 2 个。如果您需要具体信息哪个区域使用什么 SRID,有一个database for handling that

    在您的数据库中,您有一个表 spatial_ref_sys,其中包含有关 SRID PostGIS 所知道的信息。

    【讨论】:

    • 正如我喜欢说的“真实的混乱胜过虚假的清晰”。无论如何,我的困惑来自于这个页面中的示例:unserializableone.blogspot.com/2007/02/… 每次他进行查询时都将 4269 转换为 32661。这是否与他最终可能拥有一些重要数据 32661 这就是为什么他总是将其转换为该系统的事实有关?不然4269就好了?
    • @itgorilla 这取决于你输出它的方式。大多数时候,一个 JS 库将处理显示(如谷歌地图、OSM ......),这个库需要将线、点......放在某个地方,如果在 4269 中需要底层坐标,那么他需要分别转换。不过我不是专家,所以也许有人对此有更好的解释。
    • 如您所见,我正在尝试自己解决这个问题:)。无论如何,我认为我阅读和询问的越多,我就开始更清楚地了解它是如何工作的。感谢您的帮助。
    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 2014-03-29
    • 2018-11-12
    相关资源
    最近更新 更多