Frage

eine geografische Breite und Länge gegeben, und die Entfernung, möchte ich einen Begrenzungsrahmen zu finden, wo die Abstände kleiner sind als die vorgegebene Strecke.

wurden diese Fragen hier: Wie der Begrenzungsrahmen für eine gegebene lat / lng Standort?

berechnen

I donot dies wollen partcularly genau, so habe ich geändert und vereinfacht es zu

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))

Aber ich kann nicht verstehen, wie dies funktioniert, insbesondere diese Linie mir halfSide = 1000*halfSideInKm keinen Sinn macht,

War es hilfreich?

Lösung

Diese Linie ist die Umwandlung der Begrenzungsrahmen Einheiten von Kilometern Meter.

Andere Tipps

Dieser Code hat nicht ganz funktioniert, springt er zwischen KM und M.

Fixed Code, hergestellt Namen mehr PEP8 Stil, und hat eine einfache Box Objekt:

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top