Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 无法在Google地图上绘制多边形_Android_Google Maps_Polygon_Draw - Fatal编程技术网

Android 无法在Google地图上绘制多边形

Android 无法在Google地图上绘制多边形,android,google-maps,polygon,draw,Android,Google Maps,Polygon,Draw,我创建了一个应用程序,试图在谷歌地图的当前位置上绘制多边形。但因为它没有抛出任何错误,我不明白为什么,但我不能画多边形。我真的需要帮助如果有人知道我的代码有什么问题,请帮助我:( 以下是我的地图活动,我在其中编写了绘制多边形的代码: public class MapsActivity extends FragmentActivity implements OnMapReadyCallback { private GoogleMap mMap; Location currentLocation

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

以下是我的地图活动,我在其中编写了绘制多边形的代码:

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();
        }
      }
   }
 }
公共类MapsActivity扩展了FragmentActivity在MapreadyCallback上的实现{
私有谷歌地图;
位置当前位置;
私人谷歌地图谷歌地图;
私有多边形;
私有ArrayList arrayPoints=null;
FusedLocationProviderClient FusedLocationProviderClient;
私有静态最终整数请求_代码=101;
私有布尔checkClick=false;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_映射);
fusedLocationProviderClient=LocationServices.getFusedLocationProviderClient(此);
fetchLastLocation();
}
私有void fetchLastLocation(){
if(ActivityCompat.checkSelfPermission(this,Manifest.permission.ACCESS\u FINE\u LOCATION)!=PackageManager.permission\u已授予){
ActivityCompat.requestPermissions(这是一个新字符串[]{Manifest.permission.ACCESS\u FINE\u LOCATION},请求代码);
返回;
}
Task Task=fusedLocationProviderClient.getLastLocation();
task.addOnSuccessListener(新的OnSuccessListener(){
@凌驾
成功时的公共无效(位置){
如果(位置!=null){
当前位置=位置;
Toast.makeText(getApplicationContext(),currentLocation.getLatitude()+“”+currentLocation.getLatitude(),Toast.LENGTH_LONG).show();
SupportMapFragment mapFragment=(SupportMapFragment)getSupportFragmentManager()
.findFragmentById(R.id.map);
getMapAsync(MapsActivity.this);
}
}
});
}
公共谷歌地图getmMap(){
返回mMap;
}
@凌驾
4月1日公开作废(最终谷歌地图谷歌地图){
final List latLngList=new ArrayList();//多边形列表
最终列表标记列表=新的ArrayList();
mMap=谷歌地图;
LatLng LatLng=新LatLng(currentLocation.getLatitude(),currentLocation.getLength());
MarkerOptions MarkerOptions=newmarkeroptions().position(latLng.title)(latLng.latitude+“:”+latLng.longitude);
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng,10));
googleMap.addMarker(markerOptions);
Marker=googleMap.addMarker(markerOptions);
markerList.add(marker);
latLngList.add(latLng);
mMap.setOnMapClickListener(新的GoogleMap.OnMapClickListener(){
@凌驾
公共无效(最终板条){
如果(多边形!=null){
polygon.remove();
}
PolygonOptions PolygonOptions=新PolygonOptions();
多边形选项。填充颜色(颜色。青色);
多克隆选择。strokeColor(Color.BLUE);
脉冲宽度(5);
polygonooptions.addAll(拉丁英语);
多边形=mMap.addPolygon(多边形选项);
}
});
}
@凌驾
public void onRequestPermissionsResult(int-requestCode,@NonNull-String[]permissions,@NonNull-int[]grantResults){
super.onRequestPermissionsResult(请求代码、权限、授权结果);
开关(请求代码){
案例请求代码:
如果(grantResults.length>0&&grantResults[0]==已授予PackageManager.PERMISSION){
fetchLastLocation();
}
}
}
}

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


在其他地方,添加到
latLngList

的新点没有使用此代码的地方:

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

        }
    });
}
@覆盖
4月1日公开作废(谷歌地图谷歌地图){
final List latLngList=new ArrayList();//多边形列表
最终列表标记列表=新的ArrayList();
mMap=谷歌地图;
LatLng中心=新LatLng(currentLocation.getLatitude(),currentLocation.getLength());
最终标记选项标记选项=新标记选项().位置(中心).title(中心.纬度+“:”+中心.经度);
mMap.clear();
谷歌地图。动画美拉(CameraUpdateFactory。newLatLng(中));
googleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(中,10));
googleMap.addMarker(markerOptions);
mMap.setOnMapClickListener(新的GoogleMap.OnMapClickListener(){
@凌驾
公共无效(最终板条){
Marker Marker=mMap.addMarker(新MarkerOptions().position(latLng).draggable(true));
markerList.add(marker);
latLngList.add(latLng);
如果(多边形!=null){
polygon.remove();
}
PolygonOptions PolygonOptions=新PolygonOptions();
多边形选项。填充颜色(颜色。青色);
多克隆选择。strokeColor(Color.BLUE);
脉冲宽度(5);
polygonooptions.addAll(拉丁英语);
多边形=mMap.addPolygon(多边形选项);
}
});
}

非常感谢..它完全按照我的意愿工作
@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);

        }
    });
}