Le stockage et l'Interrogation des Coordonnées GPS Efficacement
Je veux créer une grande base de données de coordonnées GPS qui peut être interrogé en disant "Retour toutes les coordonnées sont au sein de 'n' mètres de [cette coordonner]".
J'ai besoin d'être aussi efficace que possible, de sorte boucle dans toutes les coordonnées dans la base de données et de calculer si un système de coordonnées est dans 'n' mètres ne serait pas une solution désirée.
Est-il une solution plus simple?
Grâce
OriginalL'auteur user106996 | 2009-05-14
Vous devez vous connecter pour publier un commentaire.
En général, je fais ce genre de requête à l'aide de lat/lon. À l'aide de la géométrie sphérique, vous pouvez mettre un cadre de sélection autour d'un point précis. Par exemple, disons que vous avez un point (X,Y) que vous souhaitez toutes les coordonnées de moins de 1 mile (conversion en mètres, je vais le laisser comme un exercice pour le lecteur). Vous pouvez déterminer une matrice de (X-1,Y-1),(X+1,Y+1). Ensuite vous interroger votre base de données de points à l'aide de l'opérateur ENTRE (SELECT foo bar OÙ LAT ENTRE X-1 ET X+1 ET LON ENTRE Y-1 ET Y+1). Ensuite, vous faites votre détail du calcul de la distance à "arrondir les angles" de votre boîte englobante.
Le problème, c'est que les lignes de longitude sont rapprochés au sommet de la sphère, de sorte que vous obtiendrez des résultats faussés le plus loin vous êtes en provenance de l'équateur. Mais il sert encore à rapidement filtrer vos résultats.
Google "Distance orthodromique" pour les calculs.
EDIT: Il y a 0.167469 degrés de longitude par mille (en fait, il varie de 0.167469 à 0.014564), et 0.014483 degrés de latitude par mile. Si votre boîte englobante est
(lat - (miles * 0.014483), lon - (miles * 0.167469)), (lat + (miles * 0.014483), lon + (miles * 0.167469))
OriginalL'auteur Andrew Barnett
Il ya un soutien dans SQL Server 2008 pour le stockage de de données spatiales. Je n'ai jamais travaillé avec moi-même, mais je sais que vous pouvez créer des requêtes du type que vous voulez.
OriginalL'auteur Ronald Wildenberg
De nombreux systèmes de base de données ont la fonction pour travailler avec des données géospatiales.
Ici est comparaison des fonctions géospatiales entre SQL Server 2008, PosGIS et MySQL
http://www.bostongis.com/PrinterFriendly.aspx?content_name=sqlserver2008_postgis_mysql_compare
OriginalL'auteur MicTech
Si vous pouvez avoir votre choix de DB, je vous recommande le même que rwwilden et l'utilisation de SQL 2008 avec ses données spatiales capacités. Si vous ne pouvez pas utiliser cette solution ou celle qui inclut spatiale de l'interrogation, vous pouvez prendre un coup d'oeil à Microsoft de papier sur Hiérarchique Maillage Triangulaire et de mettre en œuvre ces choses. Le SDK pour MSSQL '05 est venu avec une solution d'ensemble pour HTM out-of-the-box, de sorte que vous pouvez simplement prendre de que et convertir quelle que soit la plateforme que vous êtes à la recherche à l'aide.
EDIT:
Ici est un détail document expliquant HTM et la mise en œuvre. Bien sûr, vous pouvez convertir votre base de données de choix. Vous pouvez trouver le code source d'un plein HTM mise en œuvre dans le kit de développement pour 2005.
OriginalL'auteur Erich Mirabal
SIG, bases de données (MS PostgreSQL etc) de mettre en œuvre certaines données de la structure à deux ou trois dimensions de la région de recherches (indices spatiaux). Le plus simple sturcture est l'index du quadrillage, puis les différents arbres de recherche (kd-tree, quad-tree) avec R-arbre le plus fréquemment utilisé (généralisée B-tree pour plus d'dimensions). Ces méthodes semblent appropriées.
Une grille de base de l'index (le partitionnement de l'espace en une grille de cellules, et de rechercher uniquement dans les cellules voisines) peut être mis en œuvre facilement et peut réduire le temps de recherche sur une échelle logarithmique. Les arbres de recherche sont un peu plus difficiles à mettre en œuvre, mais il y a beaucoup d'implémentations open source pour beaucoup de langages de programmation. Cependant, dans la plupart des cas, la grille d'indexation est assez efficace.
OriginalL'auteur csaba
Suivi Erich - si vous avez le choix d'utiliser PostGIS (postgresql), il est gratuit et open source, ne les requêtes que vous décrivez très très rapidement, fonctionne sur presque toutes les plates-formes, et ai-je mentionné que c'est gratuit?
OriginalL'auteur TheSteve0
Si vous voulez éviter une extension GIS, j'ai adapté les fonctions de ce post à postgres sql:
à l'aide de ceux que vous pouvez faire quelques entourant carrés requêtes:
si vous avez utilisé assez fréquemment, je suis sûr que tournant le entre états en une seule fonction serait facile. Je n'ai jamais fait aucune "dans un rayon de" requêtes avec cette même si.
Pour quelque chose de plus compliqué, vous aurez probablement envie d'extension GIS comme d'autres réponses ont dit. PostGIS est bon, mais j'ai trouvé beaucoup de la sig fonctions spécifiques peuvent être durs pour obtenir le droit, et, sauf si vous utilisez la zone englobante indices de votre espace de requêtes peuvent prendre un jour si votre jeu de données est assez grand. Mais le compromis dans la complexité est vraiment la peine pour toutes les choses de fantaisie, comme la sortie de vos données dans le format geojson, etc.
OriginalL'auteur micimize