2011-01-07 5 views
1

À l'heure actuelle, mon application reçoit le fichier KML du serveur et affiche tous les repères dans les cartes. Mais il y a trop de données qui vont et viennent, alors maintenant je ne veux recevoir qu'une courte chaîne (lat, lang pour quelques points) du serveur.Comment créer un fichier KML sous Android?

Est-il possible de créer un fichier KML sur un appareil Android (une API pour cela?

Répondre

2

Il ne semble pas être des bibliothèques KML qui fonctionnent bien avec Android en ce moment. J'utilise la bibliothèque Simple XML

Cependant, comme vous recevez déjà les données dans un format simplifié, vous feriez mieux d'utiliser directement l'API Google Maps. le KML, en l'envoyant à Google, puis en récupérant la carte rendue.Le tutoriel ici vous aidera à démarrer: http://developer.android.com/resources/tutorials/views/hello-mapview.html

+0

La façon la plus simple d'afficher plusieurs repères de KML est par l'intermédiaire d'intention: Uri uri1 = Uri.parse ("geo: 0,0 q = http:/urlOfKML"); final Intention mapIntent = nouvelle intention (Intent.ACTION_VIEW, uri1); startActivity (mapIntent); C'est pourquoi j'ai besoin de créer du KML sur l'appareil. – DixieFlatline

+0

Je mets à jour ma réponse avec plus de détails. À mon humble avis, vous êtes mieux d'utiliser l'API de carte directement au lieu de créer KML. – elevine

+0

Vous avez raison, je vais devoir créer des éléments de superposition à partir des coordonnées reçues et les mettre sur la carte. – DixieFlatline

1

Vous peut utiliser libkml, mais il est une bibliothèque native et vous auriez besoin du NDK ou gekmllib qui est une bibliothèque Java, vous pouvez inclure dans votre projet Android.

-1
public class CreateKmlFileActivity extends FragmentActivity { 

    private GoogleMap googleMap; 
    private SupportMapFragment supportMapFragment; 
    private ArrayList<LatLng> latLngArrayList = new ArrayList<>(); 
    private ArrayList<LatLng> latLngArrayListLine = new ArrayList<>(); 
    private Button button, buttonLine; 
    private XmlSerializer xmlSerializer; 
    private boolean flag = false; 
    private Handler handler; 
    private Runnable runnable; 
    GPSTracker gpsTracker; 
    private double lat; 
    private double lng; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_task3); 
     init(); 
     listener(); 
    } 

    private void init() { 
     button = (Button) findViewById(R.id.btn_find); 
     buttonLine = (Button) findViewById(R.id.btn_line); 
     supportMapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); 
     googleMap = supportMapFragment.getMap(); 
     gpsTracker = new GPSTracker(this); 
     lat = gpsTracker.latitude; 
     lng = gpsTracker.longitude; 
     handler = new Handler(); 
     runnable = new Runnable() { 
      @Override 
      public void run() { 
       gpsTracker.getLocation(); 
       if (lat != gpsTracker.latitude || lng != gpsTracker.longitude) { 
        latLngArrayListLine.add(new LatLng(gpsTracker.latitude, gpsTracker.longitude)); 
        lat = gpsTracker.latitude; 
        lng = gpsTracker.longitude; 
       } 
       handler.postDelayed(runnable, 1000 * 60); 
      } 
     }; 
     if (!gpsTracker.getIsGPSTrackingEnabled()) { 
      gpsTracker.showSettingsAlert(); 
     } 
     //gpsTracker.latitude 
    } 

    private void listener() { 
     googleMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() { 
      @Override 
      public void onMapClick(LatLng latLng) { 
       if (!flag) 
        latLngArrayList.add(latLng); 
       else 
        googleMap.animateCamera(CameraUpdateFactory.newLatLng(latLng)); 
      } 
     }); 

     buttonLine.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       handler.removeCallbacks(runnable); 
       flag = false; 
       try { 
        FileOutputStream fileOutputStream = openFileOutput("testLine.kml", Context.MODE_PRIVATE); 
        xmlSerializer = XmlPullParserFactory.newInstance().newSerializer(); 
        xmlSerializer.setOutput(fileOutputStream, "UTF-8"); 
        xmlSerializer.startDocument(null, null); 
        xmlSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); 
        xmlSerializer.startTag(null, "kml"); 
        xmlSerializer.startTag(null, "Document"); 
        xmlSerializer.startTag(null, "name"); 
        xmlSerializer.text("kmlFile"); 
        xmlSerializer.endTag(null, "name"); 
        xmlSerializer.startTag(null, "Style"); 
        xmlSerializer.attribute(null, "id", "transGreenPoly"); 
        xmlSerializer.startTag(null, "LineStyle"); 
        xmlSerializer.startTag(null, "width"); 
        xmlSerializer.text("1"); 
        xmlSerializer.endTag(null, "width"); 
        xmlSerializer.startTag(null, "color"); 
        xmlSerializer.text("7dff0000"); 
        xmlSerializer.endTag(null, "color"); 
        xmlSerializer.startTag(null, "colorMode"); 
        xmlSerializer.text("random"); 
        xmlSerializer.endTag(null, "colorMode"); 
        xmlSerializer.endTag(null, "LineStyle"); 
        xmlSerializer.endTag(null, "Style"); 
        xmlSerializer.startTag(null, "Folder"); 
        xmlSerializer.startTag(null, "name"); 
        xmlSerializer.text("Google Campus"); 
        xmlSerializer.endTag(null, "name"); 
        xmlSerializer.startTag(null, "visibility"); 
        xmlSerializer.text("1"); 
        xmlSerializer.endTag(null, "visibility"); 
        xmlSerializer.startTag(null, "description"); 
        xmlSerializer.text("Your Data"); 
        xmlSerializer.endTag(null, "description"); 
        xmlSerializer.startTag(null, "Placemark"); 
        xmlSerializer.startTag(null, "name"); 
        xmlSerializer.text("Data"); 
        xmlSerializer.endTag(null, "name"); 
        xmlSerializer.startTag(null, "visibility"); 
        xmlSerializer.text("1"); 
        xmlSerializer.endTag(null, "visibility"); 
        xmlSerializer.startTag(null, "styleUrl"); 
        xmlSerializer.text("#transRedPoly"); 
        xmlSerializer.endTag(null, "styleUrl"); 
        xmlSerializer.startTag(null, "LineString"); 
        xmlSerializer.startTag(null, "extrude"); 
        xmlSerializer.text("1"); 
        xmlSerializer.endTag(null, "extrude"); 
        xmlSerializer.startTag(null, "altitudeMode"); 
        xmlSerializer.text("relativeToGround"); 
        xmlSerializer.endTag(null, "altitudeMode"); 
        //xmlSerializer.startTag(null, "outerBoundaryIs"); 
        // xmlSerializer.startTag(null, "LinearRing"); 
        xmlSerializer.startTag(null, "coordinates"); 
        for (int i = 0; i < latLngArrayListLine.size(); i++) { 
         if (isPointInPolygon(latLngArrayListLine.get(i), latLngArrayList)) 
          xmlSerializer.text(latLngArrayListLine.get(i).longitude + "," + latLngArrayListLine.get(i).latitude + ",17 \n"); 
        } 
        xmlSerializer.endTag(null, "coordinates"); 
        // xmlSerializer.endTag(null, "LinearRing"); 
        //xmlSerializer.endTag(null, "outerBoundaryIs"); 
        xmlSerializer.endTag(null, "LineString"); 
        xmlSerializer.endTag(null, "Placemark"); 
        xmlSerializer.endTag(null, "Folder"); 
        xmlSerializer.endTag(null, "Document"); 
        xmlSerializer.endTag(null, "kml"); 
        xmlSerializer.endDocument(); 
        xmlSerializer.flush(); 
        fileOutputStream.close(); 

       } catch (IOException | XmlPullParserException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 



    } 


} 
+0

Un tas de code sans aucune explication est à peine une réponse. – m02ph3u5

Questions connexes