Geçersiz geometri hayvanat bahçesi


9

Çoğu zaman geçersiz geometrilerden kaynaklanan tuhaf hatalarla mücadele etmek için saatler harcadım . Semptomlar aşağıdakiler dahil olmak üzere büyük ölçüde değişir:

  • Veritabanı yavaşlamaları
  • Hatalı \ Boş sorgu sonuçları
  • Hata ve uyarılarla aşırı yüklenmiş günlük dosyaları
  • Geometrik operatörlerle tutarsız sonuç (örn. Kavşak)

Buradaki herkesin verilerini temizlemesine yardımcı olmak için geçersiz geometrilerin türlerini kategorize etmek istiyorum.

Lütfen en sevdiğiniz geçersiz geometri türüyle yanıtlayın (her cevap için bir tür). Ekran görüntüleri, açıklamalar ve çözümler açıktır - ancak cevabınızı kısa tutmaya çalışın.

Yanıtlar:



3

Sıfır uzunluklu segmentler

Misal:

SELECT geomFromEWKT('LINESTRING(1 1, 1 1)');

                                    geomfromewkt                                    
------------------------------------------------------------------------------------
 0102000000020000000000000000000840000000000000104000000000000008400000000000001040

Sorunlar: Sıfır uzunluk segmentinin saklanması uzunluk oranlarını (sıfıra bölme) hesaplarken veya azimutları ve trigonometrik fonksiyonları hesaplamaya çalışırken hatalara neden olabilir.

Tespit: PostGIS'de, sıfır uzunluklu segmentler kullanılarak tespit edilebilir isValid().

Çözümler: Sıfır uzunluklu segmentleri nokta olarak tutmaya çalışın.


3

Kendiliğinden Kesen Çokgenler

resim açıklamasını buraya girin

Misal:

SELECT isValid(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
NOTICE:  Self-intersection at or near point 0.5 0.5
 isvalid 
---------
 f
(1 row)

Sorunlar: Yanlış hesaplamalar, Örneğin area():

SELECT area(geomFromEWKT('POLYGON((0 0, 1 1, 1 0, 0 1, 0 0))'));
 area 
------
    0
(1 row)

Bu, çağrı işlevleri ile sıfır bölme hatalarına neden olabilir.

Algılama: PostGIS'te, kesişen segmentler kullanılarak tespit edilebilir isValid().

Çözüm: Dönüştürme MULTIPOLYGON(açıklamaya bakın).


Aynı şekil geçerli:MULTIPOLYGON(((0 0, 0 1, 0.5 0.5, 0 0)),((1 1, 1 0, 0.5 0.5, 1 1)))
Mike T

@Mike Toews: Doğru, MULTIPOLYGON'a dönüştürmek iyi bir çözümdür.
Adam Matan
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.