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中,坐标的顺序是经度在前,纬度在后。您的坐标已交换,因此无效。
附带说明一下,越界坐标会发生什么变化很大,范围从忽略问题、限制到适当的边界、绕地球一圈、从极点返回等等
我有一个简单的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中,坐标的顺序是经度在前,纬度在后。您的坐标已交换,因此无效。
附带说明一下,越界坐标会发生什么变化很大,范围从忽略问题、限制到适当的边界、绕地球一圈、从极点返回等等