comment dessiner un polygone en utilisant des marqueurs et des points médians de polylignes dans google maps

9

Je veux dessiner un polygone à main libre sur la carte.J'ai commencé avec une simple carte Google et dessiner un polygone et cela fonctionne correctement, mais maintenant je cherche comment un utilisateur peut dessiner un polygone en cliquant sur des points sur la carte et en étirant des marqueurs au milieu des points sur la carte. polygone.

maintenant ma carte avec polygone ressemble à ceci:

cette

et je veux implémenter:

cette

voici mon code:

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

J'ai fait beaucoup de recherche et développement sur ce sujet, mais je n'ai pas réussi à mettre en œuvre une telle chose dans google maps.si quelqu'un connaît le chemin, alors aidez-moi à trouver une solution. Merci d'avance:)

Mrunal
la source

Réponses:

4

Utilisez la bibliothèque MapDrawingTools pour dessiner des polygones, des polylignes et des points dans Google Map et renvoyer les coordonnées à votre application. Cette bibliothèque est utile pour une application qui sélectionne plusieurs points ou dessine la frontière du terrain pour obtenir des données des utilisateurs.

Utiliser la directive

dans votre application ajoutez ce code:

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

Après avoir dessiné un élément et cliqué sur un fait, les données seront un retour à votre activité

 @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

Démo Youtube

Happy Coding :)

Daxesh Vekariya
la source
je télécharge le code MapDrawingTools depuis github et tring pour l'exécuter, mais cela montre error: package rx.functions does not existcette erreur
Mrunal
Oui je vois. Utilisez-le directement. J'espère que cela sera utile à l'implémentation de votre cas 'com.github.bkhezry: MapDrawingTools: 1.1.3'
Daxesh Vekariya
toujours la même erreur
Mrunal
Veuillez utiliser comme ceci. copiez tous les packages de la bibliothèque et ajoutez votre projet. puis ajoutez cette bibliothèque sur Gradle. implémentation 'io.reactivex: rxjava: 1.3.0'
Daxesh Vekariya
1
Ce n'est pas ce que je veux. j'essaie de dessiner un polygone modifiable.
Mrunal