Étant donné un ensemble de coordonnées, comment trouver les coordonnées des limites.
<== Figure 1
Compte tenu des coordonnées dans l'ensemble ci-dessus, comment puis-je obtenir les coordonnées sur la frontière rouge. La limite est le polygone qui est formé par les coordonnées d'entrée des sommets, de manière à maximiser la zone.
Je travaille sur une application qui recherche des propriétés dans un rayon de 'x' miles d'une ville . Ce que j'ai c'est:
- Coordonnées de toutes les propriétés.
- Un ensemble de coordonnées pour chaque ville (j'ai une coordonnée pour chaque zip. Et comme la plupart des villes ont plus d'un zip, chaque ville a un ensemble de coordonnées)
La raison pour laquelle je demande la superficie maximale est pour que je ne trouve pas de polygone comme celui ci-dessous:
<== Figure 2
Ce dont j'ai besoin, c'est de l' algorithme pour trouver l'ensemble de coordonnées de la frontière. Un algorithme qui me permettra de trouver des coordonnées de frontière pour la figure 1 .
la source
Réponses:
Il existe de nombreux algorithmes pour résoudre ce problème ( Wikipedia "Convex_hull_algorithms" ):
la source
1) Coque convexe dans GRASS GIS: http://grass.fbk.eu/grass64/manuals/html64_user/v.hull.html
2) Coque convexe dans les outils vectoriels Qgis (très facile à utiliser):
la source
Hawth's Tools for ArcGIS possède cette fonctionnalité . Plus un script pour ArcInfo 10.
Il existe également un outil de coque convexe dans QuantumGIS via le plugin ftools .
la source
Ce que vous voulez, c'est la coque convexe. Dans PostGIS, il existe une fonction (en fait GEOS) qui vous donne la coque convexe, ST_ConvexHull (géométrie) .
Sur wikipedia, il y a beaucoup d'informations sur les coques concaves.
la source
Si vous voulez un algorithme pour faire cela (plutôt que des packages qui peuvent le faire), je pense que vous auriez besoin de trianguler les données; ou définir fondamentalement une ligne de chaque point à chaque autre point. Ensuite, en commençant par (disons) le point avec la valeur Y la plus élevée, tracez un itinéraire autour de l'extérieur en suivant la ligne connectée avec le plus petit angle / relèvement extérieur.
Vous seriez en mesure d'accélérer le traçage en jetant d'abord les lignes qui se croisent. La limite externe n'aura pas d'intersections.
btw - FME le fera aussi avec les transformateurs ConvexHullAccumulator ou ConvexHullReplacer!
la source
Si vous êtes intéressé à regarder un algorithme existant implémenté dans du code, NetTopologySuite dispose d'un algorithme pour le faire
Voir ConvexHull.cs
Soit dit en passant NTS et un tas d'autres bibliothèques sont enveloppés dans un projet cool appelé DotSpatial, trouvé ici
la source