Невозможно нарисовать многоугольник на карте Google - PullRequest
2 голосов
/ 17 марта 2020

Я создал приложение, в котором я пытаюсь нарисовать многоугольник на текущем месте на карте Google. но, потому что не выдает никакой ошибки, я не понимаю, почему, но я не могу нарисовать полигон. Мне действительно нужна помощь, если кто-нибудь знает, что не так с моим кодом, тогда, пожалуйста, помогите мне: (

Вот моя активность на карте, где я пишу код для рисования полигона:

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

Location currentLocation;
private GoogleMap googleMap;
private Polygon polygon;
private ArrayList<LatLng> arrayPoints = null;
FusedLocationProviderClient fusedLocationProviderClient;
private static final int REQUEST_CODE = 101;
private boolean checkClick = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);

    fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
    fetchLastLocation();       

}

private void fetchLastLocation() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION},REQUEST_CODE);
        return;
    }
    Task<Location> task = fusedLocationProviderClient.getLastLocation();
    task.addOnSuccessListener(new OnSuccessListener<Location>() {
        @Override
        public void onSuccess(Location location) {

            if (location != null){
                currentLocation = location;
                Toast.makeText(getApplicationContext(),currentLocation.getLatitude() +""+ currentLocation.getLongitude(),Toast.LENGTH_LONG).show();
                SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                        .findFragmentById(R.id.map);
                mapFragment.getMapAsync(MapsActivity.this);
            }
        }
    });
}

public GoogleMap getmMap() {
    return mMap;

}

@Override
public void onMapReady(final GoogleMap googleMap) {

    final List<LatLng> latLngList = new ArrayList<>(); // list of polygons
    final List<Marker> markerList = new ArrayList<>();
    mMap = googleMap;

            LatLng latLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
            MarkerOptions markerOptions = new MarkerOptions().position(latLng).title(latLng.latitude + ":" + latLng.longitude);
            googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
            googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 10));
            googleMap.addMarker(markerOptions);
            Marker marker =googleMap.addMarker(markerOptions);
            markerList.add(marker);
            latLngList.add(latLng);

            mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

            @Override
            public void onMapClick(final LatLng latLng) {

                if (polygon != null) {
                    polygon.remove();
                }

                PolygonOptions polygonOptions = new PolygonOptions();
                polygonOptions.fillColor(Color.CYAN);
                polygonOptions.strokeColor(Color.BLUE);
                polygonOptions.strokeWidth(5);
                polygonOptions.addAll(latLngList);
                polygon = mMap.addPolygon(polygonOptions);

        }
    });
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode){
        case REQUEST_CODE:
            if (grantResults.length> 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
              fetchLastLocation();
        }
      }
   }
 }

Ответы [ 2 ]

2 голосов
/ 17 марта 2020

Используйте этот код:

@Override
public void onMapReady(GoogleMap googleMap) {

    final List<LatLng> latLngList = new ArrayList<>(); // list of polygons
    final List<Marker> markerList = new ArrayList<>();
    mMap = googleMap;

    LatLng center = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
    final MarkerOptions markerOptions = new MarkerOptions().position(center).title(center.latitude + ":" + center.longitude);
    mMap.clear();
    googleMap.animateCamera(CameraUpdateFactory.newLatLng(center));
    googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(center, 10));
    googleMap.addMarker(markerOptions);

    mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {

        @Override
        public void onMapClick(final LatLng latLng) {

            Marker marker = mMap.addMarker(new MarkerOptions().position(latLng).draggable(true));
            markerList.add(marker);
            latLngList.add(latLng);

            if (polygon != null) {
                polygon.remove();
            }

            PolygonOptions polygonOptions = new PolygonOptions();
            polygonOptions.fillColor(Color.CYAN);
            polygonOptions.strokeColor(Color.BLUE);
            polygonOptions.strokeWidth(5);
            polygonOptions.addAll(latLngList);
            polygon = mMap.addPolygon(polygonOptions);

        }
    });
}
0 голосов
/ 17 марта 2020

Кажется, что ваш latLngList содержит только одну добавленную точку в onMapReady():

LatLng latLng = new LatLng(currentLocation.getLatitude(), currentLocation.getLongitude());
...
latLngList.add(latLng);

Нет других мест, где новые точки добавляются к latLngList.

...