Вставьте сбор данных листовки или карту geojson.io в форму

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

Есть ли способ убрать что-то вроде geojson.io или даже просто карту листовки с leaflet.draw, а затем передать полученные координаты в текст, который можно отправить по электронной почте?

Опять же, мои потребности являются основными. Одна форма будет нанесена на карту за раз. Чем меньше визуальных опций и элементов управления, тем лучше. Моя аудитория в основном очень нетехническая.

Похоже, что этот пользователь был пытался задать тот же вопрос, но не продвинулся далеко.

Спасибо!


person jolene    schedule 13.09.2016    source источник


Ответы (2)


Как объясняется здесь, вы не можете напрямую отправлять свои данные geojson, но можете пусть браузер откроет почтовый клиент с предустановленными данными.

  var text=JSON.stringify(drawnItems.toGeoJSON());
  window.open('mailto:[email protected]?subject=subject&body=' + text);

Вот полный пример

person YaFred    schedule 13.09.2016
comment
Это блестяще. Именно то, что я искал. Думаю, со временем я смогу превратить это во что-то действительно функциональное. Спасибо за помощь в восполнении пробелов. - person jolene; 13.09.2016

Быстрое подтверждение концепции, адаптированный код из примера Leaflet.draw:

var drawControl = new L.Control.Draw({
  edit: {
    featureGroup: drawnItems
  }
});
map.addControl(drawControl);

map.on('draw:created', function(e) {
  var layer = e.layer,
      popupContent = layer.toGeoJSON ?
        JSON.stringify(layer.toGeoJSON()) : "(no data)";

  drawnItems.addLayer(layer);

  layer.bindPopup(popupContent).openPopup();
});

Это преобразует нарисованный элемент в строку GeoJSON и отображает его во всплывающем окне, привязанном к элементу.

Демонстрация: https://jsfiddle.net/3v7hd2vx/75/

person ghybs    schedule 13.09.2016
comment
Спасибо! Это полезное начало. Я все еще работаю над тем, чтобы вывести geojson таким образом, чтобы пользователи не перегружались просмотром кода. Но это прекрасная отправная точка. - person jolene; 13.09.2016