Я предлагаю приблизить локально Наземную поверхность как сферу с радиусом, данным эллипсоидом WGS84 в данной широте. Я подозреваю, что точное вычисление latMin и latMax потребовало бы эллиптических функций и не приведет к заметному увеличению точности (WGS84 является самостоятельно приближением).
Моя реализация следует (Она записана в Python; я не протестировал его):
# degrees to radians
def deg2rad(degrees):
return math.pi*degrees/180.0
# radians to degrees
def rad2deg(radians):
return 180.0*radians/math.pi
# Semi-axes of WGS-84 geoidal reference
WGS84_a = 6378137.0 # Major semiaxis [m]
WGS84_b = 6356752.3 # Minor semiaxis [m]
# Earth radius at a given latitude, according to the WGS-84 ellipsoid [m]
def WGS84EarthRadius(lat):
# http://en.wikipedia.org/wiki/Earth_radius
An = WGS84_a*WGS84_a * math.cos(lat)
Bn = WGS84_b*WGS84_b * math.sin(lat)
Ad = WGS84_a * math.cos(lat)
Bd = WGS84_b * math.sin(lat)
return math.sqrt( (An*An + Bn*Bn)/(Ad*Ad + Bd*Bd) )
# Bounding box surrounding the point at given coordinates,
# assuming local approximation of Earth surface as a sphere
# of radius given by WGS84
def boundingBox(latitudeInDegrees, longitudeInDegrees, halfSideInKm):
lat = deg2rad(latitudeInDegrees)
lon = deg2rad(longitudeInDegrees)
halfSide = 1000*halfSideInKm
# Radius of Earth at given latitude
radius = WGS84EarthRadius(lat)
# 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
return (rad2deg(latMin), rad2deg(lonMin), rad2deg(latMax), rad2deg(lonMax))
РЕДАКТИРОВАНИЕ: следующий код преобразовывает (градусы, начала, секунды) до градусов + части градуса, и наоборот (не протестированный):
def dps2deg(degrees, primes, seconds):
return degrees + primes/60.0 + seconds/3600.0
def deg2dps(degrees):
intdeg = math.floor(degrees)
primes = (degrees - intdeg)*60.0
intpri = math.floor(primes)
seconds = (primes - intpri)*60.0
intsec = round(seconds)
return (int(intdeg), int(intpri), int(intsec))
Вы ищете формулу эллипсоида.
лучшее место я нашел, чтобы начать кодировать, основан на Гео-:: библиотека Ellipsoid от CPAN. Это дает Вам базовую линию, чтобы создать Ваши тесты прочь и сравнить Ваши результаты с ее результатами. Я использовал его в качестве основания для подобной библиотеки для PHP в моем предыдущем работодателе.
Смотрит на location
метод. Назовите его дважды, и у Вас есть свой bbox.
Вы не отправили, какой язык Вы использовали. Может уже быть библиотека геокодирования, доступная для Вас.
, О, и если Вы не поняли его к настоящему времени, карты Google используют эллипсоид WGS84.
Я написал статью о нахождении ограничивающих координат:
http://JanMatuschek.de/LatitudeLongitudeBoundingCoordinates
В статье объясняются формулы, а также предоставляется реализация на Java. (Это также показывает, почему формула Федерико для минимальной / максимальной долготы неточна.)