cara menggambar poligon menggunakan Marker dan titik tengah polyline di google maps

9

Saya ingin menggambar Poligon Tangan Gratis di Peta. Saya mulai dengan Google Map sederhana & menggambar poligon & itu berfungsi dengan baik, tetapi sekarang saya mencari cara pengguna dapat menggambar poligon dengan mengklik titik di peta dan merentangkan spidol di tengah Poin di poligon.

sekarang peta saya dengan poligon terlihat seperti:

ini

dan saya ingin menerapkan:

ini

ini kode saya:

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

Saya telah melakukan banyak Penelitian dan Pengembangan pada topik ini tetapi tidak mendapatkan cara yang sempurna untuk mengimplementasikan hal seperti itu di google Maps.Jika ada yang tahu caranya maka tolong bantu saya untuk mencari solusinya. Terima kasih sebelumnya:)

Mrunal
sumber

Jawaban:

4

Gunakan pustaka MapDrawingTools untuk menggambar poligon, polyline, dan titik di Google Map dan mengembalikan koordinat ke Aplikasi Anda. Perpustakaan ini berguna untuk aplikasi yang mengambil banyak titik atau menggambar perbatasan tanah untuk mendapatkan data dari pengguna.

Gunakan Pedoman

di aplikasi Anda tambahkan kode ini:

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

Setelah menggambar elemen dan mengklik selesai, data akan kembali ke aktivitas Anda

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

MapDrawingTools

Demo Youtube

Selamat Coding :)

Daxesh Vekariya
sumber
saya mengunduh kode MapDrawingTools dari github dan tring untuk menjalankan tetapi ini menunjukkan error: package rx.functions does not existkesalahan ini
Mrunal
Ya, saya mengerti. Gunakan secara langsung. Saya harap ini berguna untuk implementasi kasus Anda 'com.github.bkhezry: MapDrawingTools: 1.1.3'
Daxesh Vekariya
masih mendapatkan kesalahan yang sama
Mrunal
Silakan gunakan seperti ini. salin semua paket dari perpustakaan dan tambahkan proyek Anda. dan kemudian tambahkan lib ini di Gradle. implementasi 'io.reactivex: rxjava: 1.3.0'
Daxesh Vekariya
1
Ini bukan yang saya inginkan. saya mencoba menggambar poligon yang dapat diedit.
Mrunal