我正在计算两个GeoCoordinates之间的距离.我正在针对其他3-4个应用测试我的应用.当我计算距离时,我计算得到的平均值为3.3英里,而其他应用程序的距离为3.5英里.这与我正在尝试执行的计算有很大不同.有没有好的类库来计算距离?我在C#中计算它是这样的:
public static double Calculate(double sLatitude,double sLongitude, double eLatitude,
double eLongitude)
{
var radiansOverDegrees = (Math.PI / 180.0);
var sLatitudeRadians = sLatitude * radiansOverDegrees;
var sLongitudeRadians = sLongitude * radiansOverDegrees;
var eLatitudeRadians = eLatitude * radiansOverDegrees;
var eLongitudeRadians = eLongitude * radiansOverDegrees;
var dLongitude = eLongitudeRadians - sLongitudeRadians;
var dLatitude = eLatitudeRadians - sLatitudeRadians;
var result1 = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
Math.Cos(sLatitudeRadians) * Math.Cos(eLatitudeRadians) *
Math.Pow(Math.Sin(dLongitude / 2.0), 2.0);
// Using 3956 as the number of miles around the …Run Code Online (Sandbox Code Playgroud) 如果我有标准NMEA格式的纬度或经度读数有一个简单的方法/公式将该读数转换为米,然后我可以用Java(J9)实现?
编辑:好吧似乎我想做的事情不容易,但我真正想做的是:
假设我有一个lat和一个长途的点和一个lat和很长的用户有一个简单的方法来比较它们来决定何时告诉用户他们在一个合理的距离点的方式点?我觉得合理是主题,但是这很容易做到还是仍然过于数学?
我可以做一个简单的计算,它会将km转换为一个值,我可以将其添加到lat或lon浮点数来计算搜索的边界框吗?它不需要完全准确.
例如:如果给我伦敦,英格兰的纬度/经度(51.5001524,-0.1262362),我想计算那个纬度从那个点开始向西/向西25公里的东西,以及从那个南北25公里的lon点,我需要做什么才能将25km转换成小数加上上面的值?
我正在寻找一般的经验法则,即:1km == +/- 0.XXX
编辑:
我对"lat lon"的原始搜索未返回此结果:
接受的答案似乎足以满足我的要求.
我目前正在使用下面的功能,但它无法正常工作.根据谷歌地图,这些坐标(从59.3293371,13.4877472到59.3225525,13.4619422)之间的距离是2.2公里,而函数返回1.6公里.如何使此功能返回正确的距离?
function getDistanceFromLatLonInKm(lat1, lon1, lat2, lon2) {
var R = 6371; // Radius of the earth in km
var dLat = deg2rad(lat2-lat1); // deg2rad below
var dLon = deg2rad(lon2-lon1);
var a =
Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) *
Math.sin(dLon/2) * Math.sin(dLon/2)
;
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
return d;
}
function deg2rad(deg) {
return deg * …Run Code Online (Sandbox Code Playgroud) 可能重复:
使用Java中的纬度/经度值
我需要计算两个坐标给出的两点之间的距离.我正在研究的项目是一个Java项目,所以Java代码会很棒,但也可以给出伪代码,然后我可以自己实现它:)
您可能知道,有三种表示坐标的方法:
这是我的坐标的第三种方式,所以这个值的代码将是首选:)
我正在尝试使用此处描述的技术计算两个点之间的距离(我有纬度和经度),计算两个纬度 - 经度点之间的距离?(Haversine配方)
代码如下Javascript:
var R = 6371; // Radius of the earth in km
var dLat = (lat2-lat1).toRad(); // Javascript functions in radians
var dLon = (lon2-lon1).toRad();
var a = Math.sin(dLat/2) * Math.sin(dLat/2) +
Math.cos(lat1.toRad()) * Math.cos(lat2.toRad()) *
Math.sin(dLon/2) * Math.sin(dLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
var d = R * c; // Distance in km
Run Code Online (Sandbox Code Playgroud)
但是当我尝试实现它时,错误就出现了Uncaught TypeError: Object 20 has no Method 'toRad'.
我需要一个特殊的库或什么来获得.toRad()工作吗?因为它似乎搞砸了第二行.
我希望能够估计两个(纬度,经度)点之间的距离.我想低估,因为这将是A*图搜索,我希望它快.这些点最多相距800公里.
我有long,lat格式的地理编码点,我想用R计算它们之间的距离.这看起来非常简单,但我找不到一个能够轻松完成的功能.我一直试图用gdistance包来做,但它似乎非常复杂并且面向图形,我只需要一个数字.这样的东西distanceBetween(pointA,pointB)会返回一个数字.
更新:这个问题特定于R,可能的dup更一般.虽然有一个R特定的答案,但它被埋没在其他28个答案中.
Pandas数据帧中的每一行包含2个点的lat/lng坐标.使用下面的Python代码,计算许多(数百万)行的这两个点之间的距离需要很长时间!
考虑到2点相距不到50英里并且准确性不是很重要,是否可以更快地进行计算?
from math import radians, cos, sin, asin, sqrt
def haversine(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
"""
# convert decimal degrees to radians
lon1, lat1, lon2, lat2 = map(radians, [lon1, lat1, lon2, lat2])
# haversine formula
dlon = lon2 - lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1) * cos(lat2) * sin(dlon/2)**2
c = 2 * asin(sqrt(a))
km = 6367 * c …Run Code Online (Sandbox Code Playgroud) 我在地球上有一个线段(大圆圈部分).线段由其末端的坐标定义.显然,两个点定义了两个线段,所以假设我对较短的线段感兴趣.
我得到了第三点,我正在寻找线和点之间的(最短)距离.
所有坐标均以经度\纬度(WGS 84)给出.
我该如何计算距离?
任何合理的编程语言都可以使用解决方案.