Question

Je crée une application dotée de la fonctionnalité de recherche Geo Proximity en utilisant PHP comme langage de script serveur et MySQL comme base de données.

Considérez une situation:

Où nous avons certains ensembles d'objets ayant des positions de latitude et de longitude associées à des objets respectifs. En spécifiant les détails d'emplacement tels que pays et / ou ville ainsi que plage / rayon en KM, nous obtenons des objets situés dans ce rayon / plage en utilisant une requête MySQL, par exemple:

SELECT [columns] 
FROM [column] 
WHERE 1=1 
AND 3963.191 * 
    ACOS(
    (SIN(PI() * [latitude] / 180) * SIN(PI() * [column].latitude / 180)) + 
    (COS(PI() * [latitude] /180) * cos(PI() * [column].latitude / 180) * COS(PI() * [column].longitude / 180 - PI() * [longitude] / 180)) ) 
    <= 10

Les calculs ci-dessus donneront les objets situés dans la zone des 10 km à partir du point central de la ville / du pays sur la Terre.

Supposons maintenant que j’ai un objet (avec latitude et longitude) qui ne se trouve pas dans cette zone de 10 km, mais par exemple à 15 km du point central de la ville / du pays sur la Terre. Cet objet a une portée de service de 10 km (offrant un service jusqu’à 10 km).

Maintenant, la question est de savoir si je recherche les objets dans la plage de 10 km depuis le point de pays / centre-ville, puis l'objet (à 15 km du centre / ville) ayant une portée de service de 10 km doit également être inclus dans la recherche. .

Comment puis-je rendre cela possible? J'ai des coordonnées pays / centre-ville, des coordonnées longues, une plage / rayon (dans lesquelles nous devons trouver des objets) et un objet ayant un rayon de livraison (par exemple, 10 km) et ses coordonnées correspondantes.

Pouvez-vous me guider comment utiliser PHP, MySQL?

Était-ce utile?

La solution

Utiliser les extensions spatiales MySQL http://dev.mysql.com/doc/refman/ 5.1 / fr / spatial-extensions.html

D’autre part, si vous souhaitez simplement identifier d’autres cercles qui se croisent avec un cercle donné, ils seraient tous ceux pour lesquels la distance entre les centres du cercle est inférieure à la somme de rayon. En d’autres termes, en supposant que votre point et votre plage d’origine soient donnés par triple ( x 0 ), y 0 , r 0 ), vous avez besoin de tout ( x n , y n , r n ) pour lesquels

v (( x 0 - x n ) ² + ( y 0 - y n ) ²) = r 0 + r n

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top