标签: spatial

PostgreSQL :这是因为锁(行级)吗?

我有一个大约有 210 万个元组的表。其中有纬度和经度列。我正在尝试将其转换为地理类型(带有 SRID 的点)。

我编写的函数(程序)在我限制条目时工作正常(比如 : SELECT id,longitude,latitude FROM list_of_location limit 50)。

CREATE OR REPLACE FUNCTION convertlatlon() RETURNS VOID AS $$
DECLARE rec RECORD;
BEGIN
    FOR rec IN SELECT id,longitude,latitude FROM list_of_location
    LOOP
    UPDATE list_of_location SET location= concat('SRID=4326;POINT(',rec.longitude,' ',rec.latitude,')') WHERE id=rec.id;    
    END LOOP;
END;
$$ LANGUAGE 'plpgsql' ;
Run Code Online (Sandbox Code Playgroud)
  • 当我尝试在整个表上运行它时,PostgreSQL 似乎什么都不做。已经等了一个半小时。
  • 在它运行的核心上消耗 99% 的 CPU。
  • 不会启动任何其他 PostgreSQL 实例以使用其他内核(因为请求来自单个用户?)。
  • 这是因为锁(行级)吗?
  • 如何规避这种情况?

postgresql spatial

2
推荐指数
1
解决办法
342
查看次数

是否可以在不创建存储过程的情况下在 SQL 中使用循环?

我想循环遍历用户定义数据类型(ESRI 版本)中 SHAPE/GEOMETRY 列中的顶点ST_GEOMETRY。我已在 GIS SE 帖子中发布了详细信息:Update sde.st_geometry M value tocumulative distance (geometric length)

我认为这通常会在存储过程中完成(可能与sde.ST_GEOMETRY函数ST_NumPointsand结合使用ST_PointN)。但是,我没有CREATE PROCEDURE权限,所以无法创建存储过程。

作为创建存储过程的替代方法,是否有一种方法可以使用 SQL 语句来循环遍历顶点?

Oracle 12c (12.1.0.2.0)

oracle stored-procedures spatial update

2
推荐指数
1
解决办法
4425
查看次数

插入或更新 SQL Server(空间)时的触发器

我正在考虑在实时 SQL Server 空间表上创建一个触发器,当用户执行以下任一操作时,该触发器将更新列:

  1. 创建一个新功能
  2. 更新 GIS 应用程序中要素的几何形状

不幸的是,我只能在创建新功能时更新列,或在更改几何列时更新列,但不能在一个触发器中同时更新这两者。

理想世界 - 属性Updated填充已创建或修改的特定功能的当前日期。

到目前为止,这是我所拥有的仅在创建新功能时才有效的方法:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER *[triggername]* ON *[table]* 
AFTER INSERT,UPDATE
AS BEGIN
    DECLARE @ID VARCHAR(8)

    SELECT @ID = [ID] FROM *[table]*

    UPDATE *[table]*
    SET Updated = GETDATE()
    WHERE [ID] = @ID
END
GO
Run Code Online (Sandbox Code Playgroud)

当几何体改变时这有效

CREATE TRIGGER [triggername] ON [table] 
FOR INSERT, UPDATE 
AS BEGIN
    UPDATE [table] 
    SET [table].Updated = Getdate()
    FROM [table] 
    INNER JOIN deleted d ON [table].id = d.id …
Run Code Online (Sandbox Code Playgroud)

sql-server spatial

1
推荐指数
1
解决办法
3208
查看次数

PostgreSQL (PostGIS) 和 SQL Server (Spatial) 的结果差异

我有两点,我必须计算它们之间的差异。

我在 SQL Server 中使用以下查询。

SELECT geography::Point(27.185425, 88.124582, 4326)
       .STDistance(geography::Point(27.1854258, 88.124500, 4326));
Run Code Online (Sandbox Code Playgroud)

它运行良好,结果是:

8.12599260290125
Run Code Online (Sandbox Code Playgroud)

现在,当我在 PostgreSQL 中运行以下查询时,同样的情况。

SELECT ST_Distance(ST_GeomFromText('POINT(27.185425 88.124582)',4326),
                   ST_GeomFromText('POINT(27.1854258 88.124500)', 4326));
Run Code Online (Sandbox Code Playgroud)

现在结果是:

8.20039023523232
Run Code Online (Sandbox Code Playgroud)

谁能告诉我为什么计算两点之间的距离时结果存在差异?

postgresql sql-server spatial postgis

1
推荐指数
1
解决办法
259
查看次数

PostGIS 可以在外部表上使用空间索引吗?

我正在尝试对一些外部空间表执行查询,这比在普通空间表上运行的时间长几个数量级,因为没有使用索引。

索引似乎正在处理非空间查询。

这是应该工作的东西还是不受支持?

postgresql performance index spatial postgis query-performance

1
推荐指数
1
解决办法
374
查看次数

为什么我们在 SQL 数据库中有几何数据类型?

  1. SQL 表中特定 SDI 数据类型的用途是什么?
  2. 它们可以表示为“(3,1)”(如果是平面上的点)VARCHAR,然后由应用程序检索并处理它们?
  3. 几何和地理数据类型有什么区别?
  4. 请在 SQL 源代码中提及 SDI 类型的应用程序,以便更好地理解。
  5. 是否有任何示例数据库(最好是 postgreSQL)来演示这些数据类型的使用,因为学习者可以使用这些数据来更好地理解它们的效用?

postgresql datatypes spatial

-2
推荐指数
1
解决办法
86
查看次数