2017-11-28 21 views
0

주어진 반경을 가진 원주 주위에 마커를 추가하려고합니다. 내 중심점이 내지도의 현재 위치이며 주변에 10 개의 중간 지점을 추가하려고합니다. 원에서 점을 찾는 데 Pythagoras 방법을 사용하려고하지만 여기에서 계산이 정확하다고 생각하지 않습니다.Google지도에서 원의 둘레에 마커를 추가하십시오.

private void drawCirclePoints() 
    {  
     int numOfPoints = 10; 
     int radius = 100; 
     LatLng center = new LatLng(homeBase.latitude, homeBase.longitude); 
     double slice = 360/numOfPoints; 
     ArrayList<LatLng> centerArray = new ArrayList<>(); 

     for (int i = 0; i < numOfPoints; i++) 
     { 
      double angle = slice * i; 
      double X = center.latitude + radius * Math.cos(angle * Math.PI/180); 
      double Y = center.longitude + radius * Math.sin(angle * Math.PI/180); 
      centerArray.add(new LatLng(X, Y)); 
     } 

     CircleOptions circleOptions = new CircleOptions(); 
     circleOptions.center(homeBase); 
     circleOptions.radius(radius); 
     circleOptions.fillColor(0x33FF0000); 
     circleOptions.strokeColor(Color.BLUE); 
     circleOptions.strokeWidth(3); 

     for (int i = 0; i < centerArray.size(); i++) 
     { 
      setMarker("sample", centerArray.get(i).latitude, centerArray.get(i).longitude); 

     } 

     markercircle = mMap.addCircle(circleOptions); 

    } 

여기 내 문제가 반환 된 좌표가 정확하지 않거나 내가 예상 :

여기 내 기능입니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

0

나는 당신이 무엇을 기대하고 있는지 잘 모르겠습니다. 몇 자릿수로 결과를 잘라내거나 결과를 인쇄 해 보았습니까? 그렇다면 공유하십시오!

코드를 약간 수정했으며 결과가 예상대로였습니다.

int numOfPoints = 4; 
    int radius = 100; 

    LatLng center = new LatLng(0.0, 0.0); 

    double slice = 360/numOfPoints; 
    ArrayList<LatLng> centerArray = new ArrayList<>(); 

    for (int i = 0; i < numOfPoints; i++) 
    { 
     double angle = slice * i; 
     double X = center.latitude + radius * Math.cos(angle * Math.PI/180); 
     double Y = center.longitude + radius * Math.sin(angle * Math.PI/180); 

     DecimalFormat df = new DecimalFormat("#.##"); 
     centerArray.add(new LatLng(Double.parseDouble(df.format(X)), Double.parseDouble(df.format(Y)))); 
    } 

    for (int i = 0; i < centerArray.size(); i++) 
    { 
     System.out.println("point " + (i + 1) + " = X:" + centerArray.get(i).latitude + ", Y: " + centerArray.get(i).longitude); 

    } 

결과 :
포인트 1 = X : 100.0, Y : 0.0
점 2 = X : 0.0, Y : 100.0
포인트 3 = X : -100.0, Y : 0.0
포인트 4 = X : -0.0, Y : -100.0

+0

더 많은 인터넷 검색 결과. 내 대답에 도착했다고 생각해. 위의 방법은 문제가 없지만 필요한 답을 나에게주지 않습니다. 나는 여전히 내 직교 좌표를 위도와 경도 (평평한 지구 근사치를 가정)로 변환해야하는데 이는 내 코드에서 누락 된 추가 단계입니다. – MaskedAfrican