2014-09-11 2 views
0

J'ai une base de données (MySQL) de points géographiques (lat, long) et j'ai besoin d'interroger une liste de points d'un rectangle (qui ont 2 coordonnées pour chaque sommet). Y at-il une requête ou un algorithme pour résoudre ce problème rapidement.Renvoie la liste des points dans un rectangle

Merci.

+0

4 coordonnées pour chaque sommet? sûrement chaque sommet n'a que 2: Lattitude/Longtitude –

+0

Ops, désolé, je veux dire 2 coordonnées pour chaque sommet (lat, long) –

Répondre

1

en supposant que vos points lat/long sont indexés, toute requête SQL sera assez rapide

SELECT point.lat, point.long FROM point where rect1.lat <= point.lat and point.lat <= rect2.lat and rect1.long <= point.long and point.long <= rect2.long 

rect1.lat/rect1.long et rect2.lat/rect2.long sont les lat/long de l'emplacement le plus au nord-ouest et le plus au sud-est. J'espère que vous stockez lat/long pour vos points et rectangles comme positif et négatif (plutôt que E/WN/S) - si vous avez alors comme E/W et N/S la requête sera beaucoup plus compliqué. Ceci suppose également que le rectangle est tel que la totalité du bord suit une ligne de lattitude/longtitude.

Pour être honnête, celui-ci est si simple, je suppose que je manque quelque chose ....

+0

Ceci est une bonne réponse. J'ai posté cette question parce que je pensais qu'il y avait un cadre de géolocalisation ou un algorithme spécial pour accélérer la requête. –

+0

mais vous ne demandez pas de géolocalisation (pas vraiment), vous demandez simplement si le nombre a entre les nombres b & c, SQL est bon pour cela avec les bons index. Si vous aviez posé la question avec des points géographiques (villes, lacs de montagnes, etc.) et que vous vouliez identifier une relation spécifique entre eux sans savoir (à l'avance leur lat/long), alors il s'agit plutôt d'un problème de type de cadre géographique –

+0

Oui, peut-être que j'ai surévalué le problème Merci! –

Questions connexes