java起点坐标和终点坐标之间生成多个坐标
时间: 2023-09-11 18:12:05 浏览: 158
要实现在起点坐标和终点坐标之间生成多个坐标点,可以采用以下方法:
1. 根据起点坐标和终点坐标,计算出两点之间的距离和方向角。
2. 根据需要生成的坐标点数量,将两点之间的距离平均分成若干段,计算出每一段的长度和方向角。
3. 根据起点坐标、每一段的长度和方向角,依次计算出每个坐标点的经纬度。
4. 将生成的坐标点存储在一个数组中,可以用这些坐标点来绘制轨迹或者进行其他操作。
以下是一个简单的示例代码:
```java
public static List<Point> generatePoints(Point start, Point end, int count) {
List<Point> points = new ArrayList<>();
double distance = getDistance(start, end);
double direction = getDirection(start, end);
double segmentLength = distance / count;
points.add(start);
for (int i = 1; i < count; i++) {
double segmentDirection = direction + Math.PI * (i - 0.5) / count;
double latitude = start.getLatitude() + segmentLength * Math.cos(segmentDirection) / 111319.9;
double longitude = start.getLongitude() + segmentLength * Math.sin(segmentDirection) / (111319.9 * Math.cos(start.getLatitude() * Math.PI / 180));
points.add(new Point(latitude, longitude));
}
points.add(end);
return points;
}
private static double getDistance(Point start, Point end) {
double lat1 = start.getLatitude();
double lng1 = start.getLongitude();
double lat2 = end.getLatitude();
double lng2 = end.getLongitude();
double radLat1 = Math.toRadians(lat1);
double radLat2 = Math.toRadians(lat2);
double a = radLat1 - radLat2;
double b = Math.toRadians(lng1) - Math.toRadians(lng2);
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) + Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
s = s * 6378137;
s = Math.round(s * 10000) / 10000;
return s;
}
private static double getDirection(Point start, Point end) {
double lat1 = start.getLatitude();
double lng1 = start.getLongitude();
double lat2 = end.getLatitude();
double lng2 = end.getLongitude();
double x = Math.sin(Math.toRadians(lng2 - lng1)) * Math.cos(Math.toRadians(lat2));
double y = Math.cos(Math.toRadians(lat1)) * Math.sin(Math.toRadians(lat2)) - Math.sin(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) * Math.cos(Math.toRadians(lng2 - lng1));
double direction = Math.atan2(x, y);
return direction;
}
```
在以上示例代码中,我们定义了一个`generatePoints`方法,该方法接收起点坐标、终点坐标和需要生成的坐标点数量,返回生成的坐标点数组。我们还定义了两个辅助方法,用于计算两点之间的距离和方向角。你可以根据自己的需求修改这些方法,并在自己的项目中使用它们来生成坐标点。
阅读全文