Voir si lat / long des chutes à l'intérieur d'un polygone à l'aide de mysql
J'ai créé le tableau ci-dessous
CREATE TABLE geom (g GEOMETRY);
et ont introduit de nombreuses lignes, exemple ci-dessous:
INSERT INTO geom (g)
VALUES(PolygonFromText('POLYGON((
9.190586853 45.464518970,
9.190602686 45.463993916,
9.191572471 45.464001929,
9.191613325 45.463884676,
9.192136130 45.463880767,
9.192111509 45.464095594,
9.192427961 45.464117804,
9.192417811 45.464112862,
9.192509035 45.464225851,
9.192493139 45.464371079,
9.192448471 45.464439002,
9.192387444 45.464477861,
9.192051402 45.464483037,
9.192012814 45.464643592,
9.191640825 45.464647090,
9.191622331 45.464506215,
9.190586853 45.464518970))')
);
Maintenant je recherche toutes les données et retourner les entrées où un lat /long, j'ai des chutes en tout les polygones.
Comment cela peut-il être fait à l'aide de mysql? ou quelqu'un est-il au courant de tous les liens qui me pointer dans la bonne direction?
OriginalL'auteur | 2009-07-03
Vous devez vous connecter pour publier un commentaire.
MySQL comme de la v5.1 prend uniquement en charge les opérations sur le minimum de délimitation des rectangles (MBR). Il y a un "Contient" fonction qui permettrait de faire ce que vous avez besoin, il n'est pas entièrement mis en œuvre et tombe en arrière à l'aide MBRContains
De la pertinentes de la page de manuel
Ce que vous pourriez faire est de laisser MySQL vous donner un résultat approximatif basé sur le MBR, puis un post-traitement à effectuer un test plus précis. Sinon, passez à PostGIS!
(Mise à jour Mai 2012 - merci Mike Toews)
MySQL 5.6.1+ offre les fonctions qui utilisent des objets aux formes plutôt que de MBR
ST_
préfixé fonctions pour v5.6 qui ne leur bonne mise en œuvre, semblable à PostGIS.OriginalL'auteur Paul Dixon
Si vous ne pouvez pas modifier dbs à celui qui a spatiales les opérateurs mis en œuvre correctement, comme PostgreSQL de l'extension PostGIS
http://postgis.refractions.net/
, vous pouvez résoudre ce problème en utilisant une approche à deux volets.Abord, permettez-MySQL vous donner un cadre de la boîte de pré-filtrage des résultats de la boîte englobante (qu'est ce qu'il fait par défaut) à l'aide de leur coupe de l'opérateur (
http://dev.mysql.com/doc/refman/5.1/en/functions-that-test-spatial-relationships-between-geometries.html#function_intersects
).Si les requêtes sont lents, assurez-vous que vous avez un indice sur votre géométrie premier champ.
Puis hydrater la géométrie d'origine que vous avez utilisé dans votre requête dans une géométrie de l'objet de SIG de la géométrie de la bibliothèque comme GEOS (
http://trac.osgeo.org/geos/
) (C++ en fonction, bien qu'il ait également des liaisons pour les différents langages comme Python), Galbées (http://trac.gispython.org/lab/wiki/Shapely)
, OGR ( ou le Java Topologie de Suite (JTS)http://www.vividsolutions.com/jts/jtshome.htm
).Essai de chacune des géométries que vous revenez de votre résultat de la requête à l'aide de l'opérateur approprié comme dans ou coupe. L'une de ces bibliothèques vous donnera un résultat booléen.
Personnellement, je regarde les échantillons pour OGR car il a une grosse communauté qui est prêt à aider.
Ah oui, et désolé de mettre les liens comme ça... je suppose que depuis que je suis "nouveau", je ne peux que poster un lien (?)
OriginalL'auteur rburhum
La fonction donnée dans ce post sur le MySQL forums fonctionne parfaitement pour moi.
Ce n'est pas très rapide et vous devez vous assurer que le paramètre 'mp' est du même type que la colonne spatiale que vous utilisez (j'ai utilisé ogr2ogr pour importer un Ordnance Survey shapefile dans MySQL, j'ai donc dû changer de "MULTIPOLYGON" à "GÉOMÉTRIE")
pour ceux qui utilisent mysql version en dessous de 5,6 cela devrait aider
OriginalL'auteur Dan Herd
J'ai réécrit la fonction qui a été donné dans le post précédent par @danherd, donc il peut travailler avec de vrais multipolygons qui se composent de plus qu'un polygone. Pour ceux d'entre vous qui
toujours garder l'aide d'une vieille version de MySql, il devrait aider.
Ici, il est:
OriginalL'auteur user15