Sélectionnez le cadre de sélection à l’aide de postGIS?
36
Je souhaite créer une requête pour sélectionner tous les moyens et leurs nœuds existants dans un cadre de sélection à l'aide de postGIS. La boîte englobante doit inclure tous les détails sous forme de commande "--bounding-box" par osmose.
Merci. la fonction ST_MakeEnvelope nécessite un paramètre supplémentaire, srid. Je ne sais pas quoi mettre là .. aucune idée?
Uriel
1
On dirait que vous utilisez PostGIS 1.5, qui nécessite ce paramètre. Je pense que SRID est ignoré, donc toute valeur peut produire les mêmes résultats. Si vous avez des données lat / long, utilisez généralement un SRID de 4326.
Mike T
1
La plupart des outils actuels vous permettent de choisir le SRID pour les données OSM lorsque vous le chargez. Le SRID OSM par défaut est 3857 (mercator sphérique). Le SRID par défaut pour la plupart des données lat / lon est SRID 4326 (Lat / Lon AKA WGS84). Si vous chargez les données avec le SRID 3857, par exemple, vous devrez effectuer une conversion de LAT / LON WGS84 en 3857: ST_Transform (ST_MakeEnvelope (LON1, LAT1, LON2, LAT2, 4326), 3857). Quelques outils (comme imposm3) actuellement uniquement en charge SRID 3857
Justin Swanhart
Notez que l'opérateur && ne transforme pas les SRID pour vous. Assurez-vous que l'enveloppe que vous créez se trouve dans le même SRID que la géométrie de test, sinon transformez-la vous-même. trac.osgeo.org/postgis/ticket/2320
Nelson
1
&& est plus lent que l'ordinateur avec ST_Intersects
caiohamamura
8
Je pense que cela ressemblera à ceci: Le cadre de sélection dans PostGIS est créé par
La requête utilisera ST_Intersection avec une sous-requête.
SELECT bbox_nodes.id, bbox_nodes.tag, nodes_geom
FROM (SELECT nodes.id, nodes.tag,
ST_Intersection(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))',<srid>)).geom AS nodes_geom
FROM nodes
WHERE ST_Intersects(nodes.the_geom,
ST_GeomFromText('POLYGON((ulx uly, urx ury, llx llr, lrx lry, ulx uly))',<srid>)) AS bbox_nodes
WHERE ST_Dimension(bbox_nodes.nodes_geom)=0;
J'ai plus ou moins pris cela dans les pages d'aide de PostGIS
Une deuxième requête, sur la table des chemins, conçue de la même manière que ci-dessus (mais avec ST_Dimension () = 1) devrait donner les chemins.
Salut merci! qu'est-ce que le srid? que dois-je insérer dans <srid>? et ".geom" (ligne 4) il semble être invalide, il devrait être là?
Uriel
Désolé, j'ai raté votre commentaire de la semaine dernière. Le srid est le code du système de référence de coordonnées. Soit 2039 pour Israël. L'addition .geom extrait la partie géométrique d'une "GeometryCollection. Vous avez peut-être raison de dire que ce n'est pas obligatoire ici.
Micha
5
il y a un sujet ici qui ressemble à votre question ici ...
ST_Intersection - (T) Retourne une géométrie qui représente la partie partagée de geomA et geomB. L'implémentation géographique effectue une transformation en géométrie pour effectuer l'intersection, puis redevient WGS84.
1.you peut également obtenir quelques informations ici sur la géométrie Constructing Fonctions.
SELECT b.the_geom As bgeom, p.the_geom As pgeom,
ST_Intersection(b.the_geom, p.the_geom)As intersect_bp
FROM buildings b INNER JOIN parcels p ON ST_Intersection(b,p)
WHERE ST_Overlaps(b.the_geom, p.the_geom)
LIMIT 1;
Les paires de coordonnées pour le POLYGONdoivent suivre un ordre dans le sens horaire (ou anti-horaire): en haut à gauche, en haut à droite, en bas à droite, en bas à gauche, en haut à gauche.
Donc, dans le sens des aiguilles d'une montre, l'appel de fonction devrait être:
Je pense que cela ressemblera à ceci: Le cadre de sélection dans PostGIS est créé par
La requête utilisera ST_Intersection avec une sous-requête.
J'ai plus ou moins pris cela dans les pages d'aide de PostGIS
Une deuxième requête, sur la table des chemins, conçue de la même manière que ci-dessus (mais avec ST_Dimension () = 1) devrait donner les chemins.
HTH, Micha
la source
il y a un sujet ici qui ressemble à votre question ici ...
1.you peut également obtenir quelques informations ici sur la géométrie Constructing Fonctions.
Informations 2.Another ici à propos Intersecte Intersection: PostGIS - ST_Intersects, ST_Intersection ...
J'espère que ça t'aide...
la source
Ceci est un commentaire sur le code de @ Micha.
Les paires de coordonnées pour le
POLYGON
doivent suivre un ordre dans le sens horaire (ou anti-horaire): en haut à gauche, en haut à droite, en bas à droite, en bas à gauche, en haut à gauche.Donc, dans le sens des aiguilles d'une montre, l'appel de fonction devrait être:
Ou dans le sens antihoraire:
la source