【问题标题】:Simple PostGIS XYZ set up?简单的 PostGIS XYZ 设置?
【发布时间】:2016-12-29 18:14:00
【问题描述】:

我是 PostGIS 新手。我希望在一个简单的 XYZ 图上有一个简单的有界 (-200

  • 我需要什么 SRID?与英尺或米无关的一种。
  • 我是否需要使用该功能 ST_3DDistance 用 LIMIT K 查询 K 个最近邻?或最大距离为 N。
  • 要添加一列,我需要使用SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',3, false);。那是对的吗?
    • 3D 点和 PointZ 有什么区别?
    • AddGeometryColumn 能否确保我的距离查询快速?
  • PostGIS 是我用例的正确选择吗?我的数据库的其余部分已经与 PostgreSQL 集成

谢谢!

【问题讨论】:

    标签: postgresql postgis


    【解决方案1】:

    我需要什么 SRID?与英尺或米无关的一种。

    你并不“需要”一个 srid。如果您的数据在坐标系中,则找到正确的 srid,否则,使用 0。

    我是否需要使用函数 ST_3DDistance 来查询具有 LIMIT K 的 K 个最近邻居?或最大距离为 N。

    是的,你是对的。

    要添加列,我需要使用 SELECT AddGeometryColumn ('my_schema','my_spatial_table','geom_c',4326,'POINT',3, false);。对吗?

    是的,但我会使用 0 表示 srid,而不是 4326(表示度数)。

    3D 点和 PointZ 有什么区别?

    PointZ 是一个 3d 点。

    AddGeometryColumn 会确保我的距离查询很快吗?

    AddGeometryColumn 只会向表中添加一些约束,确保您插入的几何图形与列定义一致。

    我认为您不需要它,但您可以尝试使用 CREATE INDEX index_name ON schema.table USING gist (geom_col) 向几何列添加索引;

    PostGIS 是我用例的正确选择吗?我的数据库的其余部分已经与 PostgreSQL 集成

    我认为这是最简单的方法,不一定是“正确”的方法。

    您也可以在没有 postgis 的情况下实现距离函数,将三个坐标存储在三个数字字段中。

    【讨论】:

    • “你也可以在没有 postgis 的情况下实现一个距离函数,将三个坐标存储在三个数字字段中。” 我在想这个!据我了解,如果我构建了一个幼稚的实现,这会很慢。它需要每次查询扫描数据库中的所有条目并进行距离计算。我相信 PostGIS 解决了这个问题,我这样想对吗?
    • 如何设置列使得距离查询不必进行全表扫描?我以为AddGeometryColumn 用索引解决了这个问题。 CREATE INDEX index_name ON schema.table USING gist (geom_col); 会负责添加有助于 3D 距离查询的索引吗?
    • 如果您自己实现该功能,您应该能够根据您的需要优化您的查询。例如,您可以使用 min x、max x、min y、max y(边界框)来限制“候选人”,如果它适合的话......
    • 我认为索引没有帮助,我认为值得尝试和不使用并分析查询计划
    • 不过,我会先选择最简单的解决方案。如果速度太慢,我们可以想办法优化它,也许可以构建自定义索引。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 2011-04-10
    • 1970-01-01
    • 2014-03-17
    • 2019-04-09
    • 2014-03-05
    • 1970-01-01
    相关资源
    最近更新 更多