Étant donné la latitude et la longitude et la distance, je veux trouver un cadre de sélection

StackOverflow https://stackoverflow.com/questions/1648917

  •  22-07-2019
  •  | 
  •  

Question

Étant donné la latitude, la longitude et la distance, je souhaite trouver un cadre de sélection où les distances sont inférieures à la distance donnée.

Cette question a été posée ici: Comment calculer le cadre de sélection pour un emplacement donné en latitude / longitude?

Je ne veux pas que cela soit particulièrement précis, je l’ai donc modifié et simplifié pour

def boundingBox(latitudeInDegrees, longitudeInDegrees, halfSideInKm):
    lat = math.radians(latitudeInDegrees)
    lon = math.radians(longitudeInDegrees)
    halfSide = 1000*halfSideInKm

    RADIUS_OF_EARTH  = 6371
    # Radius of the parallel at given latitude
    pradius = radius*math.cos(lat)

    latMin = lat - halfSide/radius
    latMax = lat + halfSide/radius
    lonMin = lon - halfSide/pradius
    lonMax = lon + halfSide/pradius
    rad2deg = math.degrees
    return (rad2deg(latMin), rad2deg(lonMin), rad2deg(latMax), rad2deg(lonMax))

Mais je ne comprends pas comment cela fonctionne. En particulier, cette ligne n'a aucun sens pour moi halfSide = 1000 * halfSideInKm

Était-ce utile?

La solution

Cette ligne convertit les unités de la boîte englobante de kilomètres en mètres.

Autres conseils

Ce code n'a pas fonctionné, il passe de KM à M.

Code fixe, noms plus de style PEP8 et ajout d'un objet boîte simple:

class BoundingBox(object):
    def __init__(self, *args, **kwargs):
        self.lat_min = None
        self.lon_min = None
        self.lat_max = None
        self.lon_max = None


def get_bounding_box(latitude_in_degrees, longitude_in_degrees, half_side_in_miles):
    assert half_side_in_miles > 0
    assert latitude_in_degrees >= -90.0 and latitude_in_degrees  <= 90.0
    assert longitude_in_degrees >= -180.0 and longitude_in_degrees <= 180.0

    half_side_in_km = half_side_in_miles * 1.609344
    lat = math.radians(latitude_in_degrees)
    lon = math.radians(longitude_in_degrees)

    radius  = 6371
    # Radius of the parallel at given latitude
    parallel_radius = radius*math.cos(lat)

    lat_min = lat - half_side_in_km/radius
    lat_max = lat + half_side_in_km/radius
    lon_min = lon - half_side_in_km/parallel_radius
    lon_max = lon + half_side_in_km/parallel_radius
    rad2deg = math.degrees

    box = BoundingBox()
    box.lat_min = rad2deg(lat_min)
    box.lon_min = rad2deg(lon_min)
    box.lat_max = rad2deg(lat_max)
    box.lon_max = rad2deg(lon_max)

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