Maison >base de données >tutoriel mysql >Comment trouver des bâtiments dans un rayon de 5 milles à l'aide de coordonnées ?

Comment trouver des bâtiments dans un rayon de 5 milles à l'aide de coordonnées ?

DDD
DDDoriginal
2025-01-09 11:37:43781parcourir

How to Find Buildings Within a 5-Mile Radius Using Coordinates?

Localisation des bâtiments dans un rayon de 5 miles via les coordonnées

Ce guide explique comment récupérer efficacement tous les bâtiments dans un rayon de 5 miles de coordonnées données.

Étape 1 : optimiser le stockage des données

Stockez les données de localisation des bâtiments à l'aide d'un type de données géométriques ou géographiques. Cela améliore considérablement les performances des requêtes spatiales et évite les problèmes de conversion de type de données.

Étape 2 : Utiliser ST_DWithin ou ST_Distance

Deux fonctions facilitent les calculs de distance :

  1. ST_DWithin : Cette fonction détermine efficacement si les géométries se situent dans une distance spécifiée. Pour trouver des bâtiments à moins de 5 miles de (-4.6314, 54.0887) :

    <code class="language-sql">SELECT name, longitude, latitude
    FROM building
    WHERE ST_DWithin('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(longitude, latitude), 8046.72);
    -- 8046.72 meters = 5 miles</code>
  2. ST_Distance : Cette fonction calcule la distance en mètres. Convertissez des mètres en miles en utilisant : distance * 0.000621371. Pour les bâtiments à moins de 5 miles de (-4.6314, 54.0887) :

    <code class="language-sql">SELECT name, longitude, latitude,
    ST_Distance('POINT(-4.6314 54.0887)'::geography, ST_MakePoint(longitude, latitude)) * 0.000621371 AS distance_miles
    FROM building
    WHERE distance_miles <= 5;</code>

Étape 3 : Considérations clés

  • Maintenir l'ordre correct dans ST_MakePoint : longitude, latitude.
  • Les calculs ST_Distance contournent les index spatiaux. Utilisez-le dans la clause SELECT pour éviter les goulots d'étranglement des performances.
  • Amazon Athena utilise les degrés pour les calculs de distance dans ST_Distance.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn