我在研究空间日期时遇到了一个问题。我有一个包含列的表:对象id及其坐标(纬度和经度,数据类型是几何体)。我需要按照从西北到东南方向的坐标对这些数据进行排序。我该怎么做?我想我当然需要使用“orderby”和索引。但是哪一个和如何?
您可以使用ST_envelope
从整个数据集创建一个信封,并从中检索您想要作为参考的角落,例如右下角。使用此参考点,然后可以使用距离操作符对几何图形排序
演示:
db
CREATE TABLE t (gid int, geom geometry(point,4326));
INSERT INTO t VALUES
(6,'SRID=4326;POINT(-4.3675 54.2428)'),
(5,'SRID=4326;POINT(-4.5488 54.3591)'),
(1,'SRID=4326;POINT(-4.5405 54.2974)'),
(7,'SRID=4326;POINT(-4.3098 54.2973)'),
(4,'SRID=4326;POINT(-4.4952 54.2742)'),
(2,'SRID=4326;POINT(-4.4568 54.2790)'),
(3,'SRID=4326;POINT(-4.4156 54.2509)');
下面的
CTE
基于表t
中的所有点创建一个信封(请参见上图中的信封),检索右下角的值,并在外部查询中使用此参考点按距离排列记录。
WITH j AS (
SELECT
ST_SetSRID(
ST_MakePoint(
ST_XMax(ST_Envelope(ST_Union(geom))),
ST_YMin(ST_Envelope(ST_Union(geom)))),
4326) AS reference_point
FROM t
)
SELECT
t.gid,
ST_AsText(t.geom) AS geom,
ST_AsText(j.reference_point) AS reference_point,
t.geom <-> j.reference_point AS distance_to_ref_point
FROM j,t
ORDER BY t.geom <-> j.reference_point;
gid | geom | reference_point | distance_to_ref_point
-----+------------------------+------------------------+-----------------------
7 | POINT(-4.3098 54.2973) | POINT(-4.3098 54.2428) | 0.05449999999999733
6 | POINT(-4.3675 54.2428) | POINT(-4.3098 54.2428) | 0.05769999999999964
3 | POINT(-4.4156 54.2509) | POINT(-4.3098 54.2428) | 0.10610961313660537
2 | POINT(-4.4568 54.279) | POINT(-4.3098 54.2428) | 0.15139167744628546
4 | POINT(-4.4952 54.2742) | POINT(-4.3098 54.2428) | 0.18804020846616745
1 | POINT(-4.5405 54.2974) | POINT(-4.3098 54.2428) | 0.2370730899954694
5 | POINT(-4.5488 54.3591) | POINT(-4.3098 54.2428) | 0.2657944506568918
进一步阅读:
使用PostGIS计算距离
问题内容: 我从http://www.movable-type.co.uk/scripts/latlong.html实现了“轴承”公式。但这似乎非常不准确- 我怀疑我的实现中存在一些错误。您能帮我找到它吗?我的代码如下: 问题答案: 您将括号放在错误的位置。 您正在将度数添加到以弧度为单位的值,这将不起作用。将为您完成从弧度到度的转换, 然后 在获得度值后进行归一化。 你有: 但是您需要: 也请记
如果你有一个坐标系或地图(或者一个2D数组,如果你愿意的话),并且每个单元的编号从[0,0]到[m,n]。在给定起点和终点坐标的情况下,如何判断每一步要走的方向?如果不在网格的边界(北、南、西北等),可以向8个方向移动。所以没有上升或下降,只有左/右等。 目标是有一个“向右走”、“向左走一半”的序列。。。到达目的地时,要考虑自己一直在看哪个方向。例如,如果一个人正朝地图的左边看,并向前移动,那么他
径向轴专门用于雷达和极地面积图表类型。这些坐标轴覆盖图表区域,而不是位于其中一个边上。 Chart.js中默认包含一个径向轴。 linear
问题内容: 我在postgres中有一个排序问题,其中包含诸如版本之类的值。版本是字符变化的,其值如下所示(无序)。 我如何按照自然顺序排序,这样当我发行时就会给我 代替 问题答案: Postgres允许您按数组排序-本质上就是版本号所代表的含义。因此,您可以使用以下语法: 这是一个完整的示例: 甚至是示威。
所以我想在10x10坐标系中转换不同支点之间的三个点 想象我想要什么: 这是我的第一个坐标系 翻译成: 现在,这些点必须保持在不同系统之间的同一点上,因此只有这些点的坐标应该更改。首先,我想我应该把之前的原点添加到转换后的坐标中,这对A和B是有效的,但C是不同的,也许我使用了一个错误的公式或其他东西 请你帮帮我
我有一个代表半径(r)和另一个代表角度(θ)的值列表。我正在尝试制作一个极地图,其中北为0度,东为90度,依此类推。 列表中的角度与绘制的角度不对应。有人知道怎么解决吗?