我在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中,我尝试在地图图层上触发触控侦听器。
我也为我可怜的英语道歉,我想我的解释很清楚如果您不这么认为,请发表评论,我会解释得更多!
答案 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)