Как создать файл KML в Android? - PullRequest
1 голос
/ 07 января 2011

В настоящее время мое приложение получает файл KML с сервера и отображает все метки на картах.Но слишком много данных идет назад и вперед, поэтому теперь я хочу получить только короткую строку (широта, ленг для нескольких точек) с сервера.

Можно ли создать файл KML на устройстве Android (любой API для этого?

Ответы [ 4 ]

2 голосов
/ 07 января 2011

Похоже, сейчас нет никаких библиотек KML, которые бы хорошо работали с Android. Я использую библиотеку Simple XML для анализа KML, и это хорошо работает.

Однако, поскольку вы уже получаете данные в упрощенном формате, было бы гораздо лучше, если бы вы сами использовали API Карт Google. Это сэкономит усилия по созданию KML, отправке его в Google, а затем возврату отрендеренной карты. Учебник здесь поможет вам начать: http://developer.android.com/resources/tutorials/views/hello-mapview.html

1 голос
/ 07 января 2011

Вы можете использовать libkml , но это нативная библиотека, и вам потребуется NDK или gekmllib это библиотека Java, которую вы можете попробовать включить в свой проект Android.

0 голосов
/ 29 марта 2018

Я знаю, что уже слишком поздно, но OSMBonusPack можно использовать для создания файлов kml.

0 голосов
/ 03 июня 2016
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();
                }
            }
        });



    }


}
...