Kml Parsing in Android
I'm working in a project that parses and write a kml
file and stores in sd card
, but I have a problem, for google maps trace the path I need that the coordinates are all together, and my Activity
just do like this kml
output:
<?xml version="1.0"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Placemark>
<name>Untitled Path</name>
<Style id="RedLine">
<LineStyle>
<color>7f0000ff</color>
<width>4</width>
</LineStyle>
</Style>
<styleUrl>#RedLine</styleUrl>
<LineString>
<tessellate>1</tessellate>
<altitudeMode>absolute</altitudeMode>
<coordinates>
-7.178449630737305,41.48063600063324,274.0
</coordinates>
</LineString>
</Placemark>
<Placemark>
<name>Untitled Path</name>
<Style id="RedLine">
<LineStyle>
<color>7f0000ff</color>
<width>4</width>
</LineStyle>
</Style>
<styleUrl>#RedLine</styleUrl>
<LineString>
<tessellate>1</tessellate>
<altitudeMode>absolute</altitudeMode>
<coordinates>
-7.178449630737305,41.48063600063324,274.0
</coordinates>
</LineString>
</Placemark>
</kml>
And My Main Class:
private void WriteToFile(Location loc) {
if (!logToGpx && !logToKml) {
return;
}
try {
boolean brandNewFile = false;
// if (root.canWrite()){
// File gpxFolder = new File("/sdcard/GPSLogger");
File gpxFolder = new File(Environment.getExternalStorageDirectory(), "GPSLogger");
Log.i("MAIN", String.valueOf(gpxFolder.canWrite()));
if (!gpxFolder.exists()) {
gpxFolder.mkdirs();
brandNewFile = true;
}
if (logToGpx) {
WriteToGpxFile(loc, gpxFolder, brandNewFile);
}
if (logToKml) {
WriteToKmlFile(loc, gpxFolder, brandNewFile);
}
} catch (Exception e) {
Log.e("Main", "Nao foi possivel criar o ficheiro " + e.getMessage());
SetStatus("Nao e possivel escrever no ficheiro. " + e.getMessage());
}
}
private void WriteToKmlFile(Location loc, File gpxFolder, boolean brandNewFile) {
try {
File kmlFile = new File(gpxFolder.getPath(), currentFileName + ".kml");
if (!kmlFile.exists()) {
kmlFile.createNewFile();
brandNewFile = true;
}
Date now = new Date();
//SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
//String dateTimeString = sdf.format(now);
if (brandNewFile) {
FileOutputStream initialWriter = new FileOutputStream(kmlFile, true);
BufferedOutputStream initialOutput = new BufferedOutputStream(initialWriter);
String initialXml = "<?xml version=\"1.0\"?>"+ "<kml xmlns=\"http://www.opengis.net/kml/2.2\">" + "</kml>";
initialOutput.write(initialXml.getBytes());
// initialOutput.write("\n".getBytes());
initialOutput.flush();
initialOutput.close();
}
long startPosition = kmlFile.length() - 6;
String placemark = "<Placemark><name>" + now.toLocaleString()
+ "</name><description>" + now.toLocaleString()
+ "</description>" + "<Point><coordinates>"
+ String.valueOf(loc.getLongitude()) + ","
+ String.valueOf(loc.getLatitude()) + ","
+ String.valueOf(loc.getAltitude())
+ "</coordinates></Point></Placemark></kml>";
RandomAccessFile raf = new RandomAccessFile(kmlFile, "rw");
raf.seek(startPosition);
raf.write(pla开发者_开发技巧cemark.getBytes());
raf.close();
} catch (IOException e) {
Log.e("Main", "Error in writting " + e.getMessage());
SetStatus("Error in writting. " + e.getMessage());
}
}
What I'm doing wrong?
Not sure what you mean with
i need that the coordinates are all together
The coordinates are all together in the <coordinates>
tag, 3 values per spot (latitude, longitude, height).
Here's a complete sample how to read the kml file and draw the map path based on it:
How to draw a path on a map using kml file?
To draw a path, Put all points in the same placeMark and LineString Is that what you want to do? The question is not very clear.
e.g.
<PlaceMark>
...
<LineString>
...
<coordinates>
-7.178449630737305,41.48063600063324,274.0
... append other points here ....
</coordinates>
</LineString>
</PlaceMark>
精彩评论