2014-02-25 67 views
0

您好,我想根据最短距离在地图上绘制多边形。订购阵列中的物品

我已经创建了名为distancearray的数组列表。

但我想要创建一个名为shortdistance的新数组列表,这个数组列表在distancearray中必须具有相同的值,但它必须根据距离的不同而有所不同。

任何一个可以帮助我创建这个短距离阵列的。谢谢。

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)); 
    } 

回答

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,你也可避免解析相同的一倍以上比一次)。

+0

谢谢贾森。我编辑了这个问题。我想将数组传递给'drawpolygon(distancearray);'函数。我已经为问题添加了多边形函数,可以请告诉我如何将distancearray传递给多边形函数。 –

+0

@ user3234352将参数传递给函数是非常基础的Java。您需要阅读关于[将信息传递给方法]的官方教程(http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html)。 –

4

只需拨打Arrays.sort()对你的阵列,并指定一个比较,着眼于距离。

+0

'Arrays.sort()'不会为此工作,因为他使用的是并行数组(并且引导顺序错误 - array [object_index] [field_index]')。 –