Suite

Comment ST_Split les fonctionnalités d'une table par les fonctionnalités d'une autre ?

Comment ST_Split les fonctionnalités d'une table par les fonctionnalités d'une autre ?


J'ai besoin de diviser les polygones (couche 'pol') par des chaînes de lignes fermées et non fermées (couche 'lin').

Malheureusement, je n'obtiens pas de résultats corrects en exécutant la requête suivante.

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 ) comme g;

Dans mon exemple, ST_Split devrait créer six polygones (couche 'splitted_pol').

Est-ce que quelqu'un sait comment utiliser ST_Split avec QGIS/PostGIS ?


Vous pouvez créer une fonction comme ceci :

créer ou remplacer la fonction ST_MultiSplit(geom Geometry, blades Geometry) RETOURNE Geometry AS $$ COMMENCER POUR i IN 1… ST_NumGeometries(blades) LOOP geom = ST_Split(geom, ST_GeometryN(blades, i)); FIN DE BOUCLE ; RETOUR geom; FINIR; $$ LANGUE plpgsql;

Ensuite, utilisez-le comme :

Sélectionnez ST_AsEWKT(a.geom) à partir de ( sélectionnez (ST_Dump(ST_MultiSplit(pol.geom, ( sélectionnez ST_MemUnion(lin.geom) à partir de lin où ST_Intersects(pol.geom, lin.geom) = 't') ))).geom geom de pol) a;

Cela donne les six enregistrements que vous attendez. Vous voudrez peut-être ajouter une vérification/gestion des erreurs et je ne suis pas sûr de l'évolutivité.


J'utilise postGIS sql pour diviser l'entité par ligne en JAVA et mon code a fonctionné. mon code est :

public List splitGeometry(String geom1, String geom2) {

Lister result=new ArrayList() ; try { Statement s = connection.createStatement(); Chaîne 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(); } renvoie le résultat ; }

J'espère vous aider.


Voir la vidéo: Déterminer lexpression générale dune suite arithmétique - Première