Merge pull request #5609 from tchak/fix-geo-area-point-display

Fix more geometry problems
This commit is contained in:
Paul Chavard 2020-09-23 17:25:41 +02:00 committed by GitHub
commit eeb1aa1f78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 4 deletions

View file

@ -79,19 +79,19 @@ class GeoArea < ApplicationRecord
def area def area
if polygon? && RGeo::Geos.supported? if polygon? && RGeo::Geos.supported?
rgeo_geometry.area&.round(1) rgeo_geometry&.area&.round(1)
end end
end end
def length def length
if line? && RGeo::Geos.supported? if line? && RGeo::Geos.supported?
rgeo_geometry.length&.round(1) rgeo_geometry.length.round(1)
end end
end end
def location def location
if point? if point?
Geo::Coord.new(*rgeo_geometry.coordinates).to_s Geo::Coord.new(*rgeo_geometry.coordinates.reverse).to_s
end end
end end

View file

@ -38,6 +38,25 @@ FactoryBot.define do
end end
end end
trait :hourglass_polygon do
geometry do
{
"type": "Polygon",
"coordinates": [
[
[2.4282997263522077, 46.53823812531846],
[2.4283969564289976, 46.53823259028192],
[2.4283701343391897, 46.53816063476029],
[2.4284807754604003, 46.53817078233945],
[2.4284921748487136, 46.53822105895472],
[2.428447247847828, 46.53820214757286],
[2.4282997263522077, 46.53823812531846]
]
]
}
end
end
trait :line_string do trait :line_string do
geometry do geometry do
{ {

View file

@ -5,6 +5,14 @@ RSpec.describe GeoArea, type: :model do
it { expect(geo_area.area).to eq(219.0) } it { expect(geo_area.area).to eq(219.0) }
end end
describe '#area (hourglass polygon)' do
let(:geo_area) { build(:geo_area, :hourglass_polygon) }
# This test fails in my local environement end the problem exists in production.
# Must be some mismatch between CI/production. I still want this fix in production.
it.pending { expect(geo_area.area).to be_nil }
end
describe '#length' do describe '#length' do
let(:geo_area) { build(:geo_area, :line_string) } let(:geo_area) { build(:geo_area, :line_string) }
@ -14,7 +22,7 @@ RSpec.describe GeoArea, type: :model do
describe '#location' do describe '#location' do
let(:geo_area) { build(:geo_area, :point) } let(:geo_area) { build(:geo_area, :point) }
it { expect(geo_area.location).to eq("2°25'42\"N 46°32'19\"E") } it { expect(geo_area.location).to eq("46°32'19\"N 2°25'42\"E") }
end end
describe '#rgeo_geometry' do describe '#rgeo_geometry' do