PostGIS'te Kendiliğinden Kesişen Halkalar


10

Bu, önceki sorudan bir takip . Yeni bir PostGIS kullanıcısı olduğumu göreceksiniz.

Verilerimdeki topolojinin geçerliliğine baktım ve toprak örtüsü (çokgen) veri kümesinde yaklaşık 1700 topoloji sorunu buldum. Bunların hepsi "Ring Self_intersection".

Paul Ramsay'ın bu sunumdaki bazı yararlı bilgileri kullanarak (sayfa 20), verilerimi buna göre arabelleğe almaya çalıştım:

UPDATE schema.data SET the_geom = buffer (the_geom, 0.0) NEREDE geçersiz (the_geom) = yanlış ve geçersiz (buffer (the_geom, 0.0)) = true;

Ama cevabı alıyorum:

DİKKAT: Halka veya kesişme noktasında veya yakınında (düzenlenmiş) HATA: "sgm_buffer" ilişkisi için yeni satır, "enforce_geotype_the_geom" kontrol sınırlamasını ihlal ediyor

********** Hata **********

HATA: "sgm_buffer" ilişkisi için yeni satır, "enforce_geotype_the_geom" denetim kısıtlamasını ihlal ediyor SQL durumu: 23514

Ayrıca sadece denedim:

GÜNCELLEME csgn.sgm_buffer SET the_geom = buffer (the_geom, 0.0)

ve Al:

HATA: "sgm_buffer" ilişkisi için yeni satır, "enforce_geotype_the_geom" kontrol kısıtlamasını ihlal ediyor

********** Hata **********

HATA: "sgm_buffer" ilişkisi için yeni satır, "enforce_geotype_the_geom" denetim kısıtlamasını ihlal ediyor SQL durumu: 23514

Öyleyse bu tampon tekniğinin sorunlarım üzerinde çalışmayacağını düşünüyor muyum? Yoksa yanlış bir şey mi yapıyorum?

Bay Ramsay daha sonra "8 rakamı" çokgenleri ele almak için ek bir teknik önermek üzere aynı belgede devam etmektedir. Tamamen nasıl kod tam olarak (ya da ne yaptığını ve bana yardımcı olup olmadığını) yazmak nasıl anlamıyorum:

ST_BuildArea SEÇİN (ST_Union ('KÜÇÜK BOŞ', ST_ExteriorRing ('POLYGON ((...))'

Peki .... kimse yardım edebilir mi? Bu, PostGIS'teki sıkı zaman çizelgelerim ve sınırlı becerilerimle gerçek bir kabus olduğunu kanıtlıyor.


1
"sgm_buffer limit 1'den geometry_type (the_geom) seç" ne döndürür? Ayrıca, diğer soruda belirtilen 40 saatlik çalışma süresiyle ilgili olarak, tablonuzda tanımlanmış uzamsal dizinler var mı?
diciu

ST_Multi()Tüm çokgenleri MULTIPOLYGONs olmaya zorlamanız gerekebilir (bu bir varsayımdır)
Mike T

Yorumlar için teşekkürler - diciu Ben dizinleri olduğunu düşünüyorum , onlar pgAdminIII görünür gibi görünüyor, ama belki onları yenilemek gerekir? Sorguyu hızlandırmak için çözümler bulmak ile yapabilirim - Çalıştırmak için makul bir zaman ne olacağını bilmiyorum? Landcover yaklaşık 20 milyon özelliğe sahiptir.
ESRIHelp

Yanıtlar:


12

Bence olan, kendiliğinden kesişen çokgenlerin arabelleğe alma sırasında MULTIPOLYGONS olması.

iki seçeneğiniz var:

1 "enforce_geotype_the_geom" kısıtlamasını kaldırın, bunu pgAdmin
2'de eskiyi güncellemek yerine yeni bir tabloya koyabilirsiniz. bu genellikle bir şeyler yapmanın iyi bir yoludur çünkü orijinal tablonuzda hiçbir şeyi değiştirmezsiniz. sorgu aşağıdaki gibi görünebilir:

CREATE TABLE new_buffered_table as
SELECT ST_Buffer(the_geom,0.0) as the_geom, gid FROM original_table;

tabii ki yeni tablonuza daha fazla alan getirmek isteyebilirsiniz.

önce tampon hile deneyin. İkinci yaklaşımda Paul, boş linestring'in neyi etkilediğini kendine söyleyebilir. Bu büyünün nasıl gerçekleştiğini hatırlamıyorum.


0

Birkaç ay önce de aynı sorunları yaşadım. Veritabanımda çok fazla kesişme noktası olan çokgenler vardı. Niklas Aven yöntemini kullandım, ama işe yaramadı. Başka yöntemler de kullandım.

Benim yöntemim kendi kesişimini çokgenlerimden kaldırmaktır. İşte kullanılan SQL sorgusu:

     -- Create the new polygons 

SELECT ST_GeomFromText(polygone) as geom

   from (

    SELECT st_astext(ST_MakePolygon(linear)) as polygone

        from (
              SELECT st_astext
                ((ST_dump
                   (st_boundary
                      (ST_MakeValid
                     (ST_Transform
                        (ST_SETSRID
                           (geometry,4326),32631))))).geom) 
                          as linear from tables_name)
        as query2)

  as query1

where ST_area(polygone) > 1

Çokgenin alanını ve kendiliğinden kesişmeyi hesapladım ve sadece> 1 alanı olan çokgenleri koruyacağım 1. Tolerans budur çünkü kendiliğinden kesişme alanı çok küçüktür. Ayrıca, derece cinsinden verileriniz varsa SRID'nin metreye dönüştürülmesinin de önemli olduğunu unutmayın.

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.