2010-11-29 14 views
0

Ich arbeite in einem Projekt, das analysiert und eine kml schreiben Datei und speichert in sd card, aber ich habe ein Problem, für Google Maps verfolgen den Pfad, den ich brauche, dass die Koordinaten alle zusammen sind, und meine Activity nur tun, wie diese kml Ausgabe:Kml Parsing in Android

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

und meine Hauptklasse:

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(placemark.getBytes()); 
     raf.close(); 

     } catch (IOException e) { 
      Log.e("Main", "Error in writting " + e.getMessage()); 
      SetStatus("Error in writting. " + e.getMessage()); 
     } 
} 

Was mache ich falsch?

Antwort

1

nicht sicher, was Sie mit

bedeuten ich brauche, dass die Koordinaten alle zusammen

Die Koordinaten alle zusammen in der <coordinates> Tag sind, sind drei Werte pro Spot (Breitengrad, Längengrad, Höhe).

Hier ist ein vollständiges Beispiel, wie Sie die KML-Datei zu lesen und die Karte Pfad eines darauf basierenden ziehen:

How to draw a path on a map using kml file?

0

Um einen Pfad zu zeichnen, Legen Sie alle Punkte in der gleichen Ortsmarke und Linestring Ist das, was du möchtest machen? Die Frage ist nicht sehr klar.

z.B.

<PlaceMark> 
... 
<LineString> 
    ... 
    <coordinates> 
    -7.178449630737305,41.48063600063324,274.0 
    ... append other points here .... 
    </coordinates> 
</LineString> 
</PlaceMark>