如何从kml层android获取点列表
我正试图在我的android应用程序中获取我的kml层的坐标,但我似乎找不到该怎么做 我有这个kml层:如何从kml层android获取点列表,android,google-maps,android-maps,Android,Google Maps,Android Maps,我正试图在我的android应用程序中获取我的kml层的坐标,但我似乎找不到该怎么做 我有这个kml层: KmlLayer layer = new KmlLayer(mMap, R.raw.allowedarea, getApplicationContext()); 我试图得到他的边界点的纬度和长度列表 ArrayList<LatLnt> latlitArray = layer.soemthing(); ArrayList latlitArray=layer.soemthing(
KmlLayer layer = new KmlLayer(mMap, R.raw.allowedarea, getApplicationContext());
我试图得到他的边界点的纬度和长度列表
ArrayList<LatLnt> latlitArray = layer.soemthing();
ArrayList latlitArray=layer.soemthing();
可以找到任何东西,请大家帮忙。这将递归访问容器中的每个placemark几何体。我不知道获得的对象是否可以是除List和LatLng之外的任何其他类或集合的实例
public void accessContainers(Iterable<KmlContainer> containers) {
for(KmlContainer c : containers) {
if(c.hasPlacemarks()) {
for(KmlPlacemark p : c.getPlacemarks()) {
KmlGeometry g = p.getGeometry();
Object object = g.getGeometryObject();
if(object instanceof LatLng) {
LatLng latlng = (LatLng)object;
//Do more stuff with the point
}
if(object instanceof List<?>) {
List<LatLng> list = (List<LatLng>)object;
//Do more stuff with the list of points
}
Log.d(TAG, g.getGeometryType() + ":" + object.toString());
}
}
if(c.hasContainers()) {
accessContainers(c.getContainers());
}
}
}
public void访问容器(Iterable容器){
用于(KmlContainer c:集装箱){
如果(c.hasPlacemarks()){
对于(KmlPlacemark p:c.getPlacemarks()){
KmlGeometry g=p.getGeometry();
Object Object=g.getGeometryObject();
if(LatLng的对象实例){
LatLng LatLng=(LatLng)对象;
//用这个观点做更多的事情
}
if(列表的对象实例){
List=(List)对象;
//用点列表做更多的事情
}
Log.d(标记,g.getGeometryType()+”:“+object.toString());
}
}
if(c.hascanners()){
accessContainers(c.getContainers());
}
}
}
试试这个解决方案
try {
KmlLayer layer = new KmlLayer(googleMap, R.raw.zone, this);
layer.addLayerToMap();
Iterable<KmlContainer> containers = layer.getContainers();
accessContainers(containers);
} catch (XmlPullParserException | IOException e) {
e.printStackTrace();
}
public void accessContainers(Iterable<KmlContainer> containers) {
for (KmlContainer container : containers) {
if (container != null) {
if (container.hasContainers()) {
accessContainers(container.getContainers());
} else {
if (container.hasPlacemarks()) {
accessPlacemarks(container.getPlacemarks());
}
}
}
}
}
public void accessPlacemarks(Iterable<KmlPlacemark> placemarks) {
for (KmlPlacemark placemark : placemarks) {
if (placemark != null) {
KmlGeometry geometry = placemark.getGeometry();
if (geometry instanceof KmlPolygon) {
KmlPolygon polygon = (KmlPolygon) geometry;
mLatLngList.addAll(polygon.getOuterBoundaryCoordinates());
}
}
}
}
试试看{
Kmlayer层=新Kmlayer(谷歌地图,R.raw.zone,this);
layer.addLayerToMap();
Iterable containers=layer.getContainers();
容器(容器);
}捕获(XmlPullParserException | IOE异常){
e、 printStackTrace();
}
公共容器(可访问容器){
用于(KmlContainer容器:容器){
if(容器!=null){
if(container.hasContainers()){
accessContainers(container.getContainers());
}否则{
if(container.hasPlacemarks()){
accessPlacemarks(container.getPlacemarks());
}
}
}
}
}
公共无效访问placemarks(Iterable placemarks){
用于(KmlPlacemark placemark:placemarks){
if(placemark!=null){
KmlGeometry geometry=placemark.getGeometry();
if(KmlPolygon的几何体实例){
KmlPolygon多边形=(KmlPolygon)几何体;
mLatLngList.addAll(polygon.getOuterBoundaryCoordinates());
}
}
}
}
发布您的kml文件检查此SO问题以及它是否能帮助您:)虽然此代码可能会回答问题,但提供有关此代码回答问题的原因和/或方式的附加上下文可提高其长期价值。