2017-10-20 4 views
0

Je fais de comparer des prix au même endroit en fonction des coordonnées GPS. Ainsi, par exemple. J'ai un élément avec coordonnées:PHP/MySQL - Trouver tous les articles de 500 mètres de rayon de coordonnées GPS réelle

lat: 45.815005 
lng: 15.978501 

Je veux chercher dans ma base de données MySQL pour chaque éléments qui sont par exemple 500 mètres autour de cet endroit. (il ne doit pas être cercle, seulement 500 mètres sur X et 500 mètres sur Y les deux façons). Lat et lng sont stockés comme des colonnes séparées de type float(10,6) dans mon DB

Je suis conscient du fait qu'il est difficile de calculer et de latitude, mais lng exact que je suis bien si je manque quelques mètres de chaque site.

C'est question assez complexe, mais je serais reconnaissant pour tout conseil qui le coup d'envoi de mon départ.

+1

Quelles ont déjà essayé et/ou des recherches? –

+0

Comment ne sera-ce pas un cercle? Je pense que vous cherchez une formule de haversine. – chris85

+0

Ça pourrait être un carré. Mais alors la distance réelle est l'hypoténuse d'un triangle de 500m et non 500. – Andreas

Répondre

2

Calcul de la distance entre les deux coordonnées n'est pas en réalité si difficile compte tenu de la formule de Haversine.

SELECT 
    -- stuff here 
    , (6371000 * acos(cos(radians(45.815005)) * cos(radians(stuff.lat)) * cos(radians(stuff.lng) - radians(15.978501)) + sin(radians(45.815005)) * sin(radians(stuff.lat)))) AS distance 
FROM 
    stuff 
HAVING 
    distance < 500 

Referenced Answer

modifications nécessaires de la réponse originale:

  1. La constante offert dans la réponse originale fourni les valeurs des miles ou kilomètres. J'ai changé la constante ici pour travailler avec les compteurs.

  2. Les constantes ont changé pour utiliser vos coordonnées. Vous pourriez vouloir adapter la requête un peu plus loin pour faire ces paramètres au lieu de constantes.

  3. L'expression having un peu changé pour refléter votre désir de 500 mètres. Encore une fois, cela pourrait être quelque chose que vous voulez paramétrer.

+0

Grand pouce levé et réponse acceptée. MERCI MEC! – Andurit