Veuillez vous référer à l'exemple et à l'image correspondante.
Je voudrais atteindre les objectifs suivants: fournir deux emplacements (lat / lng), qui sont présentés ci - dessous en A et B . À partir de cela, une ligne virtuelle serait tracée, puis la distance entre cette ligne et C serait calculée (dans n'importe quelle mesure).
J'ai atteint cet objectif actuellement dans Google Maps API v3, mais je voudrais également pouvoir effectuer cela en coulisses dans la langue de mon choix. Tous les conseils / idées seraient grandement appréciés!
geolocation
mathematics
Prisonnier
la source
la source
Réponses:
La longueur la plus courte est la distance dont vous avez besoin, sauf erreur de ma part?
la source
None
quand une solution légitime existe. Le problème est que le dernier conditionnel suppose X1 <X2 et Y1 <Y2, ce qui ne peut pas toujours être assuré. Un meilleur test d'interdépendance est nécessaire.Peut-être que je rends les choses trop compliquées, mais ce que vous voulez, c'est la distance d'un point à une ligne. C'est la distance d'un point le long de AB qui relie AB à C avec une ligne orthogonale à AB. Ce vecteur perpendiculaire à AB est donné par
(J'ai utilisé les crochets pour définir un vecteur ou un tableau à deux éléments). La distance entre C [xp, yp] et le point A est
La distance entre la ligne et C n'est que la projection de u sur v. Si nous supposons que mod (v) = 1 (il suffit de le normaliser), alors
La seule complication est que vous voulez probablement vous assurer que vos coordonnées ne sont pas des paires lat / log WGS84, mais projetées (ou utilisez des coordonnées géodésiques). Vous pouvez utiliser OGR ou Proj4 pour cela.
la source
Étant un peu opposé à toutes ces mathématiques aussi, j'y viendrais sous un angle différent. Je voudrais en faire une ligne «réelle» plutôt qu'une ligne virtuelle, puis utiliser les outils existants.
Si A et B partagent un attribut, vous pouvez les connecter en traçant une ligne (Kosmo GIS dispose d'un outil qui créera des lignes à partir de points, et je pense qu'il existe également un plugin QGIS pour cela). Une fois que vous avez les lignes, une fonction «proche» sur la couche de points «C» vous donnera la distance à la ligne. Laissez le logiciel gérer les mathématiques pour vous!
la source
Si vous utilisiez Java sur Android, sa seule ligne avec la fonction de bibliothèque
distanceToLine:
Calcule la distance sur la sphère entre le point p et le segment de ligne du début à la fin.
Paramètres: p - le point à mesurer
start - le début du segment de ligne
end - la fin du segment de ligne
Renvoie: la distance en mètres (en supposant la terre sphérique)
Ajoutez simplement une bibliothèque à votre
la source