开发者

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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜