当前位置: 首页 > 知识库问答 >
问题:

为什么ST_MakeValid()从已定义的几何图形中删除SRID?

商燕七
2023-03-14

我正在尝试在一系列大部分同心等距多多边形上使用 PostGIS ST_MakeValid() 函数......

. . .使用清晰的几何类型和 SRID 定义(虽然它们可能不完全有效,但仍然足够有效,可以在 QGIS 中呈现,如上所示):

trade=# \d tmp1
                           Table "public.tmp1"
  Column   |            Type             | Collation | Nullable | Default 
-----------+-----------------------------+-----------+----------+---------
 the_geom  | geometry(MultiPolygon,4326) |           |          | 

不幸的是,当我使用ST_MakeValid()函数创建新表时,它同时剥离了SRID和几何类型:

trade=# CREATE TABLE tmp2 AS (SELECT ST_MakeValid(the_geom) AS the_geom_valid FROM tmp1);
SELECT 25
trade=# \d tmp2
                    Table "public.tmp2"
     Column     |   Type   | Collation | Nullable | Default 
----------------+----------+-----------+----------+---------
 the_geom_valid | geometry |           |          | 

。。。并且< code>ST_SetSRID()无法通过创建新表来解决它:

trade=# CREATE TABLE tmp3 AS (SELECT ST_SetSRID(the_geom_valid,4326) AS the_geom_srid FROM tmp2);
SELECT 25
trade=# \d tmp3
                    Table "public.tmp3"
    Column     |   Type   | Collation | Nullable | Default 
---------------+----------+-----------+----------+---------
 the_geom_srid | geometry |           |          | 

…或通过嵌套函数:

trade=# CREATE TABLE tmp4 AS (SELECT ST_SetSRID(ST_MakeValid(the_geom),4326) AS the_geom_all FROM tmp1);
SELECT 25
trade=# \d tmp4
                    Table "public.tmp4"
     Column    |   Type   | Collation | Nullable | Default 
 --------------+----------+-----------+----------+---------
  the_geom_all | geometry |           |          | 

. . .甚至使用大家最喜欢的ST_MakeValid()半替补,ST_Buffer()

trade=# CREATE TABLE tmp5 AS (SELECT ST_Buffer(the_geom,0) AS the_geom_buffer FROM tmp1);
SELECT 25
trade=# \d tmp5;
                     Table "public.tmp5"
     Column      |   Type   | Collation | Nullable | Default 
-----------------+----------+-----------+----------+---------
 the_geom_buffer | geometry |           |          | 

我找不到任何文档表明这是使用ST_MakeValid()时的预期行为-如何在不丢失geom类型和SRID的情况下创建有效的几何图形?

共有1个答案

程凯定
2023-03-14

SRID正在保留。例如,尝试以下操作:

SELECT st_srid(the_geom_buffer) FROM tmp2 LIMIT 1;

你应该看到这样的东西:

┌─────────┐
│ st_srid │
├─────────┤
│    4326 │
└─────────┘

这样做的原因是 ST_MakeValid() 可以返回许多类型中的任何一种,但无法提前知道它们会是什么。从文档中:

在完全或部分维度折叠的情况下,输出几何可以是低至相等维度的几何的集合或更低维度的几何。

因此,唯一的选择是返回通用几何图形。

但是,如果您确信不会发生这种情况,可以使用强制转换(或ALTER语句post-hoc)强制执行:

CREATE TABLE tmp2 AS 
  SELECT 
    ST_MakeValid(the_geom)::geometry(MultiPolygon, 4326) AS the_geom_valid
  FROM tmp1;
 类似资料:
  • 我尝试了下面的XSLT,但我不知道如何删除,xml version=“1.0”encoding=“UTF-8”?>。请帮忙

  • 我想从MPAndroidChart中的条形图中删除十进制值。尽管我在显示时将其作为整数值,但它显示的是十进制和加法。0表示我的值为。 例如:如果我的值为65,则显示75.0。(我想删除该.0部分) 我正在使用名为“mpandroidchartLibrary al-2-1-4”的库 下面是我的整数代码段。 这里b1是一个整数值,即使我在日志中打印,它也只打印为75,但显示时显示为75.0。 附截图请

  • 将jmeter测试集设置为使用10个线程组运行8小时,每个线程组具有不同的线程数,还使用每个线程组具有不同TPS速率的吞吐量成形计时器;在一段随机时间(大多数时间在6小时后)后,其中一个线程组终止活动线程,我尝试了不同的配置以及穿透输出成形计时器,比如使用Concurrency线程组和循环控制器,但结果是相同的;这是我在日志中看到的: 我们感谢您为解决此问题提供的任何帮助。

  • 我们有一个简单的需求,其中:ps:https://==https:/// 问题是: 当用户键入-https://company_landing.company.com时 Keycloak试图打开登陆页面,但给出了500个内部服务器错误,并表示“不正确的重定向URI”,在浏览器中我看到了以下内容: https://ourcompany-keycloak.company.com/auth/realms

  • 问题内容: 使用默认全局图时,是否可以在添加节点后将其删除,或者将默认图重置为空?在IPython中以交互方式使用TF时,我发现自己不得不反复重启内核。如果可能的话,我希望能够更轻松地尝试图形。 问题答案: 更新11/2/2016 老东西 有公共API,但不是公共API的一部分(我认为应该是,有人要在GitHub上提交问题吗?) 我的重置方法是:

  • 请检查这段代码,看看@Arun R在如何计算覆盖另一个矩形的矩形面积中所说的算法有什么问题 为什么它没有删除其他内部的矩形