Rails 使用 PostGIS - LineString 不会超过 -90 度

Rails with PostGIS - LineString won't go past -90 degrees

我有一个简单的PostGIS数据库table如下:

    create_table :blocked_search_regions do |t|
      # use PostGIS
      t.line_string :path, geographic: true

      t.string :name

      t.timestamps null: false
    end

    # PostGIS index
    add_index :blocked_search_regions, :path, using: :gist

我可以通过 运行 创建一个 BlockedSearchRegion,例如:

linestring = "LINESTRING (48.0 -122.1, 47.74 -90.0, 47.52 -90.0, 47.35 -90.0)"
bsr = BlockedSearchRegion.create!(name: 'new region', path: linestring)

据我所知,LINESTRING 参数只是 LAT LON。这似乎大部分都有效......除非超过 -90 度。保存 BlockedSearchRegion 时,坐标 -122.1(或任何低于 -90 度的坐标)将自动转换为 -90.0

=> #<BlockedSearchRegion:
 path: #<RGeo::Geographic::SphericalLineStringImpl:0x2b004c8535c8 "LINESTRING (48.0 -90.0, 47.74 -90.0, 47.52 -90.0, 47.35 -90.0)">,
 name: "new region",
 created_at: Thu, 03 Jun 2021 16:12:54 UTC +00:00,
 updated_at: Thu, 03 Jun 2021 16:12:54 UTC +00:00>

如何输入超过 90 度的 lat/lon?

我感觉这与我的 table 专栏中的 geographic: true 标志有关。

在PostGIS中,坐标的顺序是经度在前,纬度在后。您的坐标已交换,因此无效。

附带说明一下,越界坐标会发生什么变化很大,范围从忽略问题、限制到适当的边界、绕地球一圈、从极点返回等等