在Google地图上指定一个区域作为支持区域 - Google Maps Android Api

时间:2018-03-05 06:59:59

标签: android google-maps google-maps-android-api-2

我在Android项目中使用Google Map API,一切正常,但我希望在地图上有一个支持区域,以允许用户在该区域固定地址。

在JavaScript中有一个from custom_user.models import AbstractEmailUser class Profile(AbstractEmailUser): account_address = models.CharField(max_length=30, blank=True) 和一个监听器,可以找出kmllayer点击。通过这种方式,我得到了点击点的纬度和经度。

但是在android中,kmlLayer只有一个kmlLayer监听器,(Google Map Android kmlLayer Documentation)我想用kml多边形显示我的区域,只是让它可以点击或获得点击点的经纬度层。

除了获得我上面解释的触摸点的纬度和经度之外,我可以得到地图中心坐标。因此,如果我可以检查地图中心是否在kml多边形中,我的问题将解决!

为了解决我的问题,我尝试了许多方法和许多技术,并提出了很多问题。在one of my questions中,我尝试在地图图层上触发触控侦听器。

我也为我可怜的英语道歉,我想我的解释很清楚如果您不这么认为,请发表评论,我会解释得更多!

1 个答案:

答案 0 :(得分:1)

首先你应该创建一个LatLngBounds.Builder的对象,然后像这样迭代KML KmlContainer

public void accessContainers(Iterable<KmlContainer> containers) {
    for(KmlContainer c : containers) {
        if(c.hasPlacemarks()) {
            for(KmlPlacemark p : c.getPlacemarks()) {
                Geometry g = p.getGeometry();
                Object object = g.getGeometryObject();

                if(object instanceof LatLng) {
                    LatLng latlng = (LatLng)object;
                    latLngBoundsBuilder.include(latlng);
                }

                if(object instanceof List<?>) {
                    List<LatLng> list = (List<LatLng>)object;
                    for(LatLng latlng : list) {
                        latLngBoundsBuilder.include(latlng);
                    }
                }

                Log.d(TAG, g.getGeometryType() + ":" + object.toString());
            }
        }
        if(c.hasContainers()) {
            accessContainers(c.getContainers());
        }
    }
}

现在使用latLngBoundsBuilder.build()获取LatLngBounds的对象。然后实施setOnCameraIdleListener并在onCameraIdle内检查谷歌地图中心是否在该范围内

latLngBounds.contains(map.getCameraPosition().target)