我正在尝试根据最短距离在地图上绘制多边形。
我创建了名为 distancearray 的数组列表。
但我想创建一个名为 shortdistance 的新数组列表,此数组列表必须在距离阵列中具有相同的值,但必须根据距离按照排序顺序进行短路。
任何人都可以帮我创建短距离数组。谢谢。
String array[][]=dbhand.collecting(getIntent().getExtras().getString("temple_type"), Integer.parseInt(getIntent().getExtras().getString("notemples")));
for(int i=0;i<array.length;i++){
displaymarkers(Double.parseDouble(array[i][0]), Double.parseDouble(array[i][1]), array[i][2]);
}
for(int i=0;i<array.length;i++){
double Distance = calculate_distance(SEATTLE_LAT, SEATTLE_LNG, Double.parseDouble(array[i][0]), Double.parseDouble(array[i][1]));
double[][] distancearray = new double[array.length][3];
distancearray[i][0]=Double.parseDouble(array[i][0]);
distancearray[i][1]=Double.parseDouble(array[i][1]);
distancearray[i][2]=Distance;
}
double [][] shortdistance = new double [array.length][3];
绘制多边形函数
private void drawpolygon(String array[][]) {
int lengh = array.length;
if(lengh==2){
mMap.addPolygon(new PolygonOptions()
//.add(new LatLng(9.662502, 80.010239), new LatLng(9.670931, 80.013201), new LatLng(9.663216, 80.01333))
.add(new LatLng(9.6632139, 80.0133258))
.add(new LatLng(Double.parseDouble(array[0][0]), Double.parseDouble(array[0][1])))
.add(new LatLng(Double.parseDouble(array[1][0]), Double.parseDouble(array[1][1])))
.fillColor(Color.GRAY));
}
答案 0 :(得分:4)
只需针对您的阵列调用Arrays.sort()
并指定一个查看距离的比较器。
答案 1 :(得分:1)
您将难以按原样对数组进行排序,因为您当前将数据存储在并行数组中:
distancearray[i][0]=Double.parseDouble(array[i][0]);
distancearray[i][1]=Double.parseDouble(array[i][2]);
distancearray[i][3]=Distance;
您可以对distancearray[n]
进行排序,但这会产生无意义的结果。相反,你应该做的是创建一个小类来实现Comparable
(基于距离比较),它保存你的三个值,然后使用这些类的数组:
class DistanceInfo implements Comparable<DistanceInfo> {
public double a;
public double b;
public double distance;
public DistanceInfo (double a, double b, double distance) {
this.a = a;
this.b = b;
this.distance = distance;
}
@Override public int compareTo (DistanceInfo d) {
return Double.compare(distance, d.distance);
}
}
// then:
DistanceInfo[] distancearray = new DistanceInfo[array.length];
// and you can load it using the constructor:
for (int i = 0; i < array.length) {
double a = Double.parseDouble(array[i][0]);
double b = Double.parseDouble(array[i][1]);
distancearray[i] = new DistanceInfo(a, b, Distance);
}
(如果您希望指定在构建后无法修改字段,则可以将字段设为final
。)
现在,Arrays.sort()
将根据距离对distancearray
进行排序:
Arrays.sort(distancearray, null);
您也可以使用ArrayList<DistanceInfo>
代替,除了您使用Collections.sort()
排序外,其他想法是相同的。
通常,由于这个原因(其中包括),通常最好使用类来存储有关对象的所有信息,而不是并行数组。
<小时/> 另外,您可能还需要考虑将此类用于
array
,它会稍微简化您的代码(您可以修改displaymarkers
以获取DistanceInfo
,您也可以避免多次解析同一个双精神。)