วิธีการวาดรูปหลายเหลี่ยมโดยใช้เครื่องหมายและจุดกึ่งกลางของ polylines ใน Google แผนที่


9

ฉันต้องการวาดรูปหลายเหลี่ยมมืออิสระบนแผนที่ฉันเริ่มต้นด้วย Google แผนที่แบบง่าย & วาดรูปหลายเหลี่ยมและทำงานได้อย่างถูกต้อง แต่ตอนนี้ฉันกำลังมองหาวิธีที่ผู้ใช้สามารถวาดรูปหลายเหลี่ยมได้โดยคลิกที่จุดบนแผนที่และยืดเครื่องหมายจุดกลางบน รูปหลายเหลี่ยม

ตอนนี้แผนที่ของฉันที่มีรูปหลายเหลี่ยมดูเหมือนว่า:

นี้

และฉันต้องการที่จะใช้:

นี้

นี่คือรหัสของฉัน:

     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 Maps.if หากใครรู้วิธีการแล้วโปรดช่วยฉันหาวิธีแก้ปัญหา ขอบคุณล่วงหน้า:)

คำตอบ:


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

MapDrawingTools

ตัวอย่าง Youtube

Happy Coding :)


ฉันดาวน์โหลดรหัส MapDrawingTools จาก github และ tring เพื่อให้ทำงานได้ แต่มันแสดงerror: package rx.functions does not existข้อผิดพลาดนี้
Mrunal

ใช่ฉันเห็น. ใช้มันโดยตรง ฉันหวังว่าจะเป็นประโยชน์ต่อการดำเนินการกับกรณีของคุณ 'com.github.bkhezry: MapDrawingTools: 1.1.3'
Daxesh Vekariya

ยังคงได้รับข้อผิดพลาดเดียวกัน
Mrunal

กรุณาใช้แบบนี้ คัดลอกแพคเกจทั้งหมดจากห้องสมุดและเพิ่มในโครงการของคุณ แล้วเพิ่ม lib นี้บน Gradle การดำเนินการ 'io.reactivex: rxjava: 1.3.0'
Daxesh Vekariya

1
นี่ไม่ใช่สิ่งที่ฉันต้องการ ฉันพยายามวาดรูปหลายเหลี่ยมที่แก้ไขได้
Mrunal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.