Nasıl verilen lat/lng için sınırlayıcı kutunun yerini belirlemek için?
Konumu enlem ve boylam tarafından tanımlanan verdim. Şimdi bu noktada örneğin 10 kilometre içinde bir sınırlayıcı kutu hesaplamak istiyorum.
Sınırlayıcı kutu latmin, lngmin ve latmax, lngmax olarak tanımlanmış olmalıdır.
Bu seçkin API kullanmak için bunlara ihtiyacım var: http://www.panoramio.com/api/
Birisi o puanı almak için nasıl bir formül biliyor mu?
Düzenleme:Formül/arıyorum Beyler lat ve lng giriş ve döner gibi latmin & lngmin ve latmax olarak sınırlayıcı bir kutu alır ve latmin işlevi. Mysql, php, c#, javascript iyi değil, aynı zamanda yalancı Tamam olmalıdır.
Düzenleme:Bana 2 puan mesafeyi gösteren bir çözüm arıyorum
CEVAP
Yaklaşık yerel Toprak verilen enlem yarıçapı, WGS84 elipsoid tarafından verilen bir kürenin yüzeyine öneririm. LatMin ve latMax tam hesaplama eliptik fonksiyonlar gerektirir ve doğruluk içinde kayda değer bir artış WGS84 kendisi bir modeli) verilmesinin mümkün olmadığını düşünüyorum.
Benim takip uygulaması (Python ile yazılmış; ben daha test etmedim):
# 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))
EDİT: bir derece, ve tersi (test değil) bir derece kesirler için aşağıdaki kodu dönüştürür (derece, asal sayılar, saniye):
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))
Nasıl değişken olup olmadığını belirle...
Nasıl pi benim hesaplama doğru olup ol...
Nasıl içeren bir taahhüt verilen şube ...
Nasıl Python değişken türünü belirleme...
Nasıl belirli bir Linux 32 bit veya 64...