How to get out all routes [PlaceMark, LineString] in a KML-file when added to Google Maps? [C#] -
using plugin: https://github.com/sushihangover/sushihangover.android.maps.utils
i adding route google map adding kml-layer it. foreach lat, lng , via polyline
create line! problem have kml-file has multiple routes , current code 1 of routes gets added map.
how adjust code in order every single route stored in kml-file?
my kml looks this:
<folder> <name>tracks</name> <description>a list of tracks</description> <visibility>1</visibility> <open>0</open> <placemark> <visibility>0</visibility> <open>0</open> <styleurl>#red</styleurl> <name>trackone</name> <description>track no. 1</description> <linestring> <extrude>true</extrude> <tessellate>true</tessellate> <altitudemode>clamptoground</altitudemode> <coordinates> 10.366653,26.281982,106.075562 10.366759,56.282024,99.504028 10.366846,26.282043,95.945312 </coordinates> </linestring> </placemark> </folder> <folder> <name>tracks</name> <description>a list of tracks</description> <visibility>1</visibility> <open>0</open> <placemark> <visibility>0</visibility> <open>0</open> <styleurl>#green</styleurl> <name>tracktwo</name> <description>track no. 2</description> <linestring> <extrude>true</extrude> <tessellate>true</tessellate> <altitudemode>clamptoground</altitudemode> <coordinates> 10.299386,26.278042,84.550720 10.299453,26.278004,83.942444 10.299522,26.277962,85.036560 10.299572,26.277916,85.828735 </coordinates> </linestring> </placemark> </folder> <folder> <name>waypoints</name> <description>a list of waypoints</description> <visibility>1</visibility> <open>0</open> <placemark> <name>name</name> <visibility>1</visibility> <open>0</open> <description> no info available </description> <lookat> <longitude>18.581586295142404</longitude> <latitude>36.313142255580445</latitude> <range>500</range> <tilt>45</tilt> <heading>0</heading> </lookat> <point> <coordinates> 10.581586295142404,36.313142255580445 </coordinates> </point> </placemark> <placemark> <name>name</name> <visibility>1</visibility> <open>0</open> <description> no info available </description> <lookat> <longitude>10.378910994617264</longitude> <latitude>36.285880605439296</latitude> <range>500</range> <tilt>45</tilt> <heading>0</heading> </lookat> <point> <coordinates> 11.378910994617264,26.285880605439296 </coordinates> </point> </placemark> </folder>
...etc few more routes in there. code looks this:
var container = (kmlcontainer)kmllayer.containers.iterator().next(); container = (kmlcontainer)container.containers.iterator().next(); var placemark = (kmlplacemark)container.placemarks.iterator().next(); if (placemark.hasgeometry && placemark.geometry kmllinestring) { var linestring = placemark.geometry kmllinestring; var latlngarray = linestring.geometryjavaobject() java.util.arraylist; var polylineoptions = new polylineoptions(); polylineoptions.invokecolor(0x66ff0000); using (var builder = new latlngbounds.builder()) { foreach (latlng latlng in latlngarray.toenumerable()) { builder.include(latlng); polylineoptions.add(new latlng(latlng.latitude, latlng.longitude)); } } map.addpolyline(polylineoptions);
i new kml-files if understand correctly need foreach out each single cointaner
? tried along these lines:
for (var contain = (kmlcontainer)kmllayer.containers.iterator(); contain.containers.iterator().next();) { //add above code in here }
or store list:
list<kmlcontainer> cointainers = kmllayer.containers.iterator().next() list<kmlcontainer>;
and add of above code inside for-loop. syntax wrong , not sure on how loop out each container.
how out of routes in kml-file , it's coordinates?
updated code:
foreach (kmlcontainer container in kmllayer.containers.toenumerable()) { system.diagnostics.debug.writeline("1"); // reach foreach (var property in container.properties.toenumerable()) { //this java hashmap<string, string> .... system.diagnostics.debug.writeline("2"); //i reach } if (container.hasplacemarks) { system.diagnostics.debug.writeline("3"); //i not reach strange since use same kml b4 found placemarks. } foreach (kmlplacemark placemark in container.placemarks.toenumerable()) { system.diagnostics.debug.writeline("4"); // not reach if (placemark.hasgeometry && placemark.geometry kmllinestring) { system.diagnostics.debug.writeline("5"); //not var linestring = placemark.geometry kmllinestring; var latlngarray = linestring.geometryjavaobject() java.util.arraylist; var polylineoptions = new polylineoptions(); polylineoptions.invokecolor(0x66ff0000); using (var builder = new latlngbounds.builder()) { foreach (latlng latlng in latlngarray.toenumerable()) { builder.include(latlng); polylineoptions.add(new latlng(latlng.latitude, latlng.longitude)); } } map.addpolyline(polylineoptions); } else { system.diagnostics.debug.writeline("6"); //not } } }
a kml folder
turned kmlcontainer
, need loop on kmllayer
containers , extract elements need:
note: using linq's toenumerable
convert java iterator
example:
if (kmllayer.containers != null) { foreach (kmlcontainer container in kmllayer.containers.toenumerable()) { foreach (var property in container.properties.toenumerable()) { //this java hashmap<string, string> .... log.debug(constants.tag, $"{property.tostring()} : {container.getproperty(property.tostring())}"); } foreach (kmlplacemark placemark in container.placemarks.toenumerable()) { log.debug(constants.tag, placemark.tostring()); } } }
output:
sometag: visibility : 1 sometag: name : tracks sometag: description : list of tracks sometag: open : 0 sometag: placemark{ sometag: style id=#red, sometag: inline style=null sometag: } sometag: visibility : 1 sometag: name : tracks sometag: description : list of tracks sometag: open : 0 sometag: placemark{ sometag: style id=#green, sometag: inline style=null sometag: }
to iterate container w/ containers:
if (kmllayer.hascontainers) { void iterateproperties(kmlcontainer containers) { foreach (var property in containers.properties.toenumerable()) log.debug(constants.tag, $"{property.tostring()} : {containers.getproperty(property.tostring())}"); } void iteratelinestring(kmllinestring linestring) { var latlngarray = linestring.geometryjavaobject() java.util.arraylist; foreach (latlng item in latlngarray.toenumerable()) { log.debug(constants.tag, $"{item.latitude}:{item.longitude}"); } } void iterateplacemarks(kmlcontainer container) { foreach (kmlplacemark placemark in container.placemarks.toenumerable()) { iterateproperties(container); log.debug(constants.tag, placemark.tostring()); if (placemark.hasgeometry & placemark.geometry kmllinestring) iteratelinestring(placemark.geometry kmllinestring); } } void iteratesubcontainers(kmlcontainer container) { iterateproperties(container); iterateplacemarks(container); if (container.hascontainers) { foreach (kmlcontainer subcontainer in container.containers.toenumerable()) iteratesubcontainers(subcontainer); } } foreach (kmlcontainer container in kmllayer.containers.toenumerable()) iteratesubcontainers(container); }
Comments
Post a Comment