如何从谷歌地图中的LatLng集获取区域

时间:2014-12-05 11:34:21

标签: android google-maps

我正在开发一个用户绘制多边形的应用程序。我有一套LatLng。现在我想显示属于LatLng集的所有标记。所有不属于我想要删除它的标记。我附上了一张图片。我怎样才能实现这一目标。在此先感谢。

static final LatLng HAMBURG = new LatLng(53.558, 9.927);
    static final LatLng cz1 = new LatLng(53.600, 9.927);
    static final LatLng KIEL = new LatLng(53.551, 9.993);
    private GoogleMap map;
    private CameraPosition cameraPosition;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map))
                .getMap();
        Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG)
                .title("Hamburg"));

        Marker cz = map.addMarker(new MarkerOptions().position(cz1)
                .title("cz"));
        Marker kiel = map.addMarker(new MarkerOptions()
                .position(KIEL)
                .title("Kiel")
                .snippet("Kiel is cool")
                .icon(BitmapDescriptorFactory
                        .fromResource(R.drawable.ic_launcher)));

        // Move the camera instantly to hamburg with a zoom of 15.
        map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));

        Button button = (Button) findViewById(R.id.map_button);
        button.setOnClickListener(this);
        // Zoom in, animating the camera.
        map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
        map.setOnCameraChangeListener(this);
    }

    @Override
    public void onCameraChange(CameraPosition arg0) {
        cameraPosition = arg0;
    }

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(MainActivity.this, FreeDrawActivity.class);
        Bundle bundle = new Bundle();
        bundle.putParcelable("position", cameraPosition);
        intent.putExtras(bundle);
        startActivityForResult(intent, 0);
    }

    @Override
    protected void onActivityResult(int arg0, int arg1, Intent arg2) {
        super.onActivityResult(arg0, arg1, arg2);
        if (arg2 != null) {
            Draw_Map((ArrayList<LatLng>) arg2.getSerializableExtra("result"));
        }

    }

    public void Draw_Map(ArrayList<LatLng> val) {
        PolygonOptions  rectOptions = new PolygonOptions();
        rectOptions.addAll(val);
        rectOptions.strokeColor(Color.BLUE);
        rectOptions.strokeWidth(7);
        rectOptions.fillColor(Color.argb(125, 255, 255, 255));
        Polygon polygon = map.addPolygon(rectOptions);
    }

2 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你想确定一个点(即“标记”)是否在用户绘制的给定多边形的内部或外部。在这种情况下,您需要实现此算法http://en.wikipedia.org/wiki/Point_in_polygon

答案 1 :(得分:0)

要检查,给定的latlng属于一组latlng。然后,您需要使用google开发人员Download from here提供的PolyUtil库。并使用

PolyUtil.containsLocation(LatLng Object, set of lat lng, boolean)

如果给定的latlng属于latlngs集,则此方法返回true。其他明智的错误

代表: -

if(PolyUtil.containsLocation(KIEL, val, false)) {
            kiel = map.addMarker(new MarkerOptions()
            .position(KIEL)
            .title("Kiel")
            .snippet("Kiel is cool")
            .icon(BitmapDescriptorFactory
                    .fromResource(R.drawable.ic_launcher)));
        }