Spatialite kopyalarını kaldır


9

Puanları olan bir Spatialite veritabanı var. Zaman zaman noktalar eklenir. Koordinatlara dayalı kopyaları kaldırmanın en kolay yolu nedir?

Yanıtlar:


7

Tabloya otomatik olarak katılmak, yinelenen satırları bulmanıza olanak tanır. Böyle bir şey işe yarayacak:

DELETE t1
FROM mytable t1, mytable t2
WHERE t1.the_geom = t2.the_geom

eğer puan:

DELETE t1
FROM mytable t1, mytable t2
WHERE t1.x = t2.x
AND t1.y > t2.y

(test edilmedi .....)


2
Beni doğru yöne götüren bir teşekkürler, bunu şu şekilde çözdüm: mytable2'DEN SİL NEREDE geom IN (mytable1'den geom seç);
johannes

8

Bence en kolay, kopyayı asla içeri almamaktır. Geometri alanında benzersiz bir kısıtlama eklemek. Bunun spatiallitte nasıl çalışacağını bilmiyorum ama postgis'te constrint, puanlar durumunda istenen etkiyi azaltacak sınırlama kutularını karşılaştırır.

kopyalardan hangisinin kaldırılacağı önemli değilse, farklı geometrileri seçen bir alt sorguda bulunmayan kimliğe sahip tüm satırları silen bir sorgu oluşturabilirsiniz. burada aynı, noktalarla güvenlidir, ancak diğer tiplerle değil, çünkü sadece bbox gerçek geometriyle karşılaştırılamaz (postgis ile aynı şekilde çalışıyorsa).

/ Nicklas


Cevabınız için teşekkürler, kısıtlı fikri seviyorum.
johannes


0

Benim durumumda en etkili yol, katmandan mekansal indeksi kullanmaktır. Bu sorgu ile, çakışan her özellik için sadece 1 geometri tutmak. Testi Linestring'e dönüştürülen bir TIN ile yaptım.

   delete from tin_line_sp where ogc_fid not in ( 

   select min(s1.rowid) as id_to_keep from
   idx_tin_line_sp_geometry as s1,
   idx_tin_line_sp_geometry as s2

   where 
       s1.xmin = s2.xmin and 
       s1.xmax = s2.xmax and 
       s1.ymin = s2.ymin and 
       s1.ymax = s2.ymax

   group by s1.xmin,s1.xmax,s1.ymin,s1.ymax)

Doğru uzamsal indeksleri anlamak için, uzamsal indeksi çokgenlere dönüştürmek için iki sorgu.

    create table tin_line_sp_representation as 
    select PolygonFromText('POLYGON(('||
    xmin || ' ' || ymin || ',' ||
    xmax || ' ' || ymin || ',' || 
    xmax || ' ' || ymax || ',' || 
    xmin || ' ' || ymax || ',' || 
    xmin || ' ' || ymin || '))',25832) as geometry
    from idx_tin_line_sp_geometry;

Başarılı olduğunuzda, en sevdiğiniz görüntüleyiciyi görselleştirmek için geometri sütununu kurtarın:

    select RecoverGeometryColumn( 'tin_line_sp_representation','geometry', 25832 , 'POLYGON', 2 )
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.