2015-02-03 1 views
0

У меня есть GoogleMap в моем проекте. Он установлен в уровне масштабирования 18. Я хочу нарисовать линию длиной 1 метр. Я смотрел и использую код ПримерноAndroid GoogleMap V2: Как я могу нарисовать линию с определенной длиной?

googleMap.addCircle(new CircleOptions() 
    .center(latLng1) 
    .radius(5) 
    .fillColor(Color.BLUE));  

Я дал его радиус в метрах. как я могу сделать это с помощью строки? (у polyLine нет этих параметров) строка с конкретным LatLng и конкретным направлением (например: Направление с севера) и определенной длиной? Я могу указать направление по sin и cos .. но что я могу сделать для длины линии?

ответ

2

Для данной точки существует только один круг с заданным радиусом. Но с линиями ситуация немного другая. Для данной точки существует бесконечное число строк, начиная с этих точек и заданной длины. Поэтому вы не можете просто нарисовать такую ​​линию.

Один из способов сделать это - выбрать точку на круге с радиусом 1 метр и центрировать свою точку. Here - хороший пример, как вычислить точку на круге с заданным радиусом. Затем просто нарисуйте линию между двумя точками.

UPDATE:

Это может помочь вам, как найти LatLng точки на окружности LatLng Points on circle on Google Map V2 in Android

+0

Если я укажу направление ... он просто имеет одну линию для рисования. одна точка, длина и направление (степень) ... Я собираюсь попробовать вашу страницу предложений – jion

+0

Проблема в том, что: Как я могу указать 1 метр? например: LatLng2.longitude = r x cos (a); и LatLng2.latitude = r x sin (a); но как я могу объяснить googlemap, что «r» - 1 метр? – jion

+0

Большое спасибо ... Я использовал его, но есть проблема. Я объяснил это здесь: http://stackoverflow.com/questions/28321738/android-google-map-heading-is-drawn-wrongly-when-i-draw-a-line-with-specific – jion

0

Используйте полилинии рисовать линии что-то, как показано ниже,

private ArrayList<LatLng> mLatlngs ; 

PolylineOptions mPolylineOptions = new PolylineOptions(); 
        mPolylineOptions.color(Color.RED); 
        mPolylineOptions.width(3); 
        mPolylineOptions.addAll(mLatlngs); 
        mGoogleMap.addPolyline(mPolylineOptions); 
+0

Я не знаю, Лтч-точка xt point ... Я просто рисую линию со специальной шириной. – jion

1

Чтобы вычислить конец строки я использую:

SphericalUtil.computeOffset(LatLng,lenght,heading); 

Чтобы вычислить ширину в метрах I используйте это:

public Double calcw(GoogleMap map,int ancho,LatLng p) { 
    float tilt = map.getCameraPosition().tilt; 
    CameraPosition old=map.getCameraPosition(); 
    if(tilt!=0){ 
     CameraPosition cameraPosition = new CameraPosition.Builder() 
       .target(old.target)  // Sets the center of the map to Mountain View 
       .zoom(old.zoom)     // Sets the zoom 
       .bearing(old.bearing)    // Sets the orientation of the camera to east 
       .tilt(0)     // Sets the tilt of the camera to 30 degrees 
       .build(); 
     map.moveCamera(CameraUpdateFactory.newCameraPosition(cameraPosition)); 

    } 
    Point g1 =map.getProjection().toScreenLocation(p); 
    Point g2=map.getProjection().toScreenLocation(SphericalUtil.computeOffset(p,ancho/10,0)); 

    Double result=(distance(g1,g2)); 
    //Log.e("PROJ1",Double.toString(distance(g1,g2))); 

    map.moveCamera(CameraUpdateFactory.newCameraPosition(old)); 
    return result; 

     } 
    public double distance(Point a, Point b) 
{ 
    double dx = a.x - b.x; 
    double dy = a.y - b.y; 
    return Math.sqrt(dx * dx + dy * dy); 
} 
Смежные вопросы