Bir tablodaki özellikleri başka bir tablodaki ST_Split nasıl?


9

Çokgenler (katman 'pol') hem kapalı hem de kapalı olmayan linestrings (katman 'lin') tarafından bölmek gerekir.

resim açıklamasını buraya girin resim açıklamasını buraya girin

Ne yazık ki aşağıdaki sorguyu çalıştıran düzgün sonuçlar alamıyorum.

CREATE VIEW splitted_pol AS
SELECT 
    g.path[1] as gid, 
    g.geom::geometry(polygon, SRID) as geom 
FROM
    (SELECT 
    (ST_Dump(ST_Split(pol.geom, lin.geom))).* 
    FROM pol, lin
) as g;

Örneğimde ST_Split altı çokgen oluşturmalıdır ('splitted_pol' katmanı).

resim açıklamasını buraya girin resim açıklamasını buraya girin ST_Split'in QGIS / PostGIS ile nasıl kullanılacağını bilen var mı?


Geoms özyinelemeli beslemek gerekir ST_Split.
Jakub Kania

Lütfen SQL sorgusunda bana yardımcı olabilir misiniz? PostGIS'te yeniyim.
Ay Denizi

Giriş katmanlarınız tam olarak ne içeriyor? Kırmızı bir kare ve bir üçgen çokgen ile 'pol' katmanı ve sadece bir koyu mavi dikey çizgi ile 'lin' katmanı görüyorum. Ve neden 6 çokgen bekliyorsunuz? "Sınır" ı dikkate almam.
Stefan

Katmanları göstermek için bir ekran görüntüsü ekledim.
Ay Denizi

Giriş geometrilerini ekleme şansınız var mı?
John Powell

Yanıtlar:


4

Aşağıdaki gibi bir işlev yaratabilirsiniz:

create or replace function ST_MultiSplit(geom Geometry, blades Geometry) RETURNS Geometry AS $$
BEGIN
  FOR i IN 1..ST_NumGeometries(blades)
     LOOP
        geom = ST_Split(geom, ST_GeometryN(blades, i));
     END LOOP;
  RETURN geom;
END;
$$ LANGUAGE plpgsql;

Sonra şöyle kullanın:

Select ST_AsEWKT(a.geom) from (
   select (ST_Dump(ST_MultiSplit(pol.geom, (
      select ST_MemUnion(lin.geom) from lin where ST_Intersects(pol.geom, lin.geom) = 't')
 ))).geom geom from pol) a;

Bu, beklediğiniz altı kaydı verir. Bazı hata denetimi / işleme eklemek isteyebilirsiniz ve ölçeklenebilirlik konusunda emin değilim.


4

JAVA satır satır özelliği bölmek için postGIS sql kullanıyorum ve benim kod çalıştı. kodum:

public List splitGeometry (Dize geom1, Dize geom2) {

    List<String> result=new ArrayList<String>() ;
    try {

        Statement s = connection.createStatement();
        String sql_stat = null;
        sql_stat = "select st_astext (a.geom)from (select ( st_dump(p_geom)).geom as geom FROM (SELECT  st_split(ST_GeomFromEWKT('"+geom1+"') ,ST_GeomFromEWKT('"+geom2+"'))AS p_geom) AS b) AS a;";
        System.out.println(sql_stat);
        ResultSet rs=  s.executeQuery(sql_stat);
        while (rs.next()){
            result.add(rs.getString(1)) ;
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return result ;
}

Umarım yardımcı olurum.


Yardımınız için teşekkürler, ancak QGIS ile JAVA arasında nasıl bağlantı kuracağımı bilmediğim için yalnızca PostGIS çözümü bulmaya çalışıyorum.
Lunar Sea

QGIS C ++ ile yazılmıştır ve Python bağlamaları vardır. Böylece bu dilleri kullanarak kendi uygulamalarınızı geliştirebilirsiniz. Java kullanamazsınız. PostGIS yerine kullanabilirsiniz.
Samane

Herhangi bir C ++ / Python uygulaması olmadan PostGIS kullanarak özellikleri satırlayarak çokgen özelliklerini bölmenin bir yolu var mı? Hiçbir programlama deneyimim yok.
Ay Denizi

C ++ ve Python'a ihtiyaç duymadan PostGIS ve Java kullanırsınız. Geotools'u Java'da da kullanabilirsiniz.
Samane
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.