簡體   English   中英

無法在谷歌地圖上繪制多邊形

[英]Unable to Draw Polygon on Google map

我創建了應用程序,我試圖在 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();
        }
      }
   }
 }

使用此代碼:

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

        }
    });
}

似乎您的latLngList僅包含在onMapReady()添加的onMapReady()

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

沒有其他地方可以將新點添加到latLngList

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM