Comment puis-je trouver le point le plus éloigné d'un ensemble de points existants?

17

J'ai un ensemble de points en tant que fichier de formes et je veux trouver (les coordonnées) d'un nouveau point qui aura la distance la plus longue possible de chacun des points existants. Est-ce possible? Si oui, existe-t-il un exemple de code VB? Merci Demetris

Demetris
la source
Voulez-vous dire que vous voulez un nouveau point pour chaque point déjà existant, ou un point qui est en quelque sorte "le plus éloigné" de chacun d'eux? Et par plus loin, voulez-vous dire "de l'autre côté du globe"? Si tel est le cas, vous pouvez simplement multiplier la latitude par -1 et ajouter 180 à la longitude (soustraire 360 ​​si la valeur résultante est> 180) si vous les avez en degrés décimaux.
nmpeterson
Je pense que la question intéressante serait: étant donné les points existants dispersés à travers le globe, trouver un nouveau point sur le globe le plus éloigné de tous les points existants.
Kirk Kuykendall
Ce serait, en fait, le point à la fin d'un triangle isocèle, où la distance n'est limitée que par la distance que vous souhaitez parcourir. Si j'ai bien lu la question, vous voulez que le point soit le plus éloigné des deux? Également?
Hairy
1
Oh! Mon message a créé une discussion et du matériel fantastiques! NMpeterson: Tout d'abord, je dois dire que mes points sont dans une petite zone plate; donc pas besoin de calculs de globe. Je recherche le deuxième problème soulevé; c'est-à-dire un point qui est en quelque sorte "le plus éloigné" de tous les points existants. Alors, veuillez vous concentrer sur cela.
Demetris
Je me demande si un exemple de code VB est disponible comme demandé dans la question d'origine. Peut-être qu'un tel code est déjà évident compte tenu des réponses des experts. Mais en tant que débutant, j'espère commencer par recréer la solution aimablement fournie par whuber. À l'avance, je m'excuse de présenter cela comme une réponse plutôt qu'un commentaire.

Réponses:

12

La recommandation de Kirk Kuykendall de construire un diagramme sphérique de Voronoï (polygones de Thiessen) est bonne, mais pourrait avoir quelques problèmes techniques à résoudre. En attendant, comme alternative, on peut appliquer la solution raster standard comme décrit dans un autre thread . Utilisez des distances sphériques au lieu des distances euclidiennes.

Voici un exemple utilisant cinq points, donné ici comme (lat, lon):

 82.7051   -145.256
 60.3321     81.2881
-17.076     105.125
-38.792    -122.686
  0.000     180.000

Carte des distances

Cette carte de distance sphérique couvre le globe de -180 à 180 degrés de longitude horizontalement et de -90 à 90 degrés de latitude verticalement. Les points sont représentés par de gros points rouges. Les distances augmentent avec la luminosité. Les crêtes apparentes doivent être des portions de grands cercles. Le petit point noir proche (-15.3268, -2.04352) marque le point de distance maximum de 11.227 km. (Les distances ont été calculées dans le référentiel ellipsoïdal ITRF00.)

La résolution de cette grille est d'un degré. Pour obtenir une solution plus précise, on peut zoomer sur un tel point (et sur tout autre maximum local avec une valeur suffisamment proche du maximum global) et répéter le calcul sur une grille plus petite mais à plus haute résolution.

whuber
la source
beaucoup plus joli que les vecteurs. Je ne sais pas pourquoi je pensais que les rasters nécessitaient un modèle de terre plate.
Kirk Kuykendall
Joli, oui, mais inefficace. Ce serait bien de voir la solution de Voronoi sphérique à base vectorielle fonctionner.
whuber
@Whuber: Comment obtenir automatiquement les coordonnées du point noir? "
Demetris
@Demetris Une façon consiste à calculer la valeur maximale sur la grille, à sélectionner toutes les cellules égales à cette valeur et à utiliser les coordonnées du centre de cette cellule.
whuber
@Whuber: Merci beaucoup. C'est une bonne idée. Cependant, je dois découper le raster en sortie en fonction d'une classe d'entités (un polygone unique). Puis-je faire ceci?
Demetris
8

entrez la description de l'image ici

Je n'ai jamais essayé cela mais il semble que cela fonctionnerait:

Créez un diagramme voronoi 3D de la sphère. Ces polygones résultants seront à peu près centrés sur les points d'origine existants (source).

Parcourez chaque sommet résultant pour trouver celui qui est le plus éloigné de son point existant le plus proche. Ce point devrait être le point le plus éloigné du globe.

Kirk Kuykendall
la source
C'est une excellente idée (+1). Mais à quoi ressemble le diagramme sphérique de Voronoï lorsque tous les points se trouvent dans un hémisphère commun? Le code auquel vous vous référez l'obtient avec une coque convexe, mais il semble que cela ne fonctionnera pas.
whuber
hmm, oui, je suppose que même s'ils ne sont pas tous dans un hémisphère commun, il y aura un polygone qui n'aura pas de point de départ. Et si vous lui construisiez un point en utilisant le point antipodal du centroïde des coques convexes? Ensuite, en plus de faire une boucle à travers chaque sommet, ce point convexe-antipode serait examiné pour voir s'il est plus éloigné de ses voisins que la distance maximale des sommets.
Kirk Kuykendall
C'était ma pensée initiale, mais les points antipodaux créeront des polygones artefactuels. Pensez à ce qui se passerait dans votre illustration si l'antipode à chaque point était inclus, par exemple! Il existe probablement une solution de cette nature, mais il semble que ce ne soit pas simple.
whuber
1

Vous pouvez utiliser une fonction de distance pondérée en fonction des coûts pour identifier la distance de chaque cellule de votre raster par rapport à tous les autres points.

djq
la source
Quel coût utiliseriez-vous?
whuber
Si vous définissez le coût à une unité; vous pouvez identifier le point le plus éloigné en fonction de la distance.
djq
@whuber Bien que ce ne soit pas différent du calcul de l'approche de la distance euclidienne déjà mentionnée.
djq
C'est la distance euclidienne. En fait, ce n'est même pas ça: c'est une sorte bizarre de distance octogonale (les cercles sont en fait des octogones). Dans cette situation (distances des points uniquement, sans barrières), il est beaucoup plus précis et beaucoup plus rapide de calculer directement une distance euclidienne ou une grille de distance sphérique, plutôt que d'essayer d'exploiter CostDistance pour cela.
whuber
Je ne suis pas sûr que la fonction de distance pondérée en fonction des coûts aiderait, car j'ai besoin des coordonnées d'un seul point et j'ai un ensemble de points vectoriel existant, mais je vais essayer. Merci.
Demetris
1

Pour autant que je sache, cette analyse du " Pôle d'inaccessibilité " doit être effectuée de manière itérative.

Une approche raster itérative serait appropriée tant que vous regardez une petite zone avec une distorsion minimale de la projection. Pour chaque cellule, calculez la distance à tous les points, puis prenez la distance minimale. La cellule avec la valeur la plus élevée est le pôle. Pour ce faire, vous pouvez également utiliser la distance euclidienne dans Spatial Analyst.

Une approche vectorielle itérative est plus compliquée. Garcia-Castellanos et al 2007 décrivent une méthode itérative basée sur une terre sphérique. Il semble qu'ils aient rendu leur code C disponible en ligne . Je peux imaginer des façons de le faire dans Arc avec des tampons, mais ce serait toujours itératif et lent.

dmahr
la source
0

vous pouvez utiliser la distance de point (analyse) L'outil crée un tableau avec des distances entre deux ensembles de points. si le rayon de recherche par défaut est utilisé, les distances de tous les points d'entrée à tous les points proches sont calculées. Le tableau de sortie peut être assez volumineux. Par exemple, si les entités en entrée et proches ont chacune 1 000 points, la table en sortie peut contenir un million d'enregistrements.

salehamra
la source
Comment cela peut-il être appliqué à la recherche des coordonnées d'un nouveau point qui n'apparaît pas dans l'entrée? Vous avez peut-être mal lu la question?
whuber
0

Le point le plus éloigné de votre ensemble de points serait l'inverse du point le plus intérieur de votre ensemble. Par exemple, si votre point le plus intérieur de votre ensemble avait des coordonnées 49 degrés Nord et -144 degrés Est, alors le point réciproque et le point le plus éloigné auraient des coordonnées 49 degrés Sud et 36 degrés Ouest. Ce n'est pas tout à fait vrai car la Terre n'est pas parfaitement sphérique, plutôt géoïdale; par conséquent, l'exactitude de votre résultat dépend beaucoup des systèmes géographiques et de projection (orthographiques, orthorectifiés ...) que vous utilisez. Il pourrait être utile de trouver une réciproque pour l'ensemble entier (transférer un antipode pour un ensemble), puis d'effectuer une analyse de surface dans le terrain couvert par l'ensemble de points antipode, car le terrain peut très. Je suppose que votre question ne concerne aucun point sur les corps extraterrestres, tels que d'autres planètes ou lunes. Pardon, Je n'ai pas de code VB pour vous. 🙄

Yuriy Shevchuk
la source
Le point le plus éloigné de tous les autres points d'un ensemble serait le plus intérieur (celui qui est le plus éloigné de tous les points les plus extérieurs le long du bord), il serait toujours le plus proche de chaque point immédiatement à côté de lui. Il s'agit d'une analyse en grappes, pas amusante. Il est probablement préférable d'examiner les mêmes atomes de charge en physique.
Yuriy Shevchuk