版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wxz1179503422/article/details/82222464
关于经纬度,可以看huanhuan的博客根据两点经纬度计算距离
文章详细介绍了经纬度以及根据经纬度,计算两点直接的距离。
高德地图中,计算两点直线距离的公式如下:
//根据经纬度获取两点距离
public static int calculateDistance(double x1, double y1, double x2, double y2) {
final double NF_pi = 0.01745329251994329; // 弧度 PI/180
x1 *= NF_pi;
y1 *= NF_pi;
x2 *= NF_pi;
y2 *= NF_pi;
double sinx1 = Math.sin(x1);
double siny1 = Math.sin(y1);
double cosx1 = Math.cos(x1);
double cosy1 = Math.cos(y1);
double sinx2 = Math.sin(x2);
double siny2 = Math.sin(y2);
double cosx2 = Math.cos(x2);
double cosy2 = Math.cos(y2);
double[] v1 = new double[3];
v1[0] = cosy1 * cosx1 - cosy2 * cosx2;
v1[1] = cosy1 * sinx1 - cosy2 * sinx2;
v1[2] = siny1 - siny2;
double dist = Math.sqrt(v1[0] * v1[0] + v1[1] * v1[1] + v1[2] * v1[2]);
return (int) (Math.asin(dist / 2) * 12742001.5798544);
}
获取指定两点间固定距离的点
//获取指定两点之间固定距离点
public static LatLng getPointForDis(LatLng sPt, LatLng ePt, double dis) {
double lSegLength = calculateDistance(sPt, ePt);
double preResult = dis / lSegLength;
return new LatLng((ePt.latitude - sPt.latitude) * preResult + sPt.latitude, (ePt.longitude - sPt.longitude) * preResult + sPt.longitude);
}
计算两点之间的矩形面积
public static float calculateArea(LatLng leftTop, LatLng rightBottom) {
try {
double var2 = Math.sin(leftTop.latitude * 3.141592653589793D / 180.0D) - Math.sin(rightBottom.latitude * 3.141592653589793D / 180.0D);
double var4 = (rightBottom.longitude - leftTop.longitude) / 360.0D;
if (var4 < 0.0D) {
++var4;
}
return (float) (2.5560394669790553E14D * var2 * var4);
} catch (Throwable t) {
t.printStackTrace();
return 0.0F;
}
}
计算多点围成的面积
public static float calculateArea(List<LatLng> points) {
byte i3 = 3;
if (points != null && points.size() >= i3) {
double var2 = 0.0D;
double var4 = 111319.49079327357D;
int size = points.size();
for(int i = 0; i < size; ++i) {
LatLng var8 = points.get(i);
LatLng var9 = points.get((i + 1) % size);
double var10 = var8.longitude * var4 * Math.cos(var8.latitude * 0.017453292519943295D);
double var12 = var8.latitude * var4;
double var14 = var9.longitude * var4 * Math.cos(var9.latitude * 0.017453292519943295D);
double var16 = var9.latitude * var4;
var2 += var10 * var16 - var14 * var12;
}
return (float)Math.abs(var2 / 2.0D);
} else {
return 0.0F;
}
}