经纬度坐标列表直线(坐标)距离排序
2018-03-12 09:32
441 查看
本方法是将一组坐标点,由一个起点开始,选取下一个距起点最近的坐标点,并将该点作为新的坐标点以此将一组坐标排序放入一个List中返回的方法。直接上代码。
1、计算坐标点之间的坐标相对距离
/**
* 利用勾股定理计算两个巡查对象之间的坐标距离
* @param teb1
* @param teb2
* @return
*/
private static double GetDistance(TourEnBo teb1, TourEnBo teb2){
double a = Math.pow((teb1.getLat()-teb2.getLat()), 2);
double b = Math.pow((teb1.getLng()-teb2.getLng()), 2);
double s = Math.sqrt(a+b);
return s;
} 附上一个使用的模型类public class TourEnBo {
private double lng;
private double lat;
public TourEnBo(){}
public TourEnBo(double lng,double lat){
super();
this.lng = lng;
this.lat = lat;
}
public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
}
2、接下来是通过迭代将坐标点List进行排序/**
* 递归排序所有坐标点 两两之间直线距离最短
* @param tlist 需要进行排序的List
* @param result 排序结果List
* @param currently 每次作为起点的坐标点
* @return
*/
private List<TourEnBo> getPath(List<TourEnBo> tlist,List<TourEnBo> result,TourEnBo currently){
if(tlist.size()==0){
return result;
}else{
int target = 0;
double distance = GetDistance(currently,tlist.get(0));
//循环判断路线 并放入result中
for(int i=0;i<tlist.size();i++){
double temp = GetDistance(currently,tlist.get(i));
if(temp <= distance){
distance = temp;
target = i;
}
}
result.add(tlist.get(target));
currently = tlist.get(target);
tlist.remove(target);
return getPath(tlist, result, currently);
}
} 完全的业务是一个关于巡查任务的路线规划,包含巡查目标的积分、状态计算,以积分及状态作为条件筛选和各种极端情况的分析,这里只贴出其中一个方法来记录
1、计算坐标点之间的坐标相对距离
/**
* 利用勾股定理计算两个巡查对象之间的坐标距离
* @param teb1
* @param teb2
* @return
*/
private static double GetDistance(TourEnBo teb1, TourEnBo teb2){
double a = Math.pow((teb1.getLat()-teb2.getLat()), 2);
double b = Math.pow((teb1.getLng()-teb2.getLng()), 2);
double s = Math.sqrt(a+b);
return s;
} 附上一个使用的模型类public class TourEnBo {
private double lng;
private double lat;
public TourEnBo(){}
public TourEnBo(double lng,double lat){
super();
this.lng = lng;
this.lat = lat;
}
public double getLng() {
return lng;
}
public void setLng(double lng) {
this.lng = lng;
}
public double getLat() {
return lat;
}
public void setLat(double lat) {
this.lat = lat;
}
}
2、接下来是通过迭代将坐标点List进行排序/**
* 递归排序所有坐标点 两两之间直线距离最短
* @param tlist 需要进行排序的List
* @param result 排序结果List
* @param currently 每次作为起点的坐标点
* @return
*/
private List<TourEnBo> getPath(List<TourEnBo> tlist,List<TourEnBo> result,TourEnBo currently){
if(tlist.size()==0){
return result;
}else{
int target = 0;
double distance = GetDistance(currently,tlist.get(0));
//循环判断路线 并放入result中
for(int i=0;i<tlist.size();i++){
double temp = GetDistance(currently,tlist.get(i));
if(temp <= distance){
distance = temp;
target = i;
}
}
result.add(tlist.get(target));
currently = tlist.get(target);
tlist.remove(target);
return getPath(tlist, result, currently);
}
} 完全的业务是一个关于巡查任务的路线规划,包含巡查目标的积分、状态计算,以积分及状态作为条件筛选和各种极端情况的分析,这里只贴出其中一个方法来记录
相关文章推荐
- 已知两点经纬度坐标,求其直线距离
- 百度地图API,获取地址的经纬度,根据坐标位置获取地理位置,,获取两个地理坐标的直线距离
- JavaScript 根据两点的经纬度坐标,计算实际的直线距离
- 计算两个经纬度坐标的直线距离
- 百度地图API计算坐标两点之间距离与业务实现排序
- 已知用经纬度表示的两点,求两点之间的直线距离
- Mysql存储过程——通过百度坐标,查询半径内符合条件的用户以及排序后的距离
- 根据两点经纬度计算直线距离
- PHP,Mysql根据经纬度计算距离并排序
- 已知用经纬度表示的两点,求两点之间的直线距离
- 已知用经纬度表示的两点,求两点之间的直线距离
- 怎么根据坐标原点(经纬度)与距离值获取一个方形区域
- 订餐系统之按距离[根据经纬度]排序、搜索
- 根据经纬度坐标计算距离
- SQL语句实现根据经纬度计算距离并排序分页
- 点到直线的垂直交点坐标 和 距离计算
- mysql计算经纬度距离并排序的sql语句
- 【JAVA】两点经纬度直线距离的计算
- 高德地图---已知两点经纬度坐标求距离和角度