Google지도에서 마커 및 폴리 라인의 중간 점을 사용하여 다각형을 그리는 방법


9

지도에 Free Hand Polygon을 그리려고합니다. 간단한 Google Map으로 시작하여 다각형을 그리면 제대로 작동하지만 이제는지도에서 점을 클릭하고 마커를 중간 지점에서 늘려서 다각형을 그릴 수있는 방법을 찾고 있습니다. 다각형.

이제 다각형이있는 내지도는 다음과 같습니다.

이

그리고 나는 구현하고 싶다 :

이

여기 내 코드가 있습니다 :

     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지도에서 그러한 것을 구현하는 완벽한 방법을 얻지 못했습니다. 미리 감사드립니다 :)

답변:


4

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

MapDrawing 도구

유튜브 데모

행복한 코딩 :)


github 및 tring에서 MapDrawingTools 코드를 다운로드하여 실행하지만 error: package rx.functions does not exist다음 오류가 표시됩니다.
Mrunal

그래, 난 참조. 직접 사용하십시오. 귀하의 사례 구현 'com.github.bkhezry : MapDrawingTools : 1.1.3'에 도움이 되길 바랍니다.
Daxesh Vekariya

여전히 같은 오류가 발생합니다
Mrunal

이렇게 사용하십시오. 라이브러리에서 모든 패키지를 복사하고 프로젝트에 추가하십시오. 그런 다음 Gradle 에이 lib를 추가하십시오. 구현은 'io.reactivex : rxjava : 1.3.0'
Daxesh Vekariya

1
이것은 내가 원하는 것이 아닙니다. 편집 가능한 다각형을 그리려고합니다.
Mrunal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.