google haritalarındaki işaretleyicilerin işaretlerini ve orta noktalarını kullanarak çokgen çizme


10

Harita üzerinde bir Serbest El Poligonu çizmek istiyorum. çokgen.

şimdi çokgen ile benim harita gibi görünüyor:

bu

ve uygulamak istiyorum:

bu

İşte benim kod:

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

Bu konuda çok sayıda Araştırma ve Geliştirme yaptım, ancak google Maps.'de böyle bir şeyi uygulamak için mükemmel bir yol alamadım. şimdiden teşekkür ederim:)

Yanıtlar:


4

Google Map'de çokgen, çok çizgi ve noktalar çizmek ve koordinatları Uygulamanıza döndürmek için MapDrawingTools kitaplığını kullanın. Bu kütüphane, kullanıcılardan veri almak için birden fazla nokta seçen veya arazi sınırını çizen bir uygulama için kullanışlıdır.

Kullanım Kılavuzu

uygulamanıza şu kodu ekleyin:

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

Elemanı çizip bitirildikten sonra, veriler etkinliğinize geri dönüş olacak

 @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

Youtube Demosu

Mutlu Kodlama :)


i github ve tring çalıştırmak MapDrawingTools kodu indirmek ama error: package rx.functions does not existbu hatayı gösterir
Mrunal

Evet görüyorum. Doğrudan kullanın. Umarım dava uygulamanız için yararlıdır 'com.github.bkhezry: MapDrawingTools: 1.1.3'
Daxesh Vekariya

hala aynı hatayı alıyorum
Mrunal

Lütfen böyle kullanın. tüm paketi kütüphaneden kopyalayın ve projenize ekleyin. ve sonra bu lib'i Gradle'a ekleyin. uygulama 'io.reactivex: rxjava: 1.3.0'
Daxesh Vekariya

1
İstediğim bu değil. düzenlenebilir çokgen çizmeye çalışıyorum.
Mart'ta Mrunal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.