Разбор Kml в Android - PullRequest
       4

Разбор Kml в Android

0 голосов
/ 29 ноября 2010

Я работаю в проекте, который анализирует и записывает файл kml и сохраняет в sd card, но у меня есть проблема, для карт Google отследите нужный мне путь, чтобы все координаты были вместе, а мои Activity просто так kml вывод:

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

И мой главный класс:

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());
      }
}

Что я делаю не так?

Ответы [ 2 ]

1 голос
/ 11 декабря 2010

Не уверен, что вы имеете в виду

мне нужно, чтобы все координаты вместе

Координаты все вместе в теге <coordinates>, 3 значения на точку (широта, долгота, высота).

Вот полный пример того, как прочитать файл kml и нарисовать путь карты на его основе:

Как нарисовать путь на карте, используя файл kml?

0 голосов
/ 11 декабря 2010

Чтобы нарисовать путь, поместите все точки в одном месте. Марк и LineString Это то, что вы хотите сделать? Вопрос не очень понятен.

, например

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