Рельсы с PostGIS — построением линий не будут превышать -90 градусов

#ruby-on-rails #postgresql #gis #postgis #latitude-longitude

Вопрос:

У меня есть простая таблица базы данных PostGIS, которая выглядит следующим образом:

     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 градусов. Координата -122.1 (или что-либо ниже -90 градусов) будет автоматически преобразована в -90.0 при BlockedSearchRegion сохранении:

 => #<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>
 

Как мне ввести lat/lon за пределами 90 градусов?

У меня такое чувство, что это как-то связано с geographic: true флагом на моей колонке таблицы.

Ответ №1:

В PostGIS порядок координат-сначала долгота, затем широта. Ваши координаты поменялись местами и, следовательно, недействительны.

Кстати, то, что происходит с координатами за пределами границ, сильно различается и может варьироваться от игнорирования проблемы, ограничения правильными границами, обхода земного шара, возвращения с полюса и т. Д

Комментарии:

1. Один из способов сохранить их прямыми (в любом случае, это хорошо сработало для меня). Долгота измеряется с Востока на Запад и соответствует координате x в декартовой плоскости. Широта измеряется к северу/югу от экватора и соответствует координате y в декартовой плоскости.