将点添加到多边形会在Google Maps Android中生成星形
我尝试在Android中创建一个闭合多边形,如果用户触摸屏幕并向多边形添加新点,该多边形将展开。但是我得到的不是一个区域,而是一个以第一个坐标为中心点的星形 我使用了以下代码:将点添加到多边形会在Google Maps Android中生成星形,android,google-maps-android-api-2,Android,Google Maps Android Api 2,我尝试在Android中创建一个闭合多边形,如果用户触摸屏幕并向多边形添加新点,该多边形将展开。但是我得到的不是一个区域,而是一个以第一个坐标为中心点的星形 我使用了以下代码: @Override public void onMapClick(LatLng latLng) { googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); //Toast.makeText(this,latLng.toStr
@Override
public void onMapClick(LatLng latLng)
{
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
//Toast.makeText(this,latLng.toString(),Toast.LENGTH_SHORT).show();
if(shape==null)
{
shape=googleMap.addPolygon(new PolygonOptions()
.add(latLng)
.strokeColor(Color.RED));
//line.setGeodesic(true);
}
else
{
List<LatLng> points=shape.getPoints();
points.add(latLng);
shape.setPoints(points);
}
}
@覆盖
公共无效的点击(LatLng LatLng)
{
googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
//Toast.makeText(this,latLng.toString(),Toast.LENGTH_SHORT).show();
if(shape==null)
{
shape=googleMap.addPolygon(新PolygonOptions()
.添加(板条)
.strokeColor(Color.RED));
//测地线(真);
}
其他的
{
列表点=shape.getPoints();
点。添加(latLng);
形状。设定点(点);
}
}
我应该更改什么?问题在于自动关闭功能。它会自动添加第一个坐标以使多边形闭合 在这里,您可以看到每次单击如何添加点:
01-25 18:48:59.976 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:04.367 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ -------------------
01-25 18:49:04.367 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:04.375 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (16.29905262358862,-38.32033362239599)
01-25 18:49:09.312 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ -------------------
01-25 18:49:09.312 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:09.312 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (16.29905262358862,-38.32033362239599)
01-25 18:49:09.312 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:09.312 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (26.115986226379576,-1.0547062754631042)
01-25 18:49:12.421 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ -------------------
01-25 18:49:12.421 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:12.421 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (16.29905262358862,-38.32033362239599)
01-25 18:49:12.421 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:12.421 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (26.115986226379576,-1.0547062754631042)
01-25 18:49:12.421 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-15.284186084328875,-28.12501810491085)
01-25 18:49:12.421 12761-12761/com.example.GoogleMapsTest W/DEBUG﹕ lat/lng: (-25.79989178579966,15.46873524785042)
因此,如果要创建动态多边形,请通过添加以下直线删除自动添加的点:
if(points.size()>2)
points.remove(points.size()-2);
您可以对代码进行以下更改:
void addNewPointtoPolygon(LatLng point,Polygon plg){
List<LatLng> lll = plg.getPoints();
if (lll.size() < 2)
lll.add(point);
else lll.add(lll.size() - 1, point);
plg.setPoints(lll);
}
void addNewPointtoPolygon(板条点,多边形plg){
List lll=plg.getPoints();
如果(lll.size()<2)
补充(点);
else lll.add(lll.size()-1,点);
plg.设定点(lll);
}
这太难看了。它们应该返回与通过设置点发送的数组完全相同的数组。我修改点列表,然后通过设置点进行设置。如果这是丑陋的,你将如何防止开始形状?我的意思是API所做的是丑陋的/不直观的。它不应该修改您发送给它的列表。顺便说一句,你可能想接受你的答案。我同意MaciejGorski的观点,那不是一个功能,那是一个错误/糟糕的设计。我在这里报道过:请随意主演。。。