我的postresql数据库中的地理对象与日期线相交,但postgres意味着该对象不与日期线相交。实际上,多边形的正方形要小得多。为什么会这样?
线路
select ST_GeographyFromText('LINESTRING(-175 0, 175 0)')
扔遍世界。但是,我想要从
(-175 0)
到 (175 0)
的小线。
如何创建与日期线相交的对象?
它不会在世界范围内运行更远的距离,可能只是您的观看者以这种方式渲染它。您可以检查其长度以及与起点和 180 度子午线之间的交点:
select 1 as id
, st_length(ST_GeographyFromText('LINESTRING(-175 0, 175 0)'))
, st_length(ST_GeographyFromText('LINESTRING( 175 0,-175 0)')) as flipped_ends_length
, st_length(st_shortestline( 'point(-175 0)'::geography
,'point( 175 0)'::geography)) as shortest
, st_length('linestring(-175 0,0 0,175 0)'::geography) as the_longer_way_around
, st_intersects( ST_GeographyFromText('LINESTRING(-175 0, 175 0)')
, 'polygon((-176 -4,-179 -4,
-179 4,-176 4,
-176 -4))'::geography);
id | st_length | 翻转结束长度 | 最短 | 更长的路 | st_相交 |
---|---|---|---|---|---|
1 | 1113194.907932742 | 1113194.907932742 | 1113194.907932742 | 38961821.777645744 | t |
40075km
。该线的长度为 1113194.9
(以米为单位),因此大约为 1113km
。沿着赤道的 1 度经度是 111.3km
,因此该线的长度是 10 度,这意味着它实际上是穿过日期变更线的较短路径。如果它像我上面显示的 the_longer_way_around
线一样以另一种方式运行,它将是 350 度长,38961.8km
。st_intersects()
报告它确实相交。在 db<>fiddle 进行演示。