Comment calculer la boîte englobante pour un lat/lng emplacement?
J'ai donné à un emplacement défini par la latitude et la longitude.
Maintenant, je veux calculer une zone de délimitation à l'intérieur par exemple, à 10 kilomètres de là.
La boîte englobante devrait être défini comme latmin, lngmin et latmax, lngmax.
J'ai besoin de ce truc pour utiliser le panoramio API.
Quelqu'un de connaître la formule de la façon de trouver ces points?
Edit: les Gars, je suis à la recherche d'une formule/fonction qui prend lat & de gnl en entrée et renvoie une boîte englobante que latmin & lngmin et latmax & latmin.
Mysql, php, c#, javascript est bien, mais aussi de pseudo devrait être correct.
Edit: je ne suis pas à la recherche d'une solution qui me montre la distance de 2 points
- Si vous utilisez une géodatabase quelque part, ils ont sûrement un calcul de la boîte englobante intégré. On pourrait même aller vérifier la source de PostGIS/GEOS, par exemple.
Vous devez vous connecter pour publier un commentaire.
Je suggère de rapprocher localement la surface de la Terre comme une sphère de rayon donné par l'ellipsoïde WGS84 à la même latitude. Je soupçonne que le calcul exact de latMin et latMax nécessiterait des fonctions elliptiques et ne céderait pas une augmentation sensible de la précision (WGS84 est elle-même une approximation).
Ma mise en œuvre suit (Il est écrit en Python, je ne l'ai pas testé):
EDIT: Le code suivant convertit (degrés, nombres premiers, secondes) à des degrés + fractions de degré, et vice-versa (pas testé):
J'ai écrit un article au sujet de trouver le cadre coordonnées:
http://JanMatuschek.de/LatitudeLongitudeBoundingCoordinates
L'article explique les formules et fournit également une implémentation de Java. (Il montre aussi pourquoi Federico est la formule pour le min/max longitude est inexacte.)
public override string ToString()
, c'est très mauvais pour remplacer une telle méthode globale dans le seul but de mieux pour ajouter une autre méthode, puis en substituant méthode standard, qui peut être utilisé dans d'autres parties de la demande, pas pour le sig exact...Ici, j'ai converti Federico A. Ramponi la réponse de C# pour les personnes intéressées:
J'ai écrit une fonction JavaScript qui renvoie les quatre coordonnées d'un carré de la boîte englobante, compte tenu d'une distance et d'une paire de coordonnées:
minLon = void 0;
etmaxLon = MAX_LON;
toujours ne fonctionne pas.centerPoint
argument est un tableau constitué de deux coordonnées. E. g.,getBoundingBox([42.2, 34.5], 50)
—void 0
est la CoffeeScript de sortie pour "undefined" et n'affectera pas les codes de la capacité à exécuter.degLat.degToRad
n'est pas une fonctionVous êtes à la recherche d'un ellipsoïde de formule.
Le meilleur endroit que j'ai trouvé pour commencer le codage est basé sur la Géo::Ellipsoïde de la bibliothèque du CPAN. Il vous donne un point de départ pour créer vos tests et de comparer vos résultats avec ceux de ses résultats. Je l'ai utilisé comme base pour une bibliothèque semblable pour PHP à mon ancien employeur.
Geo::Ellipsoïde
Prendre un coup d'oeil à la
location
méthode. Appel deux fois et vous avez votre bbox.Vous ne publiez pas ce que la langue que vous utilisez. Il y a peut-être déjà un géocodage bibliothèque disponible pour vous.
Oh, et si vous n'avez pas pensé à elle maintenant, Google maps utilise l'ellipsoïde WGS84.
Depuis que j'ai besoin d'une estimation très approximative, de manière à filtrer certaines inutile documents dans un elasticsearch requête, j'ai employé la formule suivante:
N = kms formulaire requis l'emplacement donné. Pour votre cas N=10
Pas précis, mais à portée de main.
J'ai adapté un script PHP que j'ai trouvé pour faire juste cela. Vous pouvez l'utiliser pour trouver les coins d'une zone autour d'un point (20 km). Mon exemple est pour l'API Google Maps:
http://www.richardpeacock.com/blog/2011/11/draw-box-around-coordinate-google-maps-based-miles-or-kilometers
Ici est une simple mise en œuvre à l'aide de javascript qui est basé sur la conversion de degré de latitude pour kms où
1 degree latitude ~ 111.2 km
.Je suis le calcul des limites de la carte à partir d'une latitude et une longitude à 10 km de largeur.
Illustration de @Jan Philip Matuschek excellente explication.(Veuillez jusqu'-vote de sa réponse, de ce pas, je suis en ajoutant ce que j'ai pris un peu de temps dans la compréhension de l'original de la réplique)
La boîte englobante de la technique de l'optimisation de trouver des voisins les plus proches en aurait besoin pour tirer le minimum et le maximum de latitude,de longitude paires, pour un point P à la distance d . Tous les points qui tombent en dehors de ces sont certainement à une distance supérieure à d du point.
Une chose à noter ici est le calcul de la latitude d'intersection comme le souligne Jan Philip Matuschek explication. La latitude d'intersection n'est pas à la latitude du point P, mais légèrement décalé par rapport à elle. C'est souvent oubliée, mais une partie importante dans la détermination de la corriger minimum et maximum de délimitation de la longitude du point P pour la distance d.Ceci est également utile lors de la vérification.
La haversine distance entre (latitude d'intersection,la longitude haut) à (latitude,longitude) de P est égale à la distance d.
Python gist ici https://gist.github.com/alexcpn/f95ae83a7ee0293a5225
Je travaillais sur la boîte englobante problème comme une question de côté à la recherche de tous les points dans les SrcRad rayon de statique LAT, LONG point. Il y a eu quelques calculs qui utilisent
pour calculer la longitude de limites, mais j'ai trouvé ceci pour ne pas donner toutes les réponses nécessaires. Parce que ce que vous voulez vraiment, c'est
Je sais, je sais, la réponse doit être la même, mais j'ai trouvé que ce n'était pas le cas. Il est apparu que, en ne faisant que je faisais l' (SRCrad/RadEarth) d'Abord, puis en divisant par le Cos de la partie que j'ai quitté quelques points de localisation.
Après que vous obtenez tous vos zone de délimitation de points, si vous avez une fonction qui calcule le Point à Point (Distance par rapport à lat, long il est facile d'obtenir uniquement les points qui sont à une certaine distance de rayon à partir du point fixe. Voici ce que j'ai fait.
Je sais qu'il a fallu quelques étapes supplémentaires, mais il m'a aidé à
C'est très simple il suffit d'aller à panoramio site web et ensuite ouvrir la Carte du Monde de panoramio site web.Ensuite, allez à l'emplacement indiqué ce qui la latitude et la longitude nécessaire.
Alors vous avez trouvé la latitude et de longitude dans la barre d'adresse par exemple à cette adresse.
http://www.panoramio.com/map#lt=32.739485&ln=70.491211&z=9&k=1&a=1&tab=1&pl=all
lt=32.739485 =>latitude
ln=70.491211 =>longitude
ce Panoramio API JavaScript widget de créer un cadre de sélection autour d'un lat/long de la paire et puis en la retournant toutes les photos dans ces limites.
Un autre type de Panoramio API JavaScript widget dans lequel vous pouvez aussi changer la couleur d'arrière-plan avec exemple et le code est ici.
Il ne s'affiche pas dans la composition de l'humeur.Ce spectacle après la publication.
Ici, j'ai converti Federico A. Ramponi la réponse de PHP, si quelqu'un est intéressé:
Merci @Fedrico A. pour le Phyton mise en œuvre, j'ai porté dans un Objectif de la catégorie C de la classe. Ici est:
Je l'ai testé et semble être de travail agréable.
Struct BoundsLocation devrait être remplacé par une classe, je l'ai utilisé juste pour le partager ici.
Tous de la réponse ci-dessus ne sont que partiellement correcte. Spécialement dans la région comme l'Australie, ils incluent toujours pôle et de calculer un très grand rectangle de même pour les 10kms.
Spécialement l'algorithme de Jan Philip Matuschek à http://janmatuschek.de/LatitudeLongitudeBoundingCoordinates#UsingIndex inclus un très grand rectangle de (-37, -90, -180, 180) pour presque tous les points en Australie. Cette frappe un grand utilisateurs dans la base de données et la distance doivent être calculées pour tous les utilisateurs dans près de la moitié du pays.
J'ai trouvé que le l'API Drupal Terre Algorithme par l'Institut de Technologie de Rochester fonctionne mieux autour de pôles comme ailleurs, et il est beaucoup plus facile à mettre en œuvre.
https://www.rit.edu/drupal/api/drupal/sites%21all%21modules%21location%21earth.inc/7.54
Utilisation
earth_latitude_range
etearth_longitude_range
de l'algorithme ci-dessus pour le calcul du rectangle de délimitation deEt l'utilisation de la calcul de la distance de formule documenté par google maps pour calculer la distance
https://developers.google.com/maps/solutions/store-locator/clothing-store-locator#outputting-data-as-xml-using-php
De recherche par kilomètres au lieu de kilomètres, remplacer 3959 avec 6371.
Pour (Lat, Lng) = (37, -122) et des Marqueurs de tableau avec les colonnes lat et de gnl, la formule est:
Lire ma réponse détaillée à https://stackoverflow.com/a/45950426/5076414
Voici Federico Ramponi réponse en Aller. Note: pas de vérification des erreurs 🙁