我正准备从另一点的经度计算一个点的经度。它们具有相同的纬度,它们之间的距离是已知的。我尝试使用公式的sperical law of cosines。余弦公式的精确定律
# 'lat' short for 'latitude', 'lng' short for 'longitude'.
# EARTH_RADIUS = 6371000.0, unit is meter.
#
distance = Math.acos(Math.sin(lat1)*Math.sin(lat2) +
Math.cos(lat1)*Math.cos(lat2) *
Math.cos(lng2-lng1)) * EARTH_RADIUS
如果两个点的纬度是相等的(LAT1 == LAT2)中,i可以从lng1与距离计算lng2。所以我从余弦定理sperical法律公式
# lat1 == lat2 == lat
# 'distance' and 'lng' are known
lng2 = Math.acos((Math.cos(distance/EARTH_RADIUS) - Math.sin(lat)*Math.sin(lat))/(Math.cos(lat)*Math.cos(lat))) + lng
原因公式这个公式工作得非常好,除了一些情况。
喜欢
lat_degrees = -89.8345981836319
lng_degrees = 96.42309331893921
lat = lat1 = lat2 = (lat_degrees * Math::PI)/180 # -1.567909520510494
lng = (lng_degrees * Math::PI)/180 # 1.682900453373236
distance = 67544.06725769254
这将冲击片雷管错误
Math::DomainError: Numerical argument is out of domain - "acos"
由于Math.acos(值)等于-2.5100189069914602的值,该值小于-1。我对此毫不知情。派生形式是否错误?
什么编程语言,这是? – 2011-06-12 17:56:44
如果您可以阅读一点JavaScript,请查看https://groups.google.com/forum/#!topic/google-maps-api/PMxcDEnwNak – 2011-06-12 18:02:55
@WTP编程语言是ruby。 – 2011-06-12 18:05:46