AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[spatial](dba)

Martin Hope
rocketboy2000
Asked: 2022-06-16 15:13:45 +0800 CST

从 JSON 中提取空间点的有序列表到 PostgreSQL 数组中

  • 1

我在 PostgreSQL 中有 JSONB 数据,如下所示:

{"datasetGPolygon": [
  {
    "datasetGPolygonOuterGRing": {
      "gRingPoint": [
        {
          "gRingLatitude": 49.922935,
          "gRingLongitude": -125.687365
        },
        {
          "gRingLatitude": 49.639177,
          "gRingLongitude": -126.126729
        },
        {
          "gRingLatitude": 49.382373,
          "gRingLongitude": -125.555556
        },
        {
          "gRingLatitude": 49.553726,
          "gRingLongitude": -125.02832
        },
        {
          "gRingLatitude": 49.95122,
          "gRingLongitude": -124.852575
        },
        {
          "gRingLatitude": 50.289339,
          "gRingLongitude": -125.204066
        },
        {
          "gRingLatitude": 50.261254,
          "gRingLongitude": -125.99492
        },
        {
          "gRingLatitude": 49.922935,
          "gRingLongitude": -125.687365
        }
      ]
    }
  },
  {
    "datasetGPolygonOuterGRing": {
      "gRingPoint": [
        {
          "gRingLatitude": 49.292889,
          "gRingLongitude": -124.843625
        },
        {
          "gRingLatitude": 49.60003,
          "gRingLongitude": -124.843625
        },
        {
          "gRingLatitude": 49.60003,
          "gRingLongitude": -124.409753
        },
        {
          "gRingLatitude": 49.292889,
          "gRingLongitude": -124.409753
        },
        {
          "gRingLatitude": 49.292889,
          "gRingLongitude": -124.843625
        }
      ]
    }
  }
]}

我想将其转换为与“datasetGPolygonOuterGRing”对象一样多的数组,这些对象保留每个“gRingPoint”中点的顺序。以上将提供两条记录:

[[[48.592142,-123.920288],[48.645205,-123.667603],[48.5262,-123.940887],[48.592142,-123.920288]],
[[48.592147,-123.920292],[48.645210,-123.667607],[48.5267,-123.940893],[48.592147,-123.920292]]]

我已经尝试了几个 PostgreSQL JSON 函数,这些函数将所有点提取到他们自己的记录中,这显然是不希望的。

编辑:我想出了一个解决方案如下。

with poly as (select poly.n n1, poly.points points from submission, jsonb_path_query(eml_json_source, '$.**.datasetGPolygon[*].datasetGPolygonOuterGRing.gRingPoint') with ordinality poly(points, n)),
points as (select poly.n1, arr.position n2, arr.point->>'gRingLatitude' lat, arr.point->>'gRingLongitude' long from poly,
jsonb_array_elements(points) with ordinality arr(point, position))
select array_agg('['||lat||','||long||']' order by n2) from points group by n1;

https://dbfiddle.uk/?rdbms=postgres_14&fiddle=93d068d74458abba95db424bc7e187cb

但会对是否有“更好”的方法来做到这一点感兴趣?横向连接的某些实现会使其不那么冗长吗?

postgresql spatial
  • 1 个回答
  • 61 Views
Martin Hope
User1974
Asked: 2022-02-08 17:11:05 +0800 CST

如何请求增强 SDO_GEOMETRY / Oracle Spatial

  • 0

我想向 Oracle 提出一些关于增强 SDO_GEOMETRY / Oracle Spatial 的想法。

例子:

请求选择顶点的函数,包括 SDO_GEOMETRY 折线的多部分编号。

在此处输入图像描述


问题:

我们是否有办法向 Oracle 请求 SDO_GEOMETRY / Oracle Spatial 的增强?


我尝试了什么:

我找到了以下页面:如何在 Customer Connect Idea Lab 中为采购产品记录一个想法(增强请求)(文档 ID 2577625.1)

但不幸的是,我的个人 Oracle 帐户没有“连接”到我组织的 Oracle 支持帐户(我不是 IT 部门;我的 DBA 不想代表我提交想法)。所以我无法通过“连接您的用户帐户”步骤。

在此处输入图像描述


在一个相关问题中,事实证明有一种方法可以在 Oracle 论坛中请求对不同产品 (SQL Developer) 的增强。这很棒,因为像我这样的非 DBA 可以访问它。

所以我想知道 Oracle Spatial 是否存在类似的东西。

而且我不完全确定“如何记录想法”页面是否是正确的途径。似乎想法可能不会被适当的团队听到......也许有更直接的方式与 Oracle Spatial 团队交谈。

oracle spatial
  • 1 个回答
  • 26 Views
Martin Hope
User1974
Asked: 2021-09-19 15:14:54 +0800 CST

选择 SDO_GEOMETRY 线顶点作为行

  • 0

我有一个具有 SDO_GEOMETRY 列(行)的 Oracle 18c 表:

create table a_sdo_geometry_tbl (line_id integer, shape mdsys.sdo_geometry);

insert into a_sdo_geometry_tbl (line_id, shape) 
values (1, sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1), 
    sdo_ordinate_array (671539.6852734378,4863324.181436138, 671595.0500703361,4863343.166556185, 671614.013553706,4863350.343483042, 671622.2044153381,4863353.525396131))  );

insert into a_sdo_geometry_tbl (line_id, shape) 
values (2, sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1), 
    sdo_ordinate_array (71534.5567096211,4863119.991809748, 671640.7384688659,4863157.132745253, 671684.8621150404,4863172.022995591))  );

insert into a_sdo_geometry_tbl (line_id, shape) 
values (3, sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1), 
    sdo_ordinate_array (671622.2044153381,4863353.525396131, 671633.3267164109,4863357.846229106, 671904.0614077691,4863451.286166754))  );

insert into a_sdo_geometry_tbl (line_id, shape) 
values (4, sdo_geometry (2002, null, null, sdo_elem_info_array (1,2,1), 
    sdo_ordinate_array (671684.8620521119,4863172.022995591, 671892.1496144319,4863244.141440067, 671951.2156571196,4863264.824310392, 671957.4471461186,4863266.847617676, 671966.8243856924,4863269.146632658))  )

select
    line_id,
    sdo_util.to_wktgeometry(shape) as well_known_text
from
    a_sdo_geometry_tbl;

   LINE_ID    WELL_KNOWN_TEXT
--------------------------------------------------------------------------------
         1    LINESTRING (671539.685273438 4863324.18143614, 671595.050070336 4863343.16655619, 671614.013553706 4863350.34348304, 671622.204415338 4863353.52539613)         
                                                                                
         2    LINESTRING (71534.5567096211 4863119.99180975, 671640.738468866 4863157.13274525, 671684.86211504 4863172.02299559)                                             
                                                                                
         3    LINESTRING (671622.204415338 4863353.52539613, 671633.326716411 4863357.84622911, 671904.061407769 4863451.28616675)                                            
                                                                                
         4    LINESTRING (671684.862052112 4863172.02299559, 671892.149614432 4863244.14144007, 671951.21565712 4863264.82431039, 671957.447146119 4863266.84761768, 671966.824385692 4863269.14663266)                                                       
                                                                                
4 rows selected.

对于每一行,我想在查询/结果集中选择每个顶点作为单独的行。

我怎样才能做到这一点?

oracle spatial
  • 1 个回答
  • 70 Views
Martin Hope
Anders Lindén
Asked: 2021-05-26 21:44:40 +0800 CST

数据库类型“几何”的一列导致 ssms 隐藏了两个额外的列

  • 0

如果我创建一个像

create table test2 (foo geometry)

foo 将按预期显示在表格设计器中

ssms 中的截图

但是当我查询sys.columns列信息时...

select
t.name as TABLE_NAME,
c.name as COLUMN_NAME,
c.precision as PRECISION,
c.scale as SCALE,
c.max_length as MAX_LENGTH,
c.is_nullable as IS_NULLABLE,
ty.name as DATA_TYPE
FROM sys.columns c
JOIN sys.tables t ON c.object_id = t.object_id
JOIN sys.types ty on c.system_type_id = ty.system_type_id and ty.NAME != 'sysname'
ORDER BY c.column_id

...我还得到了一列类型hiearchyid和geography(使用相同的列名)。

在此处输入图像描述

为什么?

我可以更改我的sys.columns查询以过滤掉那些伪列吗?

(我正在使用该查询来重新创建create table查询)。

t-sql spatial
  • 1 个回答
  • 23 Views
Martin Hope
Mike Forget
Asked: 2019-11-29 12:52:32 +0800 CST

MSSQL Geography STIntersects 在预期为 0 时返回 1

  • 6

我遇到了无法解释的 MSSQL 地理问题。假设我受到数学挑战,但似乎以下点不应与以下多边形相交:

DECLARE @t_point geography;  
DECLARE @t_polygon geography;
set @t_polygon = geography::STPolyFromText('POLYGON((1 1, 5 5, 5 0, 1 1))', 4326);
set @t_point = geography::Point(0, 0, 4326);


select
  @t_polygon.STAsText(), 
  @t_point.STAsText(),
  @t_point.STIntersects(@t_polygon), 
  @t_polygon.STIntersects(@t_point);

但是,当我执行此操作时,我得到以下结果:

POLYGON ((1 1, 5 5, 5 0, 1 1))  POINT (0 0) 1   1

最后两列都是 1,我期望 0。空间中 0,0 的点如何与不接触或不包含 0,0 的多边形相交?

-1, -1 与 100, 100 具有相同的行为。

即使我将点更改为完全不同空间中的多边形,MSSQL 也会说它们相交。

set @t_polygon = geography::STPolyFromText('POLYGON((10 10, 50 50, 50 10, 10 10))', 4326);
set @t_point = geography::STPolyFromText('POLYGON((1 1, 5 5, 5 0, 1 1))', 4326);

我也试过 STGeomFromText()。

我确定我一定做错了什么,但我无法想象那可能是什么。

sql-server spatial
  • 1 个回答
  • 364 Views
Martin Hope
Olaf Briese
Asked: 2019-10-24 03:41:35 +0800 CST

如何从 MySQL 中的点数据类型创建多边形?

  • 1

我有一张这样的桌子:

CREATE TABLE `aois` (
  `aois_id` int(11) NOT NULL DEFAULT '0',
  `WS_A` point DEFAULT NULL,
  `WS_B` point DEFAULT NULL,
  `WS_C` point DEFAULT NULL,
  `WS_D` point DEFAULT NULL,
  `DB_A` point DEFAULT NULL,
  `DB_B` point DEFAULT NULL,
  `DB_C` point DEFAULT NULL,
  `DB_D` point DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

现在我想从点创建一个多边形:

SELECT aois_id,
polygon((WS_A, WS_B, WS_C, WS_D, WS_A)) as geom
FROM aois;

但我总是收到错误信息:

Operand should contain 1 column(s)

(我在 Windows 10 上使用 MySQL 服务器版本 8.0.16,如果这很重要的话。)

谁能指出我正确的方向?

非常感谢!

mysql spatial
  • 1 个回答
  • 707 Views
Martin Hope
newbie
Asked: 2019-07-04 08:44:39 +0800 CST

Mysql 8 ST_GeomFromText 在函数 st_geomfromtext 中给出错误纬度超出范围。它必须在 [-90.000000, 90.000000] 范围内

  • 8

我正在mysql 8上尝试以下插入查询。

Insert Into fence Set       
            fenceName='aa',
            radius=2,                   
            fenceGeometry=ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326)

它在 mysql 5.7 上完美运行,但在 mysql 8 中我得到了这个error Latitude 102.189331 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].

根据一些建议,我也这样做了。

ALTER TABLE fence MODIFY fenceGeometry geometry NOT NULL SRID 4326;

但它给了我同样的结果。

spatial mysql-8.0
  • 2 个回答
  • 2869 Views
Martin Hope
Alex.Barylski
Asked: 2019-02-14 09:46:02 +0800 CST

SRID 4326 上的 ST_X 和 ST_Y 的经度和纬度顺序

  • 2

我有一个 MySQL 8.0.15,我正在试验地理空间定位功能。我已将 SRID 4326 应用于“loc”列。

除了原始 Point() 之外,文档中没有任何内容建议输入为“x,y”或“long,lat”,但如果我运行以下查询:

INSERT INTO organization 
(loc, spots, name, phone, website, account_id, category_id) 
VALUES 
(
  ST_PointFromText("POINT(-113.532000 54.733000)", 4326), 
  10,
  "Baptiste",
  " ",
  null,
  null,
  null
); 

SQL 错误 (3617):纬度 -113.532000 超出函数 st_pointfromtext 的范围。[必须在 -90 > +90 以内]

这很有意义,因为没有 113 度的纬度 - 但是当我交换纬度/经度参数时 - 一切正常!但是,当我查询纬度/经度时,结果是向后的。

SELECT 
   *, 

    ST_Y(loc) as lat,   
    ST_X(loc) as lng 

FROM 
  organization;

我对这些功能和坐标的工作方式有什么不明白的地方?

似乎 POINT() 实际上在输入时接受LAT、LON - 但是在查询时必须记住 Y 是纬度,而 X 是经度???

TIA

mysql spatial
  • 1 个回答
  • 2662 Views
Martin Hope
Evan Carroll
Asked: 2019-01-22 12:13:33 +0800 CST

类型特定的 WKT 构造函数的功能是否与 ST_GeomFromText 不同?

  • 0

从 MariaDB 上的文档,对于ST_LineStringFromText

LINESTRING使用其 WKT 表示和 SRID构造一个值。

ST_LineFromText(), ST_LineStringFromText(),ST_LineFromText()和ST_LineStringFromText()都是同义词。

不过,这在技术上似乎是不正确的,例如,我们在这里构造一个点和一个多边形,使用ST_LineStringFromText(),

WITH t(geom) AS ( VALUES
  (ST_LineStringFromText('POLYGON ((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))')),
  (ST_LineStringFromText('POINT( 0 0 )')),
  (ST_LineStringFromText('LINESTRING( 0 0, 1 1 )'))
)
SELECT ST_AsText(geom)
FROM t;

退货..

POLYGON((35 10,45 45,15 40,10 20,35 10),(20 30,35 35,30 20,20 30))
POINT(0 0)
LINESTRING(0 0,1 1)

Polygon 函数的文档令人困惑,

POLYGON使用其 WKT 表示和 SRID构造一个值。

ST_PolyFromText(), ST_PolygonFromText(),PolyFromText()和ST_PolygonFromText()都是同义词。

但是您可以替换ST_LineStringFromText为ST_PolyFromText,它们的工作方式相同。

MySQL 行为

对于 MySQL 8,您似乎在上述构造中遇到错误,

WKT 值是 . 中意外类型的POINT几何图形st_linestringfromtext。

spatial mariadb
  • 1 个回答
  • 217 Views
Martin Hope
Evan Carroll
Asked: 2019-01-21 23:06:48 +0800 CST

如何通过聚合 MariaDB 中的点 (ST_MakeLine) 来构建 LINESTRING?

  • 0

假设我有一张有 3 点的桌子,

CREATE TABLE foo ( id int PRIMARY KEY, geog point );
INSERT INTO foo (id, geog) VALUES
  ( 1, Point(0,0) ),
  ( 2, Point(1,1) ),
  ( 3, Point(2,2) );

我怎样才能LINESTRING用这三个不同行中的这三个点构造一个。由此产生的 WKT 应该是LINESTRING( 0 0, 1 1, 2 2 )?


PostGIS 使用名为ST_MakeLine

SELECT ST_MakeLine(geog)
FROM foo
ORDER BY id;
spatial mariadb
  • 1 个回答
  • 410 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve