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