Экспорт файла GPX из листовки

Что я хочу сделать, так это позволить пользователям создать файл GPX, выбрав некоторые функции GeoJson в Leaflet. Я делаю это следующим образом: создаю новый слой GeoJson для хранения выбранных функций, а затем преобразовываю его в gpx с помощью плагина togpx (https://github.com/tyrasd/togpx). Теперь у меня есть файл gpx, но я не знаю, как разрешить пользователям загружать его. Какие-либо предложения? Вот мой код:

var GPXfile;
var trails = new L.GeoJSON.AJAX('data/trasee.geojson', {
    onEachFeature: function(feature, layer) {
        layer.on({
            click: function () {
                var selectedGeojson = {
                  "type": "FeatureCollection",
                  "features": [
                    {
                      "type": "Feature",
                      "properties": {
                       "name": "Rocka Rolla"
                      },
                      "geometry": {
                        "type": "LineString",
                        "coordinates": feature.geometry.coordinates
                      }
                    }]
                }
                GPXfile = togpx(selectedGeojson);
            }
        })
    }
}).addTo(map);

JsFiddle может помочь: http://jsfiddle.net/pufanalexandru/20ara4qe/1/


person Alexandru Pufan    schedule 28.01.2015    source источник


Ответы (1)


Вы можете попробовать это...

Ссылка для запуска загрузки:

<a href="#" download="MyTracks.gpx" id="exportGPX">Export to file</a>

Некоторый javascript (вы должны включить jquery):

$("#exportGPX").on('click', function (event) {

        // prepare the string that is going to go into the href attribute
        // data:mimetype;encoding,string
        data = 'data:application/javascript;charset=utf-8,' + encodeURIComponent(gpxData);

        // set attributes href and target in the <a> element (with id  exportGPX)
        $(this).attr({
            'href': data,
            'target': '_blank'
        });

        // let the click go through
    });

Пример здесь: http://jsfiddle.net/FranceImage/vxe23py4/

Примечание: это работает с Chrome, но вы должны попробовать и другие браузеры.

person YaFred    schedule 28.01.2015
comment
Работает как шарм, но, учитывая, что я новичок в Javascript, не могли бы вы объяснить мне эту часть кода, пожалуйста: 'data:application/javascript;charset=utf-8,' + encodeURIComponent(gpxData); Или просто дайте мне ссылку, где я могу прочитать об этом - person Alexandru Pufan; 28.01.2015
comment
Цель состоит в том, чтобы отредактировать атрибуты href и target перед обработкой клика. В атрибуте href вы можете поместить некоторые данные (data:mimetype;encoding,string). Строка экранируется с помощью функции encodeURIComponent. - person YaFred; 28.01.2015