Postgres 地理跨越日期变更线,与多边形相交

问题描述 投票:0回答:1

我的postresql数据库中的地理对象与日期线相交,但postgres意味着该对象不与日期线相交。实际上,多边形的正方形要小得多。为什么会这样?

线路

select ST_GeographyFromText('LINESTRING(-175 0, 175 0)')

扔遍世界。但是,我想要从

(-175 0)
(175 0)
的小线。

如何创建与日期线相交的对象?

postgresql geography
1个回答
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
  1. 地球的周长约为
    40075km
    。该线的长度为
    1113194.9
    (以米为单位),因此大约为
    1113km
    。沿着赤道的 1 度经度是
    111.3km
    ,因此该线的长度是 10 度,这意味着它实际上是穿过日期变更线的较短路径。如果它像我上面显示的
    the_longer_way_around
    线一样以另一种方式运行,它将是 350 度长,
    38961.8km
  2. 如果你的线绕得更长,它不会与我在其起点和日期线之间制作的多边形相交,但
    st_intersects()
    报告它确实相交。
  3. 即使您翻转起点和终点,PostGIS 仍然假设它以较短的方式运行。

在 db<>fiddle 进行演示。

© www.soinside.com 2019 - 2024. All rights reserved.