Dada a latitude e longitude, e distância, eu quero encontrar uma caixa delimitadora
-
22-07-2019 - |
Pergunta
Dada a latitude e longitude, e distância, eu quero encontrar uma caixa delimitadora, onde as distâncias são menores do que a distância dada.
Esta pergunta foi perguntado aqui: Como calcular a caixa delimitadora para um determinado lat / localização GNL?
I donot quer este partcularly precisas, por isso tenho modificado e simplificado para
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))
Mas eu não posso entender como isso funciona, em particular, esta linha não faz sentido para mim halfSide = 1000*halfSideInKm
Solução
Essa linha é converter as unidades caixa delimitadora de quilômetros para metros.
Outras dicas
Este código não funcionou muito bem, ele salta entre KM e M.
código fixo, feitas nomes mais estilo PEP8, e acrescentou um objeto de caixa simples:
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)