【问题标题】:Unable to Draw Polygon on Google map无法在谷歌地图上绘制多边形
【发布时间】:2020-06-28 10:18:03
【问题描述】:

我创建了应用程序,我试图在谷歌地图上的当前位置绘制多边形。但因为它没有抛出任何错误,我不明白为什么但我无法绘制多边形。如果有人知道我的代码有什么问题,我真的需要帮助,请帮助我:(

这是我绘制多边形代码的地图活动:

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();
        }
      }
   }
 }

【问题讨论】:

    标签: android google-maps polygon draw


    【解决方案1】:

    使用此代码:

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

    【讨论】:

    • 非常感谢..它工作得很好,正如我想要的那样
    【解决方案2】:

    您的latLngList 似乎只包含在onMapReady() 中添加的一点:

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

    没有其他地方可以为latLngList添加新点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      • 1970-01-01
      • 2011-01-20
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      相关资源
      最近更新 更多