[我想在地图上绘制自由手多边形。我从简单的Google地图开始,然后绘制多边形,它可以正常工作,但现在我正在寻找用户如何通过单击地图上的点并在中间点拉伸标记来绘制多边形在多边形上。
现在我的多边形地图看起来像:
并且我想实现:
这里是我的代码:
public class MapActivity extends FragmentActivity implements OnMapReadyCallback {
private GoogleMap mMap;
Button save_field;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
// Retrieve the content view that renders the map.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
FrameLayout Frame_map = (FrameLayout) findViewById(R.id.frame_map);
Button btn_draw_State = (Button) findViewById(R.id.btn_draw_State);
final Boolean[] Is_MAP_Moveable = {false}; // to detect map is movable
// Button will change Map movable state
btn_draw_State.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Is_MAP_Moveable[0] = !Is_MAP_Moveable[0];
}
});
}
public GoogleMap getmMap() {
return mMap;
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
/*polygon should be declared as member of the fragment class if you want just one polygon at a time*/
final List<LatLng> latLngList = new ArrayList<>(); // list of polygons
final List<Marker> markerList = new ArrayList<>();
mMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
@Override
public void onMapClick(final LatLng latLng) {
MarkerOptions markerOptions = new MarkerOptions(); //create marker options
markerOptions.position(latLng);
markerOptions.title(latLng.latitude + ":" + latLng.longitude);
mMap.clear();
mMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
mMap.animateCamera(CameraUpdateFactory.newLatLng(latLng));
Marker marker = mMap.addMarker(markerOptions);
latLngList.add(latLng);
markerList.add(marker);
Polygon polygon = null;
if (polygon != null ) polygon.remove(); // remove the previously drawn polygon
PolygonOptions polygonOptions = new PolygonOptions().addAll(latLngList).clickable(true);
polygon = mMap.addPolygon(new PolygonOptions().addAll(latLngList).fillColor(Color.BLUE).strokeColor(Color.RED));//add new polygon
}
});
save_field = findViewById(R.id.save);
save_field.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(MapActivity.this, Save_Fields.class));
finish();
}
});
}
}
我已经在这个主题上进行了很多研究和开发,但是没有找到在Google Maps中实现这种功能的完美方法。如果有人知道该方法,请帮助我找出解决方案。预先感谢您:)
使用MapDrawingTools库在Google Map中绘制多边形,折线和点,并将坐标返回到您的应用。该库对于选择多个点或绘制土地边界以从用户获取数据的应用程序很有用。
使用指南
在您的应用中添加此代码:
DrawingOption.DrawingType currentDrawingType = DrawingOption.DrawingType.POLYGON;
Intent intent =
new DrawingOptionBuilder()
.withLocation(35.744502, 51.368966)
.withMapZoom(14)
.withFillColor(Color.argb(60, 0, 0, 255))
.withStrokeColor(Color.argb(100, 255, 0, 0))
.withStrokeWidth(3)
.withRequestGPSEnabling(false)
.withDrawingType(currentDrawingType)
.build(getApplicationContext());
startActivityForResult(intent, REQUEST_CODE);
绘制元素并单击完成图标后,数据将返回您的活动
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (resultCode == RESULT_OK && requestCode == REQUEST_CODE && data !=
null) {
DataModel dataModel =
data.getExtras().getParcelable(MapsActivity.POINTS);
LatLng[] points=dataModel.getPoints();
}
}
快乐编码:)