làm thế nào để vẽ đa giác bằng cách sử dụng Dấu và trung điểm của đa giác trong bản đồ google


9

Tôi muốn vẽ Đa giác bàn tay miễn phí trên Bản đồ. Tôi bắt đầu với Google Map đơn giản và vẽ đa giác & nó đang hoạt động bình thường nhưng bây giờ tôi đang tìm cách người dùng có thể vẽ đa giác bằng cách nhấp vào các điểm trên bản đồ và kéo dài điểm giữa đa giác.

bây giờ bản đồ của tôi với đa giác trông như sau:

điều này

và tôi muốn thực hiện:

điều này

đây là mã của tôi:

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

Tôi đã thực hiện nhiều Nghiên cứu và Phát triển về chủ đề này nhưng không có cách nào hoàn hảo để thực hiện một điều như vậy trong google Maps. Nếu có ai biết cách thì hãy giúp tôi tìm ra giải pháp. cảm ơn bạn trước :)

Câu trả lời:


4

Sử dụng thư viện MapDrawingTools để vẽ đa giác, đa tuyến và các điểm trong Google Map và trả lại tọa độ cho Ứng dụng của bạn. Thư viện này hữu ích cho một ứng dụng chọn nhiều điểm hoặc vẽ đường viền đất để lấy dữ liệu từ người dùng.

Hướng dẫn sử dụng

trong ứng dụng của bạn thêm mã này:

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

Sau khi vẽ phần tử và nhấp vào xong, dữ liệu sẽ trở lại hoạt động của bạn

 @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

Bản demo Youtube

Chúc mừng mã hóa :)


Tôi tải xuống mã MapDrawingTools từ github và tring để chạy nhưng nó hiển thị error: package rx.functions does not existlỗi này
Mrunal

Có, tôi thấy. Sử dụng trực tiếp. Tôi hy vọng nó hữu ích cho việc triển khai trường hợp của bạn 'com.github.bkhezry: MapDrawingTools: 1.1.3'
Daxesh Vekariya

vẫn nhận được cùng một lỗi
Mrunal

Hãy sử dụng như thế này. sao chép tất cả các gói từ thư viện và thêm vào dự án của bạn. và sau đó thêm lib này trên Gradle. triển khai 'io.reactivex: rxjava: 1.3.0'
Daxesh Vekariya

1
Đây không phải là điều tôi muốn. tôi đang cố gắng vẽ đa giác có thể chỉnh sửa.
Mrunal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.