2015-09-30 2 views
2

Я хочу наложить наложение на карты Google, где все, кроме радиуса 1,5 км вокруг определенной точки, затеняется. Я попытался использовать круг с огромным количеством границ для этого, поэтому я бы поставил прозрачный центр и наложенный цвет на границе, чтобы достичь этого, но он не отображает ОК.Рисовать карты Donut google Android

map.addCircle(new CircleOptions() 
      .center(london) 
      .radius(500) 
      .strokeWidth(100) 
      .strokeColor(R.color.map_overlay_color) 
      .fillColor(Color.RED)); // not transparent for showcase 

http://i.stack.imgur.com/6NFfI.png

Так я решил сделать это с полигона, используя отверстие.

List<LatLng> points = new ArrayList<LatLng>(); 
    points.add(new LatLng(london.latitude-2, london.longitude-2)); 
    points.add(new LatLng(london.latitude-2, london.longitude+2)); 
    points.add(new LatLng(london.latitude + 2, london.longitude + 2)); 
    points.add(new LatLng(london.latitude + 2, london.longitude - 2)); 


    List<LatLng> hole = new ArrayList<LatLng>(); 
    for(int i = 0; i < 360; i += 1){ 
     LatLng coords = new LatLng(london.latitude + (radius * Math.cos(Math.toRadians(i))), london.longitude + (radius * Math.sin(Math.toRadians(i)))); 
     hole.add(coords); 
     Log.d("HOLE", coords.toString()); 
    } 


    map.addPolygon(new PolygonOptions() 
      .addAll(points) 
      .addHole(hole) 
      .strokeWidth(0) 
      .fillColor(R.color.map_overlay_color)); 

Но расстояние между долготами варьируется в зависимости от положения центра, поэтому я получаю что-то вроде этого. http://i.stack.imgur.com/kSXAB.png Что было бы идеально, если бы оно не было овальным :). Я узнал пример (jsfiddle.net/doktormolle/NLHf9) JS в Интернете, но я не могу найти функцию google.maps.geometry.spherical.computeOffset в java.

Любая помощь будет оценена по достоинству.

ответ

3

В Android есть метод SphericalUtil.computeOffset(), который возвращает LatLng в результате перемещения расстояния от начала координат в указанном заголовке.

Пример кода на основе вашего публикуемую код:

 LatLng locationSF = new LatLng(37.7577, -122.4376); 
     mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(37.7577, -122.4376), 12)); 

     List<LatLng> points = new ArrayList<LatLng>(); 
     points.add(new LatLng(locationSF.latitude-2, locationSF.longitude-2)); 
     points.add(new LatLng(locationSF.latitude-2, locationSF.longitude+2)); 
     points.add(new LatLng(locationSF.latitude+2, locationSF.longitude+2)); 
     points.add(new LatLng(locationSF.latitude+2, locationSF.longitude-2)); 


     List<LatLng> hole = new ArrayList<LatLng>(); 
     float p = 360/360; 
     float d =0; 
     for(int i=0; i < 360; ++i, d+=p){ 
      hole.add(SphericalUtil.computeOffset(locationSF, 5000, d)); 
     } 

     mMap.addPolygon(new PolygonOptions() 
       .addAll(points) 
       .addHole(hole) 
       .strokeWidth(0) 
       .fillColor(Color.argb(150, 0, 0, 0))); 

enter image description here

Смежные вопросы