<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Parshin</id>
	<title>GIS-Lab - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.gis-lab.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Parshin"/>
	<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/w/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Parshin"/>
	<updated>2026-05-20T04:45:01Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.39.6</generator>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=GISConf_-_%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D0%B0_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8&amp;diff=23024</id>
		<title>GISConf - служба помощи</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=GISConf_-_%D1%81%D0%BB%D1%83%D0%B6%D0%B1%D0%B0_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D0%B8&amp;diff=23024"/>
		<updated>2015-11-11T16:02:44Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;На конференции Открытые ГИС планируется создать &amp;quot;Службу помощи&amp;quot; - отдельную стойку или стол, где каждый сможет подойти и задать свои вопросы одному из экспертов.&lt;br /&gt;
&lt;br /&gt;
==Как работает==&lt;br /&gt;
В этой секции работает группа умудренных экспертов, каждый из которых готов потратить от 30 до 60 минут своего времени на ответы по ГИС и около тематики.&lt;br /&gt;
Предполагается помещение на 5-7 человек для консультаций. На экране ноутбука (идеально - компьютер с двумя мониторами) эксперт может показать какие-то наглядные вещи.&lt;br /&gt;
Данный формат общения будет работать как минимум один день конференции.&lt;br /&gt;
&lt;br /&gt;
Компетенция эксперта может быть как технологической, так и тематической (например, GeoServer или Геомаркетинг). Для каждого эксперта можно определить круг компетенций (основная, второстепенные, &amp;quot;где-то что-то слышал&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
==Эксперты==&lt;br /&gt;
Имя и Фамилия. День, в который готов выступить. Время, которое готов потратить. '''Основные компетенции'''. Второстепенные компетенции. ''Ориентируюсь''. &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Имя&lt;br /&gt;
! Даты&lt;br /&gt;
! Время, ч&lt;br /&gt;
! Компетенции (основные)&lt;br /&gt;
! Компетенции (второстепенные)&lt;br /&gt;
|-&lt;br /&gt;
|Андрей Жуков&lt;br /&gt;
|21-22&lt;br /&gt;
|2&lt;br /&gt;
|GeoServer, картографические стили&lt;br /&gt;
|QGIS, Python&lt;br /&gt;
|-&lt;br /&gt;
|Максим Дубинин&lt;br /&gt;
|21-22&lt;br /&gt;
|0.5-1&lt;br /&gt;
|Развертывание, лицензирование&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Дмитрий Колесов&lt;br /&gt;
|21-22&lt;br /&gt;
|1&lt;br /&gt;
|GRASS GIS, обработка данных&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Александр Мурый&lt;br /&gt;
|21-22&lt;br /&gt;
|1-2&lt;br /&gt;
|GRASS GIS, GDAL, QGIS, shell+Python, Linux, OSGeo-Live, обработка ЦМР &lt;br /&gt;
|3D (Paraview, Meshlab), SAGA, другое СПО&lt;br /&gt;
|-&lt;br /&gt;
|Владислав Филиппов&lt;br /&gt;
|21-22&lt;br /&gt;
|1&lt;br /&gt;
|GeoServer, GeoServer+GeoWebCache&lt;br /&gt;
|QGIS, Python, OpenLayers&lt;br /&gt;
|-&lt;br /&gt;
|Александр Клешнин&lt;br /&gt;
|21-22&lt;br /&gt;
|1&lt;br /&gt;
|QGIS, PostGIS, GeoServer, web-картографические приложения на базе Leaflet, получение данных из OpenStreetMap&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Никита Лаврентьев&lt;br /&gt;
|21&lt;br /&gt;
|1-2&lt;br /&gt;
|QGIS, общие вопросы&lt;br /&gt;
| Ubuntu и работа  в СПО целом, веб-картография, ДДЗ &lt;br /&gt;
( космическая съемка, аэрофотосъемка с БПЛА)  &lt;br /&gt;
|-&lt;br /&gt;
|Александр Паршин&lt;br /&gt;
|21-22&lt;br /&gt;
|1&lt;br /&gt;
|Leaflet и приложения на её основе&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19671</id>
		<title>Механизм редактирования векторных данных в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19671"/>
		<updated>2014-05-21T14:39:35Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
&lt;br /&gt;
Техническое описание механизма редактирования векторных данных в GeoMixer WEB-GIS&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Исторически основной задачей Web-GIS была визуализация данных. Широкое распространение интернета позволило решить проблему доступности данных, а стремительное развитие браузеров и расширение возможностей HTTP предоставило новые возможности работы с пространственной информацией.&lt;br /&gt;
&lt;br /&gt;
Самые первые варианты web сервисов доступа к картам просто показывали статические картинки со стрелочками для перемещения в соседние области. Затем появился Google Maps с возможностью таскать карту мышкой и спутниковым покрытием на весь мир.&lt;br /&gt;
&lt;br /&gt;
На следующем шаге браузеры прокачали свои возможности по работе с векторными данными: появились VML и SVG, а позже Canvas и WebGL. Это позволило не просто рендерить картинки на сервере, а передавать клиенту исходные векторные данные для отрисовки в браузере. Интерактивность и анимация географических данных не заставили себя долго ждать…&lt;br /&gt;
&lt;br /&gt;
Логичным продолжением этой тенденции является возможность создавать и модифицировать векторные данные непосредственно в браузере. Хорошим примером развития возможностей редактирования в web является проект OpenStreetMap. Сначала появился [http://josm.openstreetmap.de/ редактор], написанный на Java, потом возник проект [http://wiki.openstreetmap.org/wiki/Potlatch_2 редактора в браузере], написанный на Flash, который в настоящее время уступает место полностью HTML редактору [http://ideditor.com/ iD]. Редактирование непосредственно в браузере даже такой большой базы данных как OSM сейчас стало реальностью.&lt;br /&gt;
&lt;br /&gt;
В [http://geomixer.ru/ ГеоМиксере] так же относительно недавно появилась возможность редактировать данные векторных слоёв. Технические подробности реализации этого функционала и являются основным содержанием данной статьи.&lt;br /&gt;
&lt;br /&gt;
== Что нам нужно для счастья ==&lt;br /&gt;
&lt;br /&gt;
При реализации редактирования векторных объектов мы ставили перед собой следующие задачи:&lt;br /&gt;
* Сразу же после окончания редактирования пользователь видит свои изменения на карте. Никаких перезагрузок страниц, повторной загрузки всех данных и т.п. Для мира десктопных приложений это естественное требование, но в Web пока что бывают варианты...&lt;br /&gt;
* Пользователи видят внешние (сделанные не ими) обновления данных без перезагрузки карты. Это важный момент для реализации оперативных проектов и совместного редактирования данных.&lt;br /&gt;
* Механизм редактирования должен одинаково хорошо работать с разными видами правок: единичные изменения данных, массовые вставки/редактирования, постоянные небольшие изменения отдельных объектов и т.п.&lt;br /&gt;
* Применение механизма редактирования не должно приводить к уменьшению эффективности работы с картой. Не важно, как добавились данные на карту - вручную объект за объектом или сразу всей кучей из файла - всегда система должна работать одинаково быстро.&lt;br /&gt;
&lt;br /&gt;
== Пользовательский интерфейс ==&lt;br /&gt;
В ГеоМиксере в данный момент есть несколько способов редактировать объекты:&lt;br /&gt;
* На панели инструментов есть специальный инструмент “Редактирование”. После его включения можно кликнуть на объект на карте и отредактировать границу и атрибуты объекта.&lt;br /&gt;
* Из контекстного меню слоя можно добавить новый объект в данный слой. При этом геометрию можно выбрать из нарисованных на карте.&lt;br /&gt;
* Из таблицы атрибутов слоя можно редактировать, удалять и добавлять новые объекты.&lt;br /&gt;
* Можно кликнуть правой кнопкой на любой нарисованной геометрии на карте и добавить её в активный слой как новый объект (будет предложено отредактировать таблицу атрибутов)&lt;br /&gt;
* Есть отдельный плагин &amp;quot;AddToMap&amp;quot; для быстрого добавления новых объектов в активный слой. Пользователь кликает на иконке в тулбаре, сразу же рисует геометрию и сохраняет новый объект.&lt;br /&gt;
&lt;br /&gt;
== Примеры использования редактирования в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Механизм редактирования объектов в ГеоМиксере [http://gis-lab.info/qa/geomixer-editing.html уже описывался] в применении к [http://gis-lab.info/qa/geodetdom.html проекту ГИС-Лаб] по созданию слоя геоданных по детским учреждениям Российской Федерации.&lt;br /&gt;
&lt;br /&gt;
В ряде тематических проектов СканЭкс активно используется редактирование векторных данных непосредственно в ГеоМиксере: это и [http://press.scanex.ru/index.php/ru/massmedia/item/3894-t-comm проект по Половодью] и по мониторингу свалок в Мурманской области и ряд других. При этом редактирование в Геопортале имеет ряд преимуществ: можно легко совмещать разные растровые данные, подгружать названия населённых пунктов, использовать адресный поиск, быстро переместиться в любую точку мира  и т.д. Многие из этих операций затруднены в классических десктопных ГИС-системах.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_example.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример оцифрованной в ГеоМиксере области затопления по набору оперативных космических снимков.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё одним примером использования механизма редактирования можно считать карту “[http://mosoblculture.ru/map/ Культура Подмосковья]” Министерства Культуры Российской Федерации. Сначала данные были подготовлены во внешней программе и импортированы в ГеоМиксер. Далее привязка и атрибутика объектов редактировалась (и продолжает редактироваться) через браузер без выгрузки в другие программы.&lt;br /&gt;
&lt;br /&gt;
Из интересных примеров использования механизма редактирования можно привести одно из охотхозяйств, которые заказали в СканЭксе карту своей территории. Кроме статических данных они хотели сами добавлять данные о местах обитания животных. Этот механизм был реализован на основе Web-интерфейса и успешно используется заказчиками по сей день (к сожалению, проект закрытый, и ссылку дать не получается).&lt;br /&gt;
&lt;br /&gt;
== Технический раздел ==&lt;br /&gt;
&lt;br /&gt;
=== Клац-клац-клац ===&lt;br /&gt;
&lt;br /&gt;
Первое, что необходимо при редактировании, - собственно пользовательский интерфейс изменения и создания геометрии в бразуере. Когда Yandex или Google предлагают Вам нарисовать схему прохода к офису, скорость работы этого механизма не сильно важна (лишь бы было людям удобно). Но если вы вдруг решите подредактирвоать какую-нибудь границу Москвы из нескольких тысяч точек, то эффективность используемого подхода станет критичной.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере используется довольно простая схема из трёх SVG элементов: линия для отображения на экране, линия для взаимодействия с пользователем (она невидима, но более толстая, чтобы было удобней хватать мышью) и геометрия типа “мультиточка” для рисования вершин ломанных. Пересечение ломанных с курсором мыши высчитывает браузер, а всё остальные - уже сам ГеоМиксер.&lt;br /&gt;
&lt;br /&gt;
Сравнить производительность инструментов редактирования можно на специально подготовленной [http://aparshin.github.io/editing-tools-testing/ страничке] (замечания и улучшения к [https://github.com/aparshin/editing-tools-testing исходному репозиторию] приветствуются!)&lt;br /&gt;
&lt;br /&gt;
=== Тайлы, диффы и другая серверная жуть ===&lt;br /&gt;
&lt;br /&gt;
Требование обновлять данные в клиенте “на лету” вызывает сразу несколько проблем: как понять, какая версия данных есть у конкретного клиента, как эффективно передать ему обновления, как не загрузить сервер при регулярных вставках объектов и т.п.&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про форматы данных. На сервере все объекты векторных слоёв хранятся в двух видах: как записи в таблице БД и в виде векторных тайлов, готовых для отдачи клиенту. БД выступает в роли надёжного транзакционного хранилища и обеспечивает эффективный поиск данных, а тайлы используются для передачи в бразуер и оптимизированы для визуализации на клиенте. Создание тайлов (тайлинг) - довольно ресурсоёмкая и в общем случае нелокальная операция (может затронуть большое количество тайлов при небольших изменениях).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_naive_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при простейшей реализации редактирования''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тайлинг нужно учитывать при изменении данных на сервере. Давайте рассмотрим самый простой и естественный вариант: клиент передаёт изменения на сервер, где они заносятся в БД и сразу же тайлятся (см. схему выше). После окончания тайлинга клиент получает ответ типа “всё ок”.&lt;br /&gt;
&lt;br /&gt;
Такая схема порождает проблемы двух видов:&lt;br /&gt;
* Рассинхронизация данных между клиентом и сервером. У клиента уже новые данные, а сервер может отдавать только старые тайлы. Стоит перезагрузить страницу до окончания процесса тайлинга - и пользователь не увидит своих последних изменений. Обычно такое развитие событий огорчает людей.&lt;br /&gt;
* Проблема &amp;quot;синхронного тайлинга&amp;quot;. В описанной схеме серверу нужно перетайлить всё как можно быстрее, а начинать тайлинг нужно немедленно после получения обновления. Что делать, если в процессе тайлинга пришли новые данные? Как быть с регулярно обновляемыми слоями?&lt;br /&gt;
&lt;br /&gt;
Для решения этих проблем мы внесли в схему ряд улучшений (см схему ниже).&lt;br /&gt;
&lt;br /&gt;
==== Таблица необработанных данных и асинхронный тайлинг ====&lt;br /&gt;
На сервере заводится специальная таблица, содержащая изменённые, но ещё не натайленные данные (diffs). Отдельные потоки (threads) тайлинга отслеживают изменения в этой таблице и при необходимости запускают новый процесс. В тайлах меняются только обновившиеся объекты, без полного переформирования.&lt;br /&gt;
&lt;br /&gt;
==== Временные изменения ====&lt;br /&gt;
Данные слоя в ГеоМиксере состоят теперь из друх частей: списка тайлов с данными и временных обновлений (diffs), которые ещё не успели натайлиться. Когда пользователь внёс изменения в слой, они сразу же попадают в список временных изменений. Этот список передаётся на клиент каждый раз вместе с остальной информацией о слое. Клиент просто игнорирует данные из тайлов по объектам этого списка. Каждый тайл имеет версию, и когда сервер обработает очередную порцию изменений, клиенту поступит новое описание слоя без временных изменений, но с новыми версиями тайлов.  Таким образом поддерживается постоянная согласованность данных между клиентом и сервером вне зависимости от длительности процесса тайлинга. &lt;br /&gt;
&lt;br /&gt;
Благодаря передаче на клиент ненатайленных изменений появляется много возможностей по управлению и оптимизации процесса тайлинга. Например, можно накапливать изменения в отдельных слоях (10 изменений натайлить за один раз быстрее, чем 10 раз по одному изменению), выставлять приоритеты для разных типов данных и т.п.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при редактировании данных в ГеоМиксере''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Web-GIS постоянно совершенствуются, реализуя всё больше функционала, который раньше был доступн только в десктопных приложениях. Возможность изменять исходные геоданные - естественный шаг на этом пути.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере мы не просто реализовали формальную возможность отсылать изменения на сервер, мы постарались сделать удобный механизм для совместной работы над векторными данными. Для этого пришлось реализовать ряд нововведений: поддержка версий слоёв и отдельных векторных тайлов, отдельная таблица с необработанными изменениями на сервере, передача временных изменений на клиент. Всё это существенно улучшило стабильность и удобство редактирования пространственных данных в web-клиенте.&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://geomixer.ru/ Сайт Geomixer.ru]&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer-multitemporal-layers.html Мультивременные слои в GeoMixer WEB-GIS]&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer-editing.html Редактирование векторных слоев с помощью GeoMixer на примере геоданных по детским учреждениям]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19670</id>
		<title>Редактирование векторных данных в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19670"/>
		<updated>2014-05-21T14:18:05Z</updated>

		<summary type="html">&lt;p&gt;Parshin: переименовал Редактирование векторных данных в GeoMixer WEB-GIS в Механизм редактирования векторных данных в GeoMixer WEB-GIS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Механизм редактирования векторных данных в GeoMixer WEB-GIS]]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19669</id>
		<title>Механизм редактирования векторных данных в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19669"/>
		<updated>2014-05-21T14:18:05Z</updated>

		<summary type="html">&lt;p&gt;Parshin: переименовал Редактирование векторных данных в GeoMixer WEB-GIS в Механизм редактирования векторных данных в GeoMixer WEB-GIS&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
&lt;br /&gt;
Техническое описание реализации механизма редактирования векторных данных в GeoMixer WEB-GIS&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Исторически основной задачей Web-GIS была визуализация данных. Широкое распространение интернета позволило решить проблему доступности данных, а стремительное развитие браузеров и расширение возможностей HTTP предоставило новые возможности работы с пространственной информацией.&lt;br /&gt;
&lt;br /&gt;
Самые первые варианты web сервисов доступа к картам просто показывали статические картинки со стрелочками для перемещения в соседние области. Затем появился Google Maps с возможностью таскать карту мышкой и спутниковым покрытием на весь мир.&lt;br /&gt;
&lt;br /&gt;
На следующем шаге браузеры прокачали свои возможности по работе с векторными данными: появились VML и SVG, а позже Canvas и WebGL. Это позволило не просто рендерить картинки на сервере, а передавать клиенту исходные векторные данные для отрисовки в браузере. Интерактивность и анимация географических данных не заставили себя долго ждать…&lt;br /&gt;
&lt;br /&gt;
Логичным продолжением этой тенденции является возможность создавать и модифицировать векторные данные непосредственно в браузере. Хорошим примером развития возможностей редактирования в web является проект OpenStreetMap. Сначала появился [http://josm.openstreetmap.de/ редактор], написанный на Java, потом возник проект [http://wiki.openstreetmap.org/wiki/Potlatch_2 редактора в браузере], написанный на Flash, который в настоящее время уступает место полностью HTML редактору [http://ideditor.com/ iD]. Редактирование непосредственно в браузере даже такой большой базы данных как OSM сейчас стало реальностью.&lt;br /&gt;
&lt;br /&gt;
В [http://geomixer.ru/ ГеоМиксере] так же относительно недавно появилась возможность редактировать данные векторных слоёв. Технические подробности реализации этого функционала и являются основным содержанием данной статьи.&lt;br /&gt;
&lt;br /&gt;
== Что нам нужно для счастья ==&lt;br /&gt;
&lt;br /&gt;
При реализации редактирования векторных объектов мы ставили перед собой следующие задачи:&lt;br /&gt;
* Сразу же после окончания редактирования пользователь видит свои изменения на карте. Никаких перезагрузок страниц, повторной загрузки всех данных и т.п. Для мира десктопных ГИС это естественное требование, но в Web пока что бывают варианты...&lt;br /&gt;
* Пользователи видят обновления данных без перезагрузки карты. Это важный момент для реализации оперативных проектов и совместного редактирования данных.&lt;br /&gt;
* Механизм редактирования должен одинаково хорошо работать с разными видами правок: единичные изменения данных, массовые вставки/редактирования, постоянные небольшие изменения отдельных объектов и т.п.&lt;br /&gt;
* Применение механизма редактирования не должно приводить к уменьшению эффективности работы с картой. Не важно, как добавились данные на карту - вручную объект за объектом или сразу всей кучей из файла - всегда система должна работать одинаково быстро.&lt;br /&gt;
&lt;br /&gt;
== Пользовательский интерфейс ==&lt;br /&gt;
В ГеоМиксере в данный момент есть несколько способов редактировать объекты:&lt;br /&gt;
* На панели инструментов есть специальный инструмент “Редактирование”. После его включения можно кликнуть на объекте на карте и отредактировать границу и атрибуты объекта.&lt;br /&gt;
* Из контекстного меню слоя можно добавить новый объект в данный слой. При этом геометрию можно выбрать из нарисованных на карте.&lt;br /&gt;
* Из таблицы атрибутов слоя можно редактировать, удалять и добавлять новые объекты.&lt;br /&gt;
* Можно кликнуть правой кнопкой на любой нарисованной геометрии на карте и добавить её в активный слой как новый объект (будет предложено отредактировать таблицу атрибутов)&lt;br /&gt;
* Есть отдельный плагин &amp;quot;AddToMap&amp;quot; для быстрого добавления новых объектов в активный слой. Пользователь кликает на иконке в тулбаре, сразу же рисует геометрию и сохраняет новый объект.&lt;br /&gt;
&lt;br /&gt;
== Примеры использования редактирования в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Механизм редактирования объектов в ГеоМиксере [http://gis-lab.info/qa/geomixer-editing.html уже описывался] в применении к [http://gis-lab.info/qa/geodetdom.html проекту ГИС-Лаб] по созданию слоя геоданных по детским учреждениям Российской Федерации.&lt;br /&gt;
&lt;br /&gt;
Ряд тематических проектов СканЭкс активно используют редактирование векторных данных непосредственно в ГеоМиксере: это и [http://press.scanex.ru/index.php/ru/massmedia/item/3894-t-comm проект по Половодью] и по мониторингу свалок в Мурманской области и ряд других. При этом редактирование непосредственно в Геопортале имеет ряд преимуществ: можно легко совмещать разные растровые данные, подгружать названия населённых пунктов, использовать адресный поиск, быстро переместиться в любую точку мира  и т.д. Многие из этих операций затруднены в классических десктопных ГИС-системах.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_example.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример оцифрованной в ГеоМиксере области затопления по набору оперативных космических снимков.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё одним примером использования механизма редактирования можно считать карту “[http://mosoblculture.ru/map/ Культура Подмосковья]” Министерства Культуры Российской Федерации. Сначала данные были подготовлены во внешней программе и импортированы в ГеоМиксер. Далее привязка и атрибутика объектов редактировалась (и продолжает редактироваться) непосредственно на карте без выгрузки в другие программы.&lt;br /&gt;
&lt;br /&gt;
Из интересных примеров использования механизма редактирования можно привести пример одного из охотхозяйств, которые заказали в СканЭксе карту своей территории. Кроме статических данных они хотели сами добавлять данные о местах обитания животных. Этот механизм был реализован на основе Web-интерфейса и успешно используется заказчиками по сей день (к сожалению, проект закрытый, и ссылку дать не получается).&lt;br /&gt;
&lt;br /&gt;
== Технический раздел ==&lt;br /&gt;
&lt;br /&gt;
=== Клац-клац-клац ===&lt;br /&gt;
&lt;br /&gt;
Первое, что необходимо при редактировании - собственно пользовательский интерфейс изменения и создания геометрии в бразуере. Когда Yandex или Google предлагают Вам нарисовать схему прохода к офису, скорость работы этого механизма не сильно важна (лишь бы было людям удобно). Но если вы вдруг решите подредактирвоать какую-нибудь границу Москвы из нескольких тысяч точек, то эффективность используемого подхода станет критичной.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере используется довольно простая схема из трёх SVG элементов: линия для отображения на экране, линия для взаимодействия с пользователем (она невидима, но более толстая, чтобы было удобней хватать мышью) и геометрия типа “мультиточка” для рисования вершин ломанных. Пересечение ломанных с курсором мыши высчитывает браузер, а всё остальные - уже сам ГеоМиксер.&lt;br /&gt;
&lt;br /&gt;
Сравнить производительность инструментов редактирования можно на специально подготовленной [http://aparshin.github.io/editing-tools-testing/ страничке] (замечания и улучшения к [https://github.com/aparshin/editing-tools-testing исходному репозиторию] приветствуются!)&lt;br /&gt;
&lt;br /&gt;
=== Тайлы, диффы и другая серверная жуть ===&lt;br /&gt;
&lt;br /&gt;
Требование обновлять данные в клиенте “на лету” вызывает сразу несколько проблем: как понять, какая версия данных есть у конкретного клиента, как эффективно передать ему обновления, как не загрузить сервер при регулярных вставках объектов и т.п.&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про форматы данных. На сервере все объекты векторных слоёв хранятся в двух видах: как записи в таблице БД и в виде векторных тайлов, готовых для отдачи клиенту. БД выступает в роли надёжного транзакционного хранилища и обеспечивает эффективный поиск данных, а тайлы используются для передачи в бразуер и оптимизированы для визуализации на клиенте. Создание тайлов (тайлинг) - довольно ресурсоёмкая и в общем случае нелокальная операция (может затронуть большое количество тайлов при небольших изменениях).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_naive_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при простейшей реализации редактирования''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тайлинг нужно учитывать при изменении данных на сервере. Давайте рассмотрим самый простой и естественный вариант: клиент передаёт изменения на сервер, где они заносятся в БД и сразу же тайлятся (см. схему выше). После окончания тайлинга клиент получает ответ типа “всё ок”.&lt;br /&gt;
&lt;br /&gt;
Такая схема порождает проблемы двух видов:&lt;br /&gt;
* Рассинхронизация данных между клиентом и сервером. У клиента уже новые данные, а сервер может отдавать только старые тайлы. Стоит перезагрузить страницу до окончания процесса тайлинга - и пользователь не увидит своих последних изменений. Обычно такое развитие событий огорчает людей.&lt;br /&gt;
* Проблема &amp;quot;синхронного тайлинга&amp;quot;. В описанной схеме серверу нужно перетайлить всё как можно быстрее, а начинать тайлинг нужно немедленно после получения обновления. Что делать, если в процессе тайлинга пришли новые данные? Как быть с регулярно обновляемыми слоями?&lt;br /&gt;
&lt;br /&gt;
Для решения этих проблем мы внесли в схему ряд улучшений (см схему ниже).&lt;br /&gt;
&lt;br /&gt;
==== Таблица необработанных данных и асинхронный тайлинг ====&lt;br /&gt;
На сервере заводится специальная таблица, содержащая изменённые, но ещё не натайленные данные (diffs). Отдельные потоки (threads) тайлинга отслеживают изменения в этой таблице и при необходимости запускают новый процесс. В тайлах меняются только обновившиеся объекты, без полного переформирования.&lt;br /&gt;
&lt;br /&gt;
==== Временные изменения ====&lt;br /&gt;
Данные слоя в ГеоМиксере состоят теперь из друх частей: списка тайлов с данными и временных обновлений (diffs), которые ещё не успели натайлиться. Когда пользователь внёс изменения в слой, они сразу же попадают в список временных изменений. Этот список передаётся на клиент каждый раз вместе с остальной информацией о слое. Клиент просто игнорирует данные из тайлов по объектам этого списка. Каждый тайл имеет версию, и когда сервер обработает очередную порцию изменений, клиенту поступит новое описание слоя без временных изменений, но с новыми версиями тайлов.  Таким образом поддерживается постоянная согласованность данных между клиентом и сервером вне зависимости от длительности процесса тайлинга. &lt;br /&gt;
&lt;br /&gt;
Благодаря передачи на клиент ненатайленных изменений появляется много возможностей по управлению и оптимизации процесса тайлинга. Например, можно накапливать изменения в отдельных слоях (10 изменений натайлить за один раз быстрее, чем 10 раз по одному изменению), выставлять приоритеты для разных типов данных и т.п.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при редактировании данных в ГеоМиксере''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Web-GIS постоянно совершенствуются, реализуя всё больше функционала, который раньше был доступн только в десктопных приложениях. Возможность изменять исходные геоданные - естественный шаг на этом пути.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере мы не просто реализовали формальную возможность отсылать изменения на сервер, мы постарались сделать удобный механизм для совместной работы над векторными данными. Для этого пришлось реализовать ряд нововведений: поддержка версий слоёв и отдельных векторных тайлов, отдельная таблица с необработанными изменениями на сервере, передача временных изменений на клиент. Всё это существенно улучшило стабильность и удобство редактирования пространственных данных в web-клиенте.&lt;br /&gt;
==Ссылки==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer-editing.html Редактирование векторных слоев с помощью Geomixer]&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://geomixer.ru/ Сайт Geomixer.ru]&lt;br /&gt;
* [http://maps.kosmosnimki.ru/api/index.html Онлайн версия Geomixer]&lt;br /&gt;
* [http://kosmosnimki.ru/ Сайт Kosmosnimki.ru]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19665</id>
		<title>Механизм редактирования векторных данных в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19665"/>
		<updated>2014-05-20T15:29:44Z</updated>

		<summary type="html">&lt;p&gt;Parshin: Вычитал&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
&lt;br /&gt;
Техническое описание реализации механизма редактирования векторных данных в GeoMixer WEB-GIS&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Исторически основной задачей Web-GIS была визуализация данных. Широкое распространение интернета позволило решить проблему доступности данных, а стремительное развитие браузеров и расширение возможностей HTTP предоставило новые возможности работы с пространственной информацией.&lt;br /&gt;
&lt;br /&gt;
Самые первые варианты web сервисов доступа к картам просто показывали статические картинки со стрелочками для перемещения в соседние области. Затем появился Google Maps с возможностью таскать карту мышкой и спутниковым покрытием на весь мир.&lt;br /&gt;
&lt;br /&gt;
На следующем шаге браузеры прокачали свои возможности по работе с векторными данными: появились VML и SVG, а позже Canvas и WebGL. Это позволило не просто рендерить картинки на сервере, а передавать клиенту исходные векторные данные для отрисовки в браузере. Интерактивность и анимация географических данных не заставили себя долго ждать…&lt;br /&gt;
&lt;br /&gt;
Логичным продолжением этой тенденции является возможность создавать и модифицировать векторные данные непосредственно в браузере. Хорошим примером развития возможностей редактирования в web является проект OpenStreetMap. Сначала появился [http://josm.openstreetmap.de/ редактор], написанный на Java, потом возник проект [http://wiki.openstreetmap.org/wiki/Potlatch_2 редактора в браузере], написанный на Flash, который в настоящее время уступает место полностью HTML редактору [http://ideditor.com/ iD]. Редактирование непосредственно в браузере даже такой большой базы данных как OSM сейчас стало реальностью.&lt;br /&gt;
&lt;br /&gt;
В [http://geomixer.ru/ ГеоМиксере] так же относительно недавно появилась возможность редактировать данные векторных слоёв. Технические подробности реализации этого функционала и являются основным содержанием данной статьи.&lt;br /&gt;
&lt;br /&gt;
== Что нам нужно для счастья ==&lt;br /&gt;
&lt;br /&gt;
При реализации редактирования векторных объектов мы ставили перед собой следующие задачи:&lt;br /&gt;
* Сразу же после окончания редактирования пользователь видит свои изменения на карте. Никаких перезагрузок страниц, повторной загрузки всех данных и т.п. Для мира десктопных ГИС это естественное требование, но в Web пока что бывают варианты...&lt;br /&gt;
* Пользователи видят обновления данных без перезагрузки карты. Это важный момент для реализации оперативных проектов и совместного редактирования данных.&lt;br /&gt;
* Механизм редактирования должен одинаково хорошо работать с разными видами правок: единичные изменения данных, массовые вставки/редактирования, постоянные небольшие изменения отдельных объектов и т.п.&lt;br /&gt;
* Применение механизма редактирования не должно приводить к уменьшению эффективности работы с картой. Не важно, как добавились данные на карту - вручную объект за объектом или сразу всей кучей из файла - всегда система должна работать одинаково быстро.&lt;br /&gt;
&lt;br /&gt;
== Пользовательский интерфейс ==&lt;br /&gt;
В ГеоМиксере в данный момент есть несколько способов редактировать объекты:&lt;br /&gt;
* На панели инструментов есть специальный инструмент “Редактирование”. После его включения можно кликнуть на объекте на карте и отредактировать границу и атрибуты объекта.&lt;br /&gt;
* Из контекстного меню слоя можно добавить новый объект в данный слой. При этом геометрию можно выбрать из нарисованных на карте.&lt;br /&gt;
* Из таблицы атрибутов слоя можно редактировать, удалять и добавлять новые объекты.&lt;br /&gt;
* Можно кликнуть правой кнопкой на любой нарисованной геометрии на карте и добавить её в активный слой как новый объект (будет предложено отредактировать таблицу атрибутов)&lt;br /&gt;
* Есть отдельный плагин &amp;quot;AddToMap&amp;quot; для быстрого добавления новых объектов в активный слой. Пользователь кликает на иконке в тулбаре, сразу же рисует геометрию и сохраняет новый объект.&lt;br /&gt;
&lt;br /&gt;
== Примеры использования редактирования в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Механизм редактирования объектов в ГеоМиксере [http://gis-lab.info/qa/geomixer-editing.html уже описывался] в применении к [http://gis-lab.info/qa/geodetdom.html проекту ГИС-Лаб] по созданию слоя геоданных по детским учреждениям Российской Федерации.&lt;br /&gt;
&lt;br /&gt;
Ряд тематических проектов СканЭкс активно используют редактирование векторных данных непосредственно в ГеоМиксере: это и [http://press.scanex.ru/index.php/ru/massmedia/item/3894-t-comm проект по Половодью] и по мониторингу свалок в Мурманской области и ряд других. При этом редактирование непосредственно в Геопортале имеет ряд преимуществ: можно легко совмещать разные растровые данные, подгружать названия населённых пунктов, использовать адресный поиск, быстро переместиться в любую точку мира  и т.д. Многие из этих операций затруднены в классических десктопных ГИС-системах.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_example.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример оцифрованной в ГеоМиксере области затопления по набору оперативных космических снимков.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё одним примером использования механизма редактирования можно считать карту “[http://mosoblculture.ru/map/ Культура Подмосковья]” Министерства Культуры Российской Федерации. Сначала данные были подготовлены во внешней программе и импортированы в ГеоМиксер. Далее привязка и атрибутика объектов редактировалась (и продолжает редактироваться) непосредственно на карте без выгрузки в другие программы.&lt;br /&gt;
&lt;br /&gt;
Из интересных примеров использования механизма редактирования можно привести пример одного из охотхозяйств, которые заказали в СканЭксе карту своей территории. Кроме статических данных они хотели сами добавлять данные о местах обитания животных. Этот механизм был реализован на основе Web-интерфейса и успешно используется заказчиками по сей день (к сожалению, проект закрытый, и ссылку дать не получается).&lt;br /&gt;
&lt;br /&gt;
== Технический раздел ==&lt;br /&gt;
&lt;br /&gt;
=== Клац-клац-клац ===&lt;br /&gt;
&lt;br /&gt;
Первое, что необходимо при редактировании - собственно пользовательский интерфейс изменения и создания геометрии в бразуере. Когда Yandex или Google предлагают Вам нарисовать схему прохода к офису, скорость работы этого механизма не сильно важна (лишь бы было людям удобно). Но если вы вдруг решите подредактирвоать какую-нибудь границу Москвы из нескольких тысяч точек, то эффективность используемого подхода станет критичной.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере используется довольно простая схема из трёх SVG элементов: линия для отображения на экране, линия для взаимодействия с пользователем (она невидима, но более толстая, чтобы было удобней хватать мышью) и геометрия типа “мультиточка” для рисования вершин ломанных. Пересечение ломанных с курсором мыши высчитывает браузер, а всё остальные - уже сам ГеоМиксер.&lt;br /&gt;
&lt;br /&gt;
Сравнить производительность инструментов редактирования можно на специально подготовленной [http://aparshin.github.io/editing-tools-testing/ страничке] (замечания и улучшения к [https://github.com/aparshin/editing-tools-testing исходному репозиторию] приветствуются!)&lt;br /&gt;
&lt;br /&gt;
=== Тайлы, диффы и другая серверная жуть ===&lt;br /&gt;
&lt;br /&gt;
Требование обновлять данные в клиенте “на лету” вызывает сразу несколько проблем: как понять, какая версия данных есть у конкретного клиента, как эффективно передать ему обновления, как не загрузить сервер при регулярных вставках объектов и т.п.&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про форматы данных. На сервере все объекты векторных слоёв хранятся в двух видах: как записи в таблице БД и в виде векторных тайлов, готовых для отдачи клиенту. БД выступает в роли надёжного транзакционного хранилища и обеспечивает эффективный поиск данных, а тайлы используются для передачи в бразуер и оптимизированы для визуализации на клиенте. Создание тайлов (тайлинг) - довольно ресурсоёмкая и в общем случае нелокальная операция (может затронуть большое количество тайлов при небольших изменениях).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_naive_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при простейшей реализации редактирования''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тайлинг нужно учитывать при изменении данных на сервере. Давайте рассмотрим самый простой и естественный вариант: клиент передаёт изменения на сервер, где они заносятся в БД и сразу же тайлятся (см. схему выше). После окончания тайлинга клиент получает ответ типа “всё ок”.&lt;br /&gt;
&lt;br /&gt;
Такая схема порождает проблемы двух видов:&lt;br /&gt;
* Рассинхронизация данных между клиентом и сервером. У клиента уже новые данные, а сервер может отдавать только старые тайлы. Стоит перезагрузить страницу до окончания процесса тайлинга - и пользователь не увидит своих последних изменений. Обычно такое развитие событий огорчает людей.&lt;br /&gt;
* Проблема &amp;quot;синхронного тайлинга&amp;quot;. В описанной схеме серверу нужно перетайлить всё как можно быстрее, а начинать тайлинг нужно немедленно после получения обновления. Что делать, если в процессе тайлинга пришли новые данные? Как быть с регулярно обновляемыми слоями?&lt;br /&gt;
&lt;br /&gt;
Для решения этих проблем мы внесли в схему ряд улучшений (см схему ниже).&lt;br /&gt;
&lt;br /&gt;
==== Таблица необработанных данных и асинхронный тайлинг ====&lt;br /&gt;
На сервере заводится специальная таблица, содержащая изменённые, но ещё не натайленные данные (diffs). Отдельные потоки (threads) тайлинга отслеживают изменения в этой таблице и при необходимости запускают новый процесс. В тайлах меняются только обновившиеся объекты, без полного переформирования.&lt;br /&gt;
&lt;br /&gt;
==== Временные изменения ====&lt;br /&gt;
Данные слоя в ГеоМиксере состоят теперь из друх частей: списка тайлов с данными и временных обновлений (diffs), которые ещё не успели натайлиться. Когда пользователь внёс изменения в слой, они сразу же попадают в список временных изменений. Этот список передаётся на клиент каждый раз вместе с остальной информацией о слое. Клиент просто игнорирует данные из тайлов по объектам этого списка. Каждый тайл имеет версию, и когда сервер обработает очередную порцию изменений, клиенту поступит новое описание слоя без временных изменений, но с новыми версиями тайлов.  Таким образом поддерживается постоянная согласованность данных между клиентом и сервером вне зависимости от длительности процесса тайлинга. &lt;br /&gt;
&lt;br /&gt;
Благодаря передачи на клиент ненатайленных изменений появляется много возможностей по управлению и оптимизации процесса тайлинга. Например, можно накапливать изменения в отдельных слоях (10 изменений натайлить за один раз быстрее, чем 10 раз по одному изменению), выставлять приоритеты для разных типов данных и т.п.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при редактировании данных в ГеоМиксере''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Web-GIS постоянно совершенствуются, реализуя всё больше функционала, который раньше был доступн только в десктопных приложениях. Возможность изменять исходные геоданные - естественный шаг на этом пути.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере мы не просто реализовали формальную возможность отсылать изменения на сервер, мы постарались сделать удобный механизм для совместной работы над векторными данными. Для этого пришлось реализовать ряд нововведений: поддержка версий слоёв и отдельных векторных тайлов, отдельная таблица с необработанными изменениями на сервере, передача временных изменений на клиент. Всё это существенно улучшило стабильность и удобство редактирования пространственных данных в web-клиенте.&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19664</id>
		<title>Механизм редактирования векторных данных в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19664"/>
		<updated>2014-05-20T15:15:35Z</updated>

		<summary type="html">&lt;p&gt;Parshin: Добавил картинки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
&lt;br /&gt;
Техническое описание реализации механизма редактирования векторных данных в GeoMixer WEB-GIS&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Исторически основной задачей Web-GIS была визуализация данных. Широкое распространение интернета позволило решить проблему доступности данных, а стремительное развитие браузеров и расширение возможностей HTTP предоставило новые возможности работы с пространственной информацией.&lt;br /&gt;
&lt;br /&gt;
Самые первые варианты web сервисов доступа к картам просто показывали статические картинки со стрелочками для перемещения в соседние области. Затем появился Google Maps с возможностью таскать карту мышкой и спутниковым покрытием на весь мир.&lt;br /&gt;
&lt;br /&gt;
На следующем шаге браузеры прокачали свои возможности по работе с векторными данными: появились VML и SVG, а позже Canvas и WebGL. Это позволило не просто рендерить картинки на сервере, а передавать клиенту исходные векторные данные для отрисовки в браузере. Интерактивность и анимация географических данных не заставили себя долго ждать…&lt;br /&gt;
&lt;br /&gt;
Логичным продолжением этой тенденции является возможность создавать и модифицировать векторные данные непосредственно в браузере. Хорошим примером развития возможностей редактирования в web является проект OpenStreetMap. Сначала появился [http://josm.openstreetmap.de/ редактор], написанный на Java, потом возник проект [http://wiki.openstreetmap.org/wiki/Potlatch_2 редактора в браузере], написанный на Flash, который в настоящее время уступает место полностью HTML редактору [http://ideditor.com/ iD]. Редактирование непосредственно в браузере даже такой большой базы данных как OSM сейчас стало реальностью.&lt;br /&gt;
&lt;br /&gt;
В [http://geomixer.ru/ ГеоМиксере] так же относительно недавно появилась возможность редактировать данные векторных слоёв. Технические подробности реализации этого функционала и являются основным содержанием данной статьи.&lt;br /&gt;
&lt;br /&gt;
== Что нам нужно для счастья ==&lt;br /&gt;
&lt;br /&gt;
При реализации редактирования векторных объектов мы ставили перед собой следующие задачи:&lt;br /&gt;
* Сразу же после окончания редактирования пользователь видит свои изменения на карте. Никаких перезагрузок страниц, повторной загрузки всех данных и т.п. Для мира десктопных ГИС это естественное требование, но в Web пока что бывают варианты...&lt;br /&gt;
* Пользователи видят обновления данных без перезагрузки карты. Это важный момент для реализации оперативных проектов и для совместного редактирования данных.&lt;br /&gt;
* Механизм редактирования должен одинаково хорошо работать с разными по форме правками: единичные изменения данных, массовые вставки/редактирования, постоянные небольшие изменения отдельных объектов и т.п.&lt;br /&gt;
* Применение механизма редактирования не должно приводить к уменьшению эффективности работы с картой. Не важно, как добавились данные на карту - вручную объект за объектом или сразу всей кучей из файла - всегда система должна работать одинаково быстро.&lt;br /&gt;
&lt;br /&gt;
== Пользовательский интерфейс ==&lt;br /&gt;
В GeoMixer’е в данный момент есть несколько способов редактировать объекты:&lt;br /&gt;
* На панели инструментов есть специальный инструмент “Редактирование”. После его включения можно кликнуть на объекте на карте и отредактировать границу и атрибуты объекта.&lt;br /&gt;
* Из контекстного меню слоя можно добавить новый объект в данный слой. При этом геометрию можно выбрать из нарисованных на карте.&lt;br /&gt;
* Из таблицы атрибутов слоя можно редактировать, удалять и добавлять новые объекты.&lt;br /&gt;
* Можно кликнуть правой кнопкой на любой нарисованной геометрии на карте и добавить её в активный слой как новый объект (будет предложено отредактировать таблицу атрибутов)&lt;br /&gt;
* Есть отдельный плагин &amp;quot;AddToMap&amp;quot; для быстрого добавления новых объектов в активный слой. Пользователь кликает на иконке в тулбаре, сразу же рисует геометрию и сохраняет новый объект.&lt;br /&gt;
&lt;br /&gt;
== Примеры использования редактирования в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Механизм редактирования объектов в GeoMixer’е [http://gis-lab.info/qa/geomixer-editing.html уже описывался] в применении к [http://gis-lab.info/qa/geodetdom.html проекту ГИС-Лаб] по созданию слоя геоданных по детским учреждениям Российской Федерации.&lt;br /&gt;
&lt;br /&gt;
Ряд тематических проектов СканЭкс активно используют редактирование векторных данных непосредственно в GeoMixer’е: это и [http://press.scanex.ru/index.php/ru/massmedia/item/3894-t-comm проект по Половодью] и по мониторингу свалок в Мурманской области и ряд других. При этом редактирование непосредственно в Геопортале имеет ряд преимуществ: можно легко совмещать разные растровые данные, подгружать названия населённых пунктов, использовать адресный поиск, быстро переместиться в любую точку мира  и т.д. Многие из этих операций затруднены в классических десктопных ГИС-системах.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_example.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример оцифрованной в GeoMixer’е области затопления по набору оперативных космических снимков.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё одним примером использования механизма редактирования можно считать карту “[http://mosoblculture.ru/map/ Культура Подмосковья]” Министерства Культуры Российской Федерации. Сначала данные были подготовлены во внешней программе и импортированы в ГеоМиксер. Далее привязка и атрибутика объектов редактировалась (и продолжает редактироваться) непосредственно на карте без выгрузки в другие программы.&lt;br /&gt;
&lt;br /&gt;
Из интересных примеров использования механизма редактирования можно привести пример одного из охотхозяйств, которые заказали в СканЭксе карту своей территории. Кроме статических данных они хотели сами добавлять данные о местах обитания животных. Этот механизм был реализован на основе Web-интерфейса и успешно используется заказчиками по сей день (к сожалению, проект закрытый, и ссылку дать не получается).&lt;br /&gt;
&lt;br /&gt;
== Технический раздел ==&lt;br /&gt;
&lt;br /&gt;
=== Клац-клац-клац ===&lt;br /&gt;
&lt;br /&gt;
Первое, что необходимо при редактировании - собственно пользовательский интерфейс изменения и создания геометрии в бразуере. Когда Yandex или Google предлагают Вам нарисовать схему прохода к офису, скорость работы этого механизма не сильно важна (лишь бы было людям удобно). Но если вы вдруг решите подредактирвоать какую-нибудь границу Москвы из нескольких тысяч точек, то эффективность используемого подхода станет критичным.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере используется довольно простая схема из трёх SVG элементов: линия для отображения на экране, линия для взаимодействия с пользователем (она невидима, но более толстая, чтобы было удобней хватать мышью) и геометрия типа “мультиточка” для рисования вершин ломанных. Пересечение ломанных с курсором мыши высчитывает браузер, а всё остальные - уже сам ГеоМиксер.&lt;br /&gt;
&lt;br /&gt;
Сравнить производительность инструментов редактирования можно на специально подготовленной [http://aparshin.github.io/editing-tools-testing/ страничке] (замечания и улучшения к [https://github.com/aparshin/editing-tools-testing исходному репозиторию] приветствуются!)&lt;br /&gt;
&lt;br /&gt;
=== Тайлы, диффы и другая серверная жуть ===&lt;br /&gt;
&lt;br /&gt;
Требование обновлять данные в клиенте “на лету” вызывает сразу несколько проблем: как понять, какая версия данных есть у конкретного клиента, как эффективно передать ему обновления, как не загрузить сервер при регулярных вставках объектов и т.п.&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про форматы данных. На сервере все объекты векторных слоёв хранятся в двух видах: как записи в таблице БД и в виде векторных тайлов, готовых для отдачи клиенту. БД выступает в роли надёжного транзакционного хранилища и обеспечивает эффективный поиск данных, а тайлы используются для передачи в бразуер и оптимизированы для визуализации на клиенте. Создание тайлов (тайлинг) - довольно ресурсоёмкая и в общем случае нелокальная операция (может затронуть большое количество тайлов при небольших изменениях).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_naive_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при простейшей реализации редактирования''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тайлинг нужно учитывать при изменении данных на сервере. Давайте рассмотрим самый простой и естественный вариант: клиент передаёт изменения на сервер, где они заносятся в БД и сразу же тайлятся (см. схему выше). После окончания тайлинга клиент получает ответ типа “всё ок”.&lt;br /&gt;
&lt;br /&gt;
Такая схема порождает проблемы двух видов:&lt;br /&gt;
* Рассинхронизация данных между клиентом и сервером. У клиента уже новые данные, а сервер может отдавать только старые тайлы. Стоит перезагрузить страницу до окончания процесса тайлинга - и пользователь не увидит своих последних изменений. Обычно такое развитие событий огорчает людей.&lt;br /&gt;
* Проблема &amp;quot;синхронного тайлинга&amp;quot;. В описанной схеме серверу нужно перетайлить всё как можно быстрее, а начинать тайлинг нужно немедленно после получения обновления. Что делать, если в процессе тайлинга пришли новые данные? Как быть с регулярно обновляемыми слоями?&lt;br /&gt;
&lt;br /&gt;
Для решения этих проблем мы внесли в схему ряд улучшений (см схему ниже).&lt;br /&gt;
&lt;br /&gt;
==== Таблица необработанных данных и асинхронный тайлинг ====&lt;br /&gt;
На сервере заводится специальная таблица, содержащая изменённые, но ещё не натайленные данные (diffs). Отдельные потоки (threads) тайлинга отслеживают изменения в этой таблице и при необходимости запускают новый процесс. В тайлах меняются только обновившиеся объекты, без полного переформирования.&lt;br /&gt;
&lt;br /&gt;
==== Временные изменения ====&lt;br /&gt;
Данные слоя в ГеоМиксере состоят теперь из друх частей: списка тайлов с данными и временных обновлений (diffs), которые ещё не успели натайлиться. Когда пользователь внёс изменения в слой, эти изменения сразу же попадают в список временных обновлений. Этот список передаётся на клиент каждый раз вместе с остальной информацией о слое. Клиент просто игнорирует данные из тайлов по объектам этого списка. Каждый тайл имеет версию, и когда сервер обработает очередную порцию изменений, клиенту поступит новое описание слоя без временных изменений, но с новыми версиями тайлов.  Таким образом поддерживается постоянная согласованность данных между клиентом и сервером вне зависимости от длительности процесса тайлинга. &lt;br /&gt;
&lt;br /&gt;
Благодаря передачи на клиент ненатайленных изменений появляется много возможностей по управлению и оптимизации процесса тайлинга. Например, можно накапливать изменения в отдельных слоях (10 изменений натайлить за один раз быстрее, чем 10 раз по одному изменению), выставлять приоритеты для разных типов данных и т.п.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_editing_sequence.png|700px|center]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при редактировании в GeoMixer''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Web-GIS постоянно совершенствуются, реализуя всё больше возможностей, которые раньше были доступны только в десктопных приложениях. Возможность изменять исходные геоданные - естественный шаг на этом пути.&lt;br /&gt;
&lt;br /&gt;
В GeoMixer’е мы не просто реализовали формальную возможность отсылать изменения на сервер, мы постарались сделать удобный механизм для совместной работы над векторными данными. Для этого пришлось реализовать ряд нововведений: поддержка версий слоёв и отдельных векторных тайлов, отдельная таблица с необработанными изменениями на сервере, передача временных изменений на клиент. Всё это существенно улучшило стабильность и удобство редактирования пространственных данных в web-клиенте.&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_editing_naive_sequence.png&amp;diff=19663</id>
		<title>Файл:Geomixer editing naive sequence.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_editing_naive_sequence.png&amp;diff=19663"/>
		<updated>2014-05-20T15:09:48Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_editing_example.png&amp;diff=19662</id>
		<title>Файл:Geomixer editing example.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_editing_example.png&amp;diff=19662"/>
		<updated>2014-05-20T15:06:02Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_editing_sequence.png&amp;diff=19661</id>
		<title>Файл:Geomixer editing sequence.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_editing_sequence.png&amp;diff=19661"/>
		<updated>2014-05-20T15:05:12Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19660</id>
		<title>Механизм редактирования векторных данных в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19660"/>
		<updated>2014-05-20T14:01:34Z</updated>

		<summary type="html">&lt;p&gt;Parshin: Добавил ссылки&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
&lt;br /&gt;
Техническое описание реализации механизма редактирования векторных данных в GeoMixer WEB-GIS&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Исторически основной задачей Web-GIS была визуализация данных. Широкое распространение интернета позволило решить проблему доступности данных, а стремительное развитие браузеров и расширение возможностей HTTP предоставило новые возможности работы с пространственной информацией.&lt;br /&gt;
&lt;br /&gt;
Самые первые варианты web сервисов доступа к картам просто показывали статические картинки со стрелочками для перемещения в соседние области. Затем появился Google Maps с возможностью таскать карту мышкой и спутниковым покрытием на весь мир.&lt;br /&gt;
&lt;br /&gt;
На следующем шаге браузеры прокачали свои возможности по работе с векторными данными: появились VML и SVG, а позже Canvas и WebGL. Это позволило не просто рендерить картинки на сервере, а передавать клиенту исходные векторные данные для отрисовки в браузере. Интерактивность и анимация географических данных не заставили себя долго ждать…&lt;br /&gt;
&lt;br /&gt;
Логичным продолжением этой тенденции является возможность создавать и модифицировать векторные данные непосредственно в браузере. Хорошим примером развития возможностей редактирования в web является проект OpenStreetMap. Сначала появился [http://josm.openstreetmap.de/ редактор], написанный на Java, потом возник проект [http://wiki.openstreetmap.org/wiki/Potlatch_2 редактора в браузере], написанный на Flash, который в настоящее время уступает место полностью HTML редактору [http://ideditor.com/ iD]. Редактирование непосредственно в браузере даже такой большой базы данных как OSM сейчас стало реальностью.&lt;br /&gt;
&lt;br /&gt;
В [http://geomixer.ru/ ГеоМиксере] так же относительно недавно появилась возможность редактировать данные векторных слоёв. Технические подробности реализации этого функционала и являются основным содержанием данной статьи.&lt;br /&gt;
&lt;br /&gt;
== Что нам нужно для счастья ==&lt;br /&gt;
&lt;br /&gt;
При реализации редактирования векторных объектов мы ставили перед собой следующие задачи:&lt;br /&gt;
* Сразу же после окончания редактирования пользователь видит свои изменения на карте. Никаких перезагрузок страниц, повторной загрузки всех данных и т.п. Для мира десктопных ГИС это естественное требование, но в Web пока что бывают варианты...&lt;br /&gt;
* Пользователи видят обновления данных без перезагрузки карты. Это важный момент для реализации оперативных проектов и для совместного редактирования данных.&lt;br /&gt;
* Механизм редактирования должен одинаково хорошо работать с разными по форме правками: единичные изменения данных, массовые вставки/редактирования, постоянные небольшие изменения отдельных объектов и т.п.&lt;br /&gt;
* Применение механизма редактирования не должно приводить к уменьшению эффективности работы с картой. Не важно, как добавились данные на карту - вручную объект за объектом или сразу всей кучей из файла - всегда система должна работать одинаково быстро.&lt;br /&gt;
&lt;br /&gt;
== Пользовательский интерфейс ==&lt;br /&gt;
В GeoMixer’е в данный момент есть несколько способов редактировать объекты:&lt;br /&gt;
* На панели инструментов есть специальный инструмент “Редактирование”. После его включения можно кликнуть на объекте на карте и отредактировать границу и атрибуты объекта.&lt;br /&gt;
* Из контекстного меню слоя можно добавить новый объект в данный слой. При этом геометрию можно выбрать из нарисованных на карте.&lt;br /&gt;
* Из таблицы атрибутов слоя можно редактировать, удалять и добавлять новые объекты.&lt;br /&gt;
* Можно кликнуть правой кнопкой на любой нарисованной геометрии на карте и добавить её в активный слой как новый объект (будет предложено отредактировать таблицу атрибутов)&lt;br /&gt;
* Есть отдельный плагин &amp;quot;AddToMap&amp;quot; для быстрого добавления новых объектов в активный слой. Пользователь кликает на иконке в тулбаре, сразу же рисует геометрию и сохраняет новый объект.&lt;br /&gt;
&lt;br /&gt;
== Примеры использования редактирования в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Механизм редактирования объектов в GeoMixer’е [http://gis-lab.info/qa/geomixer-editing.html уже описывался] в применении к [http://gis-lab.info/qa/geodetdom.html проекту ГИС-Лаб] по созданию слоя геоданных по детским учреждениям Российской Федерации.&lt;br /&gt;
&lt;br /&gt;
Ряд тематических проектов СканЭкс активно используют редактирование векторных данных непосредственно в GeoMixer’е: это и [http://press.scanex.ru/index.php/ru/massmedia/item/3894-t-comm проект по Половодью] и по мониторингу свалок в Мурманской области и ряд других. При этом редактирование непосредственно в Геопортале имеет ряд преимуществ: можно легко совмещать разные растровые данные, подгружать названия населённых пунктов, использовать адресный поиск, быстро переместиться в любую точку мира  и т.д. Многие из этих операций затруднены в классических десктопных ГИС-системах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример оцифрованной в GeoMixer’е области затопления по набору оперативных космических снимков.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё одним примером использования механизма редактирования можно считать карту “[http://mosoblculture.ru/map/ Культура Подмосковья]” Министерства Культуры Российской Федерации. Сначала данные были подготовлены во внешней программе и импортированы в ГеоМиксер. Далее привязка и атрибутика объектов редактировалась (и продолжает редактироваться) непосредственно на карте без выгрузки в другие программы.&lt;br /&gt;
&lt;br /&gt;
Из интересных примеров использования механизма редактирования можно привести пример одного из охотхозяйств, которые заказали в СканЭксе карту своей территории. Кроме статических данных они хотели сами добавлять данные о местах обитания животных. Этот механизм был реализован на основе Web-интерфейса и успешно используется заказчиками по сей день (к сожалению, проект закрытый, и ссылку дать не получается).&lt;br /&gt;
&lt;br /&gt;
== Технический раздел ==&lt;br /&gt;
&lt;br /&gt;
=== Клац-клац-клац ===&lt;br /&gt;
&lt;br /&gt;
Первое, что необходимо при редактировании - собственно пользовательский интерфейс изменения и создания геометрии в бразуере. Когда Yandex или Google предлагают Вам нарисовать схему прохода к офису, скорость работы этого механизма не сильно важна (лишь бы было людям удобно). Но если вы вдруг решите подредактирвоать какую-нибудь границу Москвы из нескольких тысяч точек, то эффективность используемого подхода станет критичным.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере используется довольно простая схема из трёх SVG элементов: линия для отображения на экране, линия для взаимодействия с пользователем (она невидима, но более толстая, чтобы было удобней хватать мышью) и геометрия типа “мультиточка” для рисования вершин ломанных. Пересечение ломанных с курсором мыши высчитывает браузер, а всё остальные - уже сам ГеоМиксер.&lt;br /&gt;
&lt;br /&gt;
Сравнить производительность инструментов редактирования можно на специально подготовленной [http://aparshin.github.io/editing-tools-testing/ страничке] (замечания и улучшения к [https://github.com/aparshin/editing-tools-testing исходному репозиторию] приветствуются!)&lt;br /&gt;
&lt;br /&gt;
=== Тайлы, диффы и другая серверная жуть ===&lt;br /&gt;
&lt;br /&gt;
Требование обновлять данные в клиенте “на лету” вызывает сразу несколько проблем: как понять, какая версия данных есть у конкретного клиента, как эффективно передать ему обновления, как не загрузить сервер при регулярных вставках объектов и т.п.&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про форматы данных. На сервере все объекты векторных слоёв хранятся в двух видах: как записи в таблице БД и в виде векторных тайлов, готовых для отдачи клиенту. БД выступает в роли надёжного транзакционного хранилища и обеспечивает эффективный поиск данных, а тайлы используются для передачи в бразуер и оптимизированы для визуализации на клиенте. Создание тайлов (тайлинг) - довольно ресурсоёмкая и в общем случае нелокальная операция (может затронуть большое количество тайлов при небольших изменениях).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при простейшей реализации редактирования''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тайлинг нужно учитывать при изменении данных на сервере. Давайте рассмотрим самый простой и естественный вариант: клиент передаёт изменения на сервер, где они заносятся в БД и сразу же тайлятся (см. схему выше). После окончания тайлинга клиент получает ответ типа “всё ок”.&lt;br /&gt;
&lt;br /&gt;
Такая схема порождает проблемы двух видов:&lt;br /&gt;
* Рассинхронизация данных между клиентом и сервером. У клиента уже новые данные, а сервер может отдавать только старые тайлы. Стоит перезагрузить страницу до окончания процесса тайлинга - и пользователь не увидит своих последних изменений. Обычно такое развитие событий огорчает людей.&lt;br /&gt;
* Проблема &amp;quot;синхронного тайлинга&amp;quot;. В описанной схеме серверу нужно перетайлить всё как можно быстрее, а начинать тайлинг нужно немедленно после получения обновления. Что делать, если в процессе тайлинга пришли новые данные? Как быть с регулярно обновляемыми слоями?&lt;br /&gt;
&lt;br /&gt;
Для решения этих проблем мы внесли в схему ряд улучшений (см схему ниже).&lt;br /&gt;
&lt;br /&gt;
==== Таблица необработанных данных и асинхронный тайлинг ====&lt;br /&gt;
На сервере заводится специальная таблица, содержащая изменённые, но ещё не натайленные данные (diffs). Отдельные потоки (threads) тайлинга отслеживают изменения в этой таблице и при необходимости запускают новый процесс. В тайлах меняются только обновившиеся объекты, без полного переформирования.&lt;br /&gt;
&lt;br /&gt;
==== Временные изменения ====&lt;br /&gt;
Данные слоя в ГеоМиксере состоят теперь из друх частей: списка тайлов с данными и временных обновлений (diffs), которые ещё не успели натайлиться. Когда пользователь внёс изменения в слой, эти изменения сразу же попадают в список временных обновлений. Этот список передаётся на клиент каждый раз вместе с остальной информацией о слое. Клиент просто игнорирует данные из тайлов по объектам этого списка. Каждый тайл имеет версию, и когда сервер обработает очередную порцию изменений, клиенту поступит новое описание слоя без временных изменений, но с новыми версиями тайлов.  Таким образом поддерживается постоянная согласованность данных между клиентом и сервером вне зависимости от длительности процесса тайлинга. &lt;br /&gt;
&lt;br /&gt;
Благодаря передачи на клиент ненатайленных изменений появляется много возможностей по управлению и оптимизации процесса тайлинга. Например, можно накапливать изменения в отдельных слоях (10 изменений натайлить за один раз быстрее, чем 10 раз по одному изменению), выставлять приоритеты для разных типов данных и т.п.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при редактировании в GeoMixer''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Web-GIS постоянно совершенствуются, реализуя всё больше возможностей, которые раньше были доступны только в десктопных приложениях. Возможность изменять исходные геоданные - естественный шаг на этом пути.&lt;br /&gt;
&lt;br /&gt;
В GeoMixer’е мы не просто реализовали формальную возможность отсылать изменения на сервер, мы постарались сделать удобный механизм для совместной работы над векторными данными. Для этого пришлось реализовать ряд нововведений: поддержка версий слоёв и отдельных векторных тайлов, отдельная таблица с необработанными изменениями на сервере, передача временных изменений на клиент. Всё это существенно улучшило стабильность и удобство редактирования пространственных данных в web-клиенте.&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19631</id>
		<title>Механизм редактирования векторных данных в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D0%B5%D1%85%D0%B0%D0%BD%D0%B8%D0%B7%D0%BC_%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BD%D1%8B%D1%85_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_GeoMixer_WEB-GIS&amp;diff=19631"/>
		<updated>2014-05-16T07:39:48Z</updated>

		<summary type="html">&lt;p&gt;Parshin: Новая страница: «{{Статья|Черновик}}  Техническое описание реализации механизма редактирования векторных…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
&lt;br /&gt;
Техническое описание реализации механизма редактирования векторных данных в GeoMixer WEB-GIS&lt;br /&gt;
&lt;br /&gt;
== Введение ==&lt;br /&gt;
Исторически основной задачей Web-GIS была визуализация данных. Широкое распространение интернета позволило решить проблему доступности данных, а стремительное развитие браузеров и расширение возможностей HTTP предоставило новые возможности работы с пространственной информацией.&lt;br /&gt;
&lt;br /&gt;
Самые первые варианты web сервисов доступа к картам просто показывали статические картинки со стрелочками для перемещения в соседние области. Затем появился Google Maps с возможностью таскать карту мышкой и спутниковым покрытием на весь мир.&lt;br /&gt;
&lt;br /&gt;
На следующем шаге браузеры прокачали свои возможности по работе с векторными данными: появились VML и SVG, а позже Canvas и WebGL. Это позволило не просто рендерить картинки на сервере, а передавать клиенту исходные векторные данные для отрисовки в браузере. Интерактивность и анимация географических данных не заставили себя долго ждать…&lt;br /&gt;
&lt;br /&gt;
Логичным продолжением этой тенденции является возможность создавать и модифицировать векторные данные непосредственно в браузере. Хорошим примером развития возможностей редактирования в web является проект OpenStreetMap. Сначала появился редактор, написанный на Java, потом возник проект редактора в браузере, написанный на Flash, который в настоящее время уступает место полностью HTML редактору iD. Редактирование непосредственно в браузере даже такой большой базы данных как OSM сейчас стало реальностью.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере так же относительно недавно появилась возможность редактировать данные векторных слоёв. Технические подробности реализации этого функционала и являются основным содержанием данной статьи.&lt;br /&gt;
&lt;br /&gt;
== Что нам нужно для счастья ==&lt;br /&gt;
&lt;br /&gt;
При реализации редактирования векторных объектов мы ставили перед собой следующие задачи:&lt;br /&gt;
* Сразу же после окончания редактирования пользователь видит свои изменения на карте. Никаких перезагрузок страниц, повторной загрузки всех данных и т.п. Для мира десктопных ГИС это естественное требование, но в Web пока что бывают варианты...&lt;br /&gt;
* Пользователи видят обновления данных без перезагрузки карты. Это важный момент для реализации оперативных проектов и для совместного редактирования данных.&lt;br /&gt;
* Механизм редактирования должен одинаково хорошо работать с разными по форме правками: единичные изменения данных, массовые вставки/редактирования, постоянные небольшие изменения отдельных объектов и т.п.&lt;br /&gt;
* Применение механизма редактирования не должно приводить к уменьшению эффективности работы с картой. Не важно, как добавились данные на карту - вручную объект за объектом или сразу всей кучей из файла - всегда система должна работать одинаково быстро.&lt;br /&gt;
&lt;br /&gt;
== Пользовательский интерфейс ==&lt;br /&gt;
В GeoMixer’е в данный момент есть несколько способов редактировать объекты:&lt;br /&gt;
* На панели инструментов есть специальный инструмент “Редактирование”. После его включения можно кликнуть на объекте на карте и отредактировать границу и атрибуты объекта.&lt;br /&gt;
* Из контекстного меню слоя можно добавить новый объект в данный слой. При этом геометрию можно выбрать из нарисованных на карте.&lt;br /&gt;
* Из таблицы атрибутов слоя можно редактировать, удалять и добавлять новые объекты.&lt;br /&gt;
* Можно кликнуть правой кнопкой на любой нарисованной геометрии на карте и добавить её в активный слой как новый объект (будет предложено отредактировать таблицу атрибутов)&lt;br /&gt;
* Есть отдельный плагин &amp;quot;AddToMap&amp;quot; для быстрого добавления новых объектов в активный слой. Пользователь кликает на иконке в тулбаре, сразу же рисует геометрию и сохраняет новый объект.&lt;br /&gt;
&lt;br /&gt;
== Примеры использования редактирования в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Механизм редактирования объектов в GeoMixer’е уже описывался в применении к проекту  ГИС-Лаб по созданию слоя геоданных по детским учреждениям Российской Федерации.&lt;br /&gt;
&lt;br /&gt;
Ряд тематических проектов СканЭкс активно используют редактирование векторных данных непосредственно в GeoMixer’е: это и проект по Половодью и по мониторингу свалок в Мурманской области и ряд других. При этом редактирование непосредственно в Геопортале имеет ряд преимуществ: можно легко совмещать разные растровые данные, подгружать названия населённых пунктов, использовать адресный поиск, быстро переместиться в любую точку мира  и т.д. Многие из этих операций затруднены в классических десктопных ГИС-системах.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример оцифрованной в GeoMixer’е области затопления по набору оперативных космических снимков.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ещё одним примером использования механизма редактирования можно считать карту “Культура Подмосковья” Министерства Культуры Российской Федерации. Сначала данные были подготовлены во внешней программе и импортированы в ГеоМиксер. Далее привязка и атрибутика объектов редактировалась (и продолжает редактироваться) непосредственно на карте без выгрузки в другие программы.&lt;br /&gt;
&lt;br /&gt;
Из интересных примеров использования механизма редактирования можно привести пример одного из охотхозяйств, которые заказали в СканЭксе карту своей территории. Кроме статических данных они хотели сами добавлять данные о местах обитания животных. Этот механизм был реализован на основе Web-интерфейса и успешно используется заказчиками по сей день (к сожалению, проект закрытый, и ссылку дать не получается).&lt;br /&gt;
&lt;br /&gt;
== Технический раздел ==&lt;br /&gt;
&lt;br /&gt;
=== Клац-клац-клац ===&lt;br /&gt;
&lt;br /&gt;
Первое, что необходимо при редактировании - собственно пользовательский интерфейс изменения и создания геометрии в бразуере. Когда Yandex или Google предлагают Вам нарисовать схему прохода к офису, скорость работы этого механизма не сильно важна (лишь бы было людям удобно). Но если вы вдруг решите подредактирвоать какую-нибудь границу Москвы из нескольких тысяч точек, то эффективность используемого подхода станет критичным.&lt;br /&gt;
&lt;br /&gt;
В ГеоМиксере используется довольно простая схема из трёх SVG элементов: линия для отображения на экране, линия для взаимодействия с пользователем (она невидима, но более толстая, чтобы было удобней хватать мышью) и геометрия типа “мультиточка” для рисования вершин ломанных. Пересечение ломанных с курсором мыши высчитывает браузер, а всё остальные - уже сам ГеоМиксер.&lt;br /&gt;
&lt;br /&gt;
Сравнить производительность инструментов редактирования можно на специально подготовленной страничке (замечания и улучшения к исходному репозиторию приветствуются!)&lt;br /&gt;
&lt;br /&gt;
=== Тайлы, диффы и другая серверная жуть ===&lt;br /&gt;
&lt;br /&gt;
Требование обновлять данные в клиенте “на лету” вызывает сразу несколько проблем: как понять, какая версия данных есть у конкретного клиента, как эффективно передать ему обновления, как не загрузить сервер при регулярных вставках объектов и т.п.&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про форматы данных. На сервере все объекты векторных слоёв хранятся в двух видах: как записи в таблице БД и в виде векторных тайлов, готовых для отдачи клиенту. БД выступает в роли надёжного транзакционного хранилища и обеспечивает эффективный поиск данных, а тайлы используются для передачи в бразуер и оптимизированы для визуализации на клиенте. Создание тайлов (тайлинг) - довольно ресурсоёмкая и в общем случае нелокальная операция (может затронуть большое количество тайлов при небольших изменениях).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при простейшей реализации редактирования''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тайлинг нужно учитывать при изменении данных на сервере. Давайте рассмотрим самый простой и естественный вариант: клиент передаёт изменения на сервер, где они заносятся в БД и сразу же тайлятся (см. схему выше). После окончания тайлинга клиент получает ответ типа “всё ок”.&lt;br /&gt;
&lt;br /&gt;
Такая схема порождает проблемы двух видов:&lt;br /&gt;
* Рассинхронизация данных между клиентом и сервером. У клиента уже новые данные, а сервер может отдавать только старые тайлы. Стоит перезагрузить страницу до окончания процесса тайлинга - и пользователь не увидит своих последних изменений. Обычно такое развитие событий огорчает людей.&lt;br /&gt;
* Проблема &amp;quot;синхронного тайлинга&amp;quot;. В описанной схеме серверу нужно перетайлить всё как можно быстрее, а начинать тайлинг нужно немедленно после получения обновления. Что делать, если в процессе тайлинга пришли новые данные? Как быть с регулярно обновляемыми слоями?&lt;br /&gt;
&lt;br /&gt;
Для решения этих проблем мы внесли в схему ряд улучшений (см схему ниже).&lt;br /&gt;
&lt;br /&gt;
==== Таблица необработанных данных и асинхронный тайлинг ====&lt;br /&gt;
На сервере заводится специальная таблица, содержащая изменённые, но ещё не натайленные данные (diffs). Отдельные потоки (threads) тайлинга отслеживают изменения в этой таблице и при необходимости запускают новый процесс. В тайлах меняются только обновившиеся объекты, без полного переформирования.&lt;br /&gt;
&lt;br /&gt;
==== Временные изменения ====&lt;br /&gt;
Данные слоя в ГеоМиксере состоят теперь из друх частей: списка тайлов с данными и временных обновлений (diffs), которые ещё не успели натайлиться. Когда пользователь внёс изменения в слой, эти изменения сразу же попадают в список временных обновлений. Этот список передаётся на клиент каждый раз вместе с остальной информацией о слое. Клиент просто игнорирует данные из тайлов по объектам этого списка. Каждый тайл имеет версию, и когда сервер обработает очередную порцию изменений, клиенту поступит новое описание слоя без временных изменений, но с новыми версиями тайлов.  Таким образом поддерживается постоянная согласованность данных между клиентом и сервером вне зависимости от длительности процесса тайлинга. &lt;br /&gt;
&lt;br /&gt;
Благодаря передачи на клиент ненатайленных изменений появляется много возможностей по управлению и оптимизации процесса тайлинга. Например, можно накапливать изменения в отдельных слоях (10 изменений натайлить за один раз быстрее, чем 10 раз по одному изменению), выставлять приоритеты для разных типов данных и т.п.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Последовательность действий при редактировании в GeoMixer''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Заключение ==&lt;br /&gt;
&lt;br /&gt;
Web-GIS постоянно совершенствуются, реализуя всё больше возможностей, которые раньше были доступны только в десктопных приложениях. Возможность изменять исходные геоданные - естественный шаг на этом пути.&lt;br /&gt;
&lt;br /&gt;
В GeoMixer’е мы не просто реализовали формальную возможность отсылать изменения на сервер, мы постарались сделать удобный механизм для совместной работы над векторными данными. Для этого пришлось реализовать ряд нововведений: поддержка версий слоёв и отдельных векторных тайлов, отдельная таблица с необработанными изменениями на сервере, передача временных изменений на клиент. Всё это существенно улучшило стабильность и удобство редактирования пространственных данных в web-клиенте.&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16749</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16749"/>
		<updated>2013-12-05T21:15:59Z</updated>

		<summary type="html">&lt;p&gt;Parshin: /* Как оно работает (скучный технический раздел :) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|Общий обзор и детали реализации механизма работы с временны́ми архивами данных в GeoMixer Web-GIS}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике реализации проектов на основе платформы [http://gis-lab.info/qa/geomixer.html GeoMixer] часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9 любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89 пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px|center]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8  Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9 съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9 доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков). &lt;br /&gt;
&lt;br /&gt;
Так же мы экспериментируем с различными дополнительными элементами управления для анализа временно́й компоненты данных. [http://www.youtube.com/watch?v=VaPJFivbN7c Вот пример] работы с одним из таких инструментов - &amp;quot;таймлайном&amp;quot;. Этот инструмент упрощает понимание того, как данные из некоторой пространственной области распределены во времени.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем их на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на сервере. Клиенту просто отдаём статические файлы. Степень разбиения определяется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Алгоритм построения тайлов для набора векторных объектов выглядит примерно так. Сначала вычисляется общий размер данных для всего набора. Если он меньше определённого порога, то всё записывается в один тайл, и процесс завершается. Если размер данных слишком большой, данные делятся на 4 части в соответствии со своим положением в пространстве. Для каждой части процесс повторяется.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый прямоугольник на графике слева — тайлы для данных за один конкретный день.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл содержит примерно одинаковое количество данных, так что при увеличении протяжённости во времени размер тайла в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы.&lt;br /&gt;
&lt;br /&gt;
Процесс построения мультивременных тайлов выглядит следующим образом. Сначала мы формируем тайлы длительностью в, скажем, один день. Берём исходные данные, и выбираем из них данные за первый день (мы предполагаем, что с каждым объектом связана определённая дата). По отобранным данным строим тайлы как для обыкновенного векторного слоя (в тайлах, конечно, запоминаем, что это тайлы за первый день). Затем выбираем данные за второй день, строим для них векторные тайлы и т.п. пока не переберём все дни, за которые есть данные. На следующем этапе начинаем формировать тайлы протяжённостью в, например, неделю. Выбираем из исходных данных все объекты, относящиеся к первой неделе и строим для них тайлы как для простого векторного слоя. Затем берём данные за вторую неделю и т.п. Далее мы можем аналогично построить наборы тайлов за месяц, квартал, год и т.п. Описание всех полученных тайлов передаётся на клиент.&lt;br /&gt;
&lt;br /&gt;
На клиенте при показе на карте мультивременного слоя API вычисляет временны́е рамки запроса и выбирает подмножество тайлов, которые нужно запросить с сервера. Пример: пусть на сервере хранятся тайлы длительностью день и неделя, а пользователь выбрал период в 10 дней. У нас есть вариант запросить тайлы за 10 дней по отдельности, за неделю и отдельно за 3 оставшихся дня, или за две недели. Последний вариант может оказаться предпочтительнее, если общее количество данных мало (из-за меньшего числа запросов на сервер).&lt;br /&gt;
&lt;br /&gt;
Поскольку все тайлы имеют примерно одинаковый размер, основным критерием выбора в ГеоМиксере является общее количество запросов на сервер для получения всех нужных данных. Если протяжённости во времени всех тайлов кратны друг другу (скажем, 1, 4, 16, 64 дня), минимизировать эту величину можно за один проход по списку тайлов(например, при помощи какой-нибудь древовидной структуры).&lt;br /&gt;
&lt;br /&gt;
Описанное решение позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких тайлах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;br /&gt;
&lt;br /&gt;
== (Бес)полезные ссылки ==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://docs.geomixer.ru/doku.php?id=geomixer:documentation:user_manual:geomixer_web_gis Пользовательская документация GeoMixer]&lt;br /&gt;
* [http://geomixer.ru/api_reference GeoMixer API Reference]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16689</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16689"/>
		<updated>2013-12-04T08:28:30Z</updated>

		<summary type="html">&lt;p&gt;Parshin: /* Как оно работает (скучный технический раздел :) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|Общий обзор и детали реализации механизма работы с временны́ми архивами данных в GeoMixer Web-GIS}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике реализации проектов на основе платформы [http://gis-lab.info/qa/geomixer.html GeoMixer] часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9 любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89 пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px|center]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8  Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9 съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9 доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков). &lt;br /&gt;
&lt;br /&gt;
Так же мы экспериментируем с различными дополнительными элементами управления для анализа временно́й компоненты данных. [http://www.youtube.com/watch?v=VaPJFivbN7c Вот пример] работы с одним из таких инструментов - &amp;quot;таймлайном&amp;quot;. Этот инструмент упрощает понимание того, как данные из некоторой пространственной области распределены во времени.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем их на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на сервере. Клиенту просто отдаём статические файлы. Степень разбиения определяется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Алгоритм построения тайлов для набора векторных объектов выглядит примерно так. Сначала вычисляется общий размер данных для всего набора. Если он меньше определённого порога, то всё записывается в один тайл, и процесс завершается. Если размер данных слишком большой, данные делятся на 4 части в соответствии со своим положением в пространстве. Для каждой части процесс повторяется.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый прямоугольник на графике слева — тайлы для данных за один конкретный день.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл содержит примерно одинаковое количество данных, так что при увеличении протяжённости во времени размер тайла в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы (кстати, определение этого набора тоже интересная задачка, которая может быть решена разными способами).&lt;br /&gt;
&lt;br /&gt;
Процесс построения мультивременных тайлов выглядит следующим образом. Сначала мы формируем тайлы длительностью в, скажем, один день. Берём исходные данные, и выбираем из них данные за первый день (мы предполагаем, что с каждым объектом связана определённая дата). По отобранным данным строим тайлы как для обыкновенного векторного слоя (в тайлах, конечно, запоминаем, что это тайлы за первый день). Затем выбираем данные за второй день, строим для них векторные тайлы и т.п. пока не переберём все дни, за которые есть данные. На следующем этапе начинаем формировать тайлы протяжённостью в, например, неделю. Выбираем из исходных данных все объекты, относящиеся к первой неделе и строим для них тайлы как для простого векторного слоя. Затем берём данные за вторую неделю и т.п. Далее мы можем аналогично построить наборы тайлов за месяц, квартал, год и т.п. Описание всех полученных тайлов передаётся на клиент, где наш API уже сам решает, какие тайлы лучше запросить в зависимости от того, что пользователь захотел увидеть на экране.&lt;br /&gt;
&lt;br /&gt;
Такой подход позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких тайлах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;br /&gt;
&lt;br /&gt;
== (Бес)полезные ссылки ==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://docs.geomixer.ru/doku.php?id=geomixer:documentation:user_manual:geomixer_web_gis Пользовательская документация GeoMixer]&lt;br /&gt;
* [http://geomixer.ru/api_reference GeoMixer API Reference]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_temporal_tiles1.png&amp;diff=16687</id>
		<title>Файл:Geomixer temporal temporal tiles1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_temporal_tiles1.png&amp;diff=16687"/>
		<updated>2013-12-04T08:20:06Z</updated>

		<summary type="html">&lt;p&gt;Parshin: загружена новая версия «Файл:Geomixer temporal temporal tiles1.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_vector_tiles.png&amp;diff=16686</id>
		<title>Файл:Geomixer temporal vector tiles.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_vector_tiles.png&amp;diff=16686"/>
		<updated>2013-12-04T08:18:59Z</updated>

		<summary type="html">&lt;p&gt;Parshin: загружена новая версия «Файл:Geomixer temporal vector tiles.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16685</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16685"/>
		<updated>2013-12-04T08:13:56Z</updated>

		<summary type="html">&lt;p&gt;Parshin: /* Как оно работает (скучный технический раздел :) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|Общий обзор и детали реализации механизма работы с временны́ми архивами данных в GeoMixer Web-GIS}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике реализации проектов на основе платформы [http://gis-lab.info/qa/geomixer.html GeoMixer] часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9 любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89 пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px|center]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8  Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9 съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9 доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков). &lt;br /&gt;
&lt;br /&gt;
Так же мы экспериментируем с различными дополнительными элементами управления для анализа временно́й компоненты данных. [http://www.youtube.com/watch?v=VaPJFivbN7c Вот пример] работы с одним из таких инструментов - &amp;quot;таймлайном&amp;quot;. Этот инструмент упрощает понимание того, как данные из некоторой пространственной области распределены во времени.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем их на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на сервере. Клиенту просто отдаём статические файлы. Степень разбиения определяется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Алгоритм построения тайлов для набора векторных объектов выглядит примерно так. Сначала вычисляется общий размер данных для всего набора. Если он меньше определённого порога, то всё записывается в один тайл, и процесс завершается. Если размер данных слишком большой, данные делятся на 4 части в соответствии со своим положением в пространстве. Для каждой части процесс повторяется.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый прямоугольник на графике слева — тайлы для данных за один конкретный день.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл имеет примерно одинаковый размер данных, так что при увеличении протяжённости во времени размер в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы (кстати, определение этого набора тоже интересная задачка, которая может быть решена разными способами).&lt;br /&gt;
&lt;br /&gt;
Процесс построения мультивременных тайлов выглядит следующим образом. Сначала мы формируем тайлы длительностью в, скажем, один день. Берём исходные данные, и выбираем из них данные за первый день (мы предполагаем, что с каждым объектом связана определённая дата). По отобранным данным строим тайлы как для обыкновенного векторного слоя (в тайлах, конечно, запоминаем, что это тайлы за первый день). Затем выбираем данные за второй день, строим для них векторные тайлы и т.п. пока не переберём все дни, за которые есть данные. На следующем этапе начинаем формировать тайлы протяжённостью в, например, неделю. Выбираем из исходных данных все объекты, относящиеся к первой неделе и строим для них тайлы как для простого векторного слоя. Затем берём данные за вторую неделю и т.п. Далее мы можем аналогично построить наборы тайлов за месяц, квартал, год и т.п. Описание всех полученных тайлов передаётся на клиент, где наш API уже сам решает, какие тайлы лучше запросить в зависимости от того, что пользователь захотел увидеть на экране.&lt;br /&gt;
&lt;br /&gt;
Такой подход позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких тайлах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;br /&gt;
&lt;br /&gt;
== (Бес)полезные ссылки ==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://docs.geomixer.ru/doku.php?id=geomixer:documentation:user_manual:geomixer_web_gis Пользовательская документация GeoMixer]&lt;br /&gt;
* [http://geomixer.ru/api_reference GeoMixer API Reference]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_vector_tiles.png&amp;diff=16682</id>
		<title>Файл:Geomixer temporal vector tiles.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_vector_tiles.png&amp;diff=16682"/>
		<updated>2013-12-04T07:53:43Z</updated>

		<summary type="html">&lt;p&gt;Parshin: загружена новая версия «Файл:Geomixer temporal vector tiles.png»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16680</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16680"/>
		<updated>2013-12-04T07:01:15Z</updated>

		<summary type="html">&lt;p&gt;Parshin: /* Как оно работает (скучный технический раздел :) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|Общий обзор и детали реализации механизма работы с временны́ми архивами данных в GeoMixer Web-GIS}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике реализации проектов на основе платформы [http://gis-lab.info/qa/geomixer.html GeoMixer] часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9 любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89 пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px|center]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8  Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9 съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9 доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков). &lt;br /&gt;
&lt;br /&gt;
Так же мы экспериментируем с различными дополнительными элементами управления для анализа временно́й компоненты данных. [http://www.youtube.com/watch?v=VaPJFivbN7c Вот пример] работы с одним из таких инструментов - &amp;quot;таймлайном&amp;quot;. Этот инструмент упрощает понимание того, как данные из некоторой пространственной области распределены во времени.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем их на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на сервере. Клиенту просто отдаём статические файлы. Степень разбиения определяется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Алгоритм построения тайлов для набора векторных объектов выглядит примерно так. Сначала вычисляется общий размер данных для всего набора. Если он меньше определённого порога, то всё записывается в один тайл, и процесс завершается. Если размер данных слишком большой, данные делятся на 4 части в соответствии со своим положением в пространстве. Для каждой части процесс повторяется.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый квадратик — отдельный тайл с данными. По горизонтальной оси условно показан размер тайла в пространстве, а по вертикальной — его протяжённость по времени.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл имеет примерно одинаковый размер данных, так что при увеличении протяжённости во времени размер в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы (кстати, определение этого набора тоже интересная задачка, которая может быть решена разными способами).&lt;br /&gt;
&lt;br /&gt;
Процесс построения мультивременных тайлов выглядит следующим образом. Сначала мы формируем тайлы длительностью в, скажем, один день. Берём исходные данные, и выбираем из них данные за первый день (мы предполагаем, что с каждым объектом связана определённая дата). По отобранным данным строим тайлы как для обыкновенного векторного слоя (в тайлах, конечно, запоминаем, что это тайлы за первый день). Затем выбираем данные за второй день, строим для них векторные тайлы и т.п. пока не переберём все дни, за которые есть данные. На следующем этапе начинаем формировать тайлы протяжённостью в, например, неделю. Выбираем из исходных данных все объекты, относящиеся к первой неделе и строим для них тайлы как для простого векторного слоя. Затем берём данные за вторую неделю и т.п. Далее мы можем аналогично построить наборы тайлов за месяц, квартал, год и т.п. Описание всех полученных тайлов передаётся на клиент, где наш API уже сам решает, какие тайлы лучше запросить в зависимости от того, что пользователь захотел увидеть на экране.&lt;br /&gt;
&lt;br /&gt;
Такой подход позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких тайлах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;br /&gt;
&lt;br /&gt;
== (Бес)полезные ссылки ==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://docs.geomixer.ru/doku.php?id=geomixer:documentation:user_manual:geomixer_web_gis Пользовательская документация GeoMixer]&lt;br /&gt;
* [http://geomixer.ru/api_reference GeoMixer API Reference]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16576</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16576"/>
		<updated>2013-12-01T14:41:05Z</updated>

		<summary type="html">&lt;p&gt;Parshin: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|Общий обзор и детали реализации механизма работы с временны́ми архивами данных в GeoMixer Web-GIS}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике реализации проектов на основе платформы [http://gis-lab.info/qa/geomixer.html GeoMixer] часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9 любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89 пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px|center]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8  Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9 съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9 доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков). &lt;br /&gt;
&lt;br /&gt;
Так же мы экспериментируем с различными дополнительными элементами управления для анализа временно́й компоненты данных. [http://www.youtube.com/watch?v=VaPJFivbN7c Вот пример] работы с одним из таких инструментов - &amp;quot;таймлайном&amp;quot;. Этот инструмент упрощает понимание того, как данные из некоторой пространственной области распределены во времени.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем них на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на диск. Клиенту просто отдаём статические файлы. Степень разбиения контролируется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый квадратик — отдельный тайл с данными. По горизонтальной оси условно показан размер тайла в пространстве, а по вертикальной — его протяжённость по времени.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл имеет примерно одинаковый размер данных, так что при увеличении протяжённости во времени размер в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы (кстати, определение этого набора тоже интересная задачка, которая может быть решена разными способами).&lt;br /&gt;
&lt;br /&gt;
Такой подход позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких наборах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;br /&gt;
&lt;br /&gt;
== (Бес)полезные ссылки ==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://docs.geomixer.ru/doku.php?id=geomixer:documentation:user_manual:geomixer_web_gis Пользовательская документация GeoMixer]&lt;br /&gt;
* [http://geomixer.ru/api_reference GeoMixer API Reference]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16495</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16495"/>
		<updated>2013-11-29T12:40:17Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|Общий обзор и детали реализации механизма работы с временны́ми архивами данных в GeoMixer Web-GIS}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике реализации проектов на основе платформы [http://gis-lab.info/qa/geomixer.html GeoMixer] часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9| любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89| пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px|center]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8| Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9| съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9| доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем них на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на диск. Клиенту просто отдаём статические файлы. Степень разбиения контролируется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый квадратик — отдельный тайл с данными. По горизонтальной оси условно показан размер тайла в пространстве, а по вертикальной — его протяжённость по времени.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл имеет примерно одинаковый размер данных, так что при увеличении протяжённости во времени размер в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы (кстати, определение этого набора тоже интересная задачка, которая может быть решена разными способами).&lt;br /&gt;
&lt;br /&gt;
Такой подход позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких наборах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;br /&gt;
&lt;br /&gt;
== (Бес)полезные ссылки ==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://docs.geomixer.ru/doku.php?id=geomixer:documentation:user_manual:geomixer_web_gis Пользовательская документация GeoMixer]&lt;br /&gt;
* [http://geomixer.ru/api_reference GeoMixer API Reference]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16467</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16467"/>
		<updated>2013-11-28T14:31:59Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
{{Аннотация|Общий обзор и детали реализации механизма работы с временны́ми архивами данных в GeoMixer Web-GIS}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике реализации проектов на основе платформы [http://gis-lab.info/qa/geomixer.html GeoMixer] часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9| любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89| пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px|center]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8| Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9| съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9| доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px|center]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем них на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на диск. Клиенту просто отдаём статические файлы. Степень разбиения контролируется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый квадратик — отдельный тайл с данными. По горизонтальной оси условно показан размер тайла в пространстве, а по вертикальной — его протяжённость по времени.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл имеет примерно одинаковый размер данных, так что при увеличении протяжённости во времени размер в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы (кстати, определение этого набора тоже интересная задачка, которая может быть решена разными способами).&lt;br /&gt;
&lt;br /&gt;
Такой подход позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких наборах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;br /&gt;
&lt;br /&gt;
== (Бес)полезные ссылки ==&lt;br /&gt;
* [http://gis-lab.info/qa/geomixer.html| Краткий обзор GeoMixer WEB-GIS]&lt;br /&gt;
* [http://docs.geomixer.ru/doku.php?id=geomixer:documentation:user_manual:geomixer_web_gis| Пользовательская документация GeoMixer]&lt;br /&gt;
* [http://geomixer.ru/api_reference| GeoMixer API Reference]&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16460</id>
		<title>Мультивременные слои в GeoMixer WEB-GIS</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B5_%D1%81%D0%BB%D0%BE%D0%B8_%D0%B2_GeoMixer_WEB-GIS&amp;diff=16460"/>
		<updated>2013-11-28T08:03:52Z</updated>

		<summary type="html">&lt;p&gt;Parshin: Новая страница: «{{Статья|Черновик}}  == Философское введение ==  Иногда данных бывает много, очень много. Как…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Статья|Черновик}}&lt;br /&gt;
&lt;br /&gt;
== Философское введение ==&lt;br /&gt;
&lt;br /&gt;
Иногда данных бывает много, очень много. Как правило, пытаться отобразить их все — плохая идея. И дело тут даже не в технических сложностях и ограничениях, а в возможностях человека. Сложно представить себе ситуацию, когда пользователю одновременно нужно увидеть несколько десятков тысяч отдельных объектов.&lt;br /&gt;
&lt;br /&gt;
Для работы с большими объёмами данных используют несколько приёмов: аналитическую предобработку данных (карта плотности вместо отдельных объектов), кластеризацию (вместо отдельных данных показываем суммированную информацию по ним), фильтрацию данных (показываем только интересные в данный момент объекты).&lt;br /&gt;
&lt;br /&gt;
В нашей практике часто встречался особенный вид данных — объекты, накапливающиеся с течением времени. Это могут быть данные о погоде (температура, давление, сила и направление ветра), пожары, результаты мониторинга (рубки, нефтяные слики, и т.д.)  и множество других примеров. Так же временной аспект могут иметь и сами снимки ДЗЗ (например, при регулярной съёмке одной и той же территории).&lt;br /&gt;
&lt;br /&gt;
Изначально мы использовали стандартные механизмы работы с наборами данных: разбивали данные на отдельные слои по дате; объединяли всё в один слой, а потом фильтровали объекты слоя по временному атрибуту; делали специализированные интерфейсы под конкретные проекты. Однако все эти варианты имеют ряд технических сложностей, трудны в поддержке и не всегда адекватно выглядят для пользователей.&lt;br /&gt;
&lt;br /&gt;
Со временем пришло понимание, что для подобных данных нужно отдельное решение — мультивременные слои. Мультивременной слой в ГеоМиксере — это векторный слой, объекты которого могут быть отображены за какой-то определённый промежуток времени. При этом не просто происходит фильтрация данных в момент визуализации, но и оптимизация передачи данных с сервера. Таким образом, становится возможным  создавать слои практически с неограниченным количеством данных при условии, что при просмотре данных будет выбрана разумная пространственно-временная область.&lt;br /&gt;
&lt;br /&gt;
== Как использовать в ГеоМиксере ==&lt;br /&gt;
&lt;br /&gt;
Мультивременной слой в ГеоМиксере является частным случаем векторного слоя (из меню: Слой -&amp;gt; Создать векторный слой). Можно использовать готовый источник данных (например, shp файл) или создать пустой слой с заданием атрибутивных полей вручную. При этом среди атрибутов слоя должны быть поля временнóго типа.&lt;br /&gt;
&lt;br /&gt;
После сохранения карты и перезагрузки страницы слева над деревом слоёв появится календарик для выбора периода отображения. Его можно использовать для просмотра данных за определённый период. Стоит иметь в виду, что календарик по умолчанию действует на все слои в карте.&lt;br /&gt;
&lt;br /&gt;
Для работы с мультивременными слоями через GeoMixer API в класс [http://geomixer.ru/api_reference/#класс_layer Layer] добавлен метод &amp;lt;code&amp;gt;setDateInterval()&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
function setDateInterval(dateBegin, dateEnd)&lt;br /&gt;
    dateBegin: Date – начальная дата периода отображения&lt;br /&gt;
    dateEnd: Date   – конечная дата периода отображения&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Функция позволяет отображать данные векторного слоя за период с &amp;lt;code&amp;gt;dateBegin&amp;lt;/code&amp;gt; до &amp;lt;code&amp;gt;dateEnd&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
При этом через API для разных слоёв можно задавать разные периоды отображения.&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_hotspots.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Наш [http://maps.kosmosnimki.ru/api/index.html?6F8B9| любимый векторный слой] — точки с температурными аномалиями (пожарами), полученными со спутников [http://en.wikipedia.org/wiki/Terra_(satellite) TERRA] и [http://en.wikipedia.org/wiki/Aqua_(satellite) AQUA].&lt;br /&gt;
&lt;br /&gt;
В слое 6.6 млн. точек с августа 2012 по текущий момент. На календарике сверху слева можно выбрать любой день и посмотреть пожары по всему миру за эту дату.&lt;br /&gt;
&lt;br /&gt;
Более того, реализация мультивременных слоёв в ГеоМиксере позволяет не только просматривать данные за один день, но и увидеть данные на локальную территорию за большой промежуток времени (лишь бы общий объём данных в этой пространственно-временной области был разумным). Вот пример такой выборки — [http://maps.kosmosnimki.ru/api/index.html?permalink=KDHV2&amp;amp;KRZ89| пожары за весь прошлый год на Московскую область].&lt;br /&gt;
&lt;br /&gt;
[[Файл:geomixer_temporal_landsat8.jpg|700px]] &lt;br /&gt;
&lt;br /&gt;
Ещё пример — данные [http://en.wikipedia.org/wiki/Landsat_8| Landsat 8]. Данные открытые, мы скачиваем безоблачные сцены на территорию России и храним их в ГеоМиксере в виде мультивременного слоя. Например, вот [http://maps.kosmosnimki.ru/api/index.html?permalink=PR7PO&amp;amp;6F8B9| съёмка за одну неделю в ноябре] (каждый прямоугольник — это одна снятая спутником сцена). Кстати, если приблизиться, будут видны и сами снимки в полном разрешении (30м/пиксель)!&lt;br /&gt;
&lt;br /&gt;
При помощи такого мультивременного слоя можно искать съёмку на конкретный район — нужно зазумиться в нужное место, выбрать период побольше и переключать слои кликами по ним. Вот [http://maps.kosmosnimki.ru/api/index.html?permalink=5U7YK&amp;amp;6F8B9| доступная съёмка Landsat 8 на Северобайкальск c апреля этого года] (кликайте для переключения снимков).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_ais.png|700px]]&lt;br /&gt;
&lt;br /&gt;
Следующий пример — мониторинг объектов. У нас ведётся несколько мониторинговых проектов, данные по которым хранятся именно в форме мультивременных рядов.&lt;br /&gt;
&lt;br /&gt;
На скриншоте выше показан пример визуализации данных мониторинга судов за один день в Баренцевом море (к сожалению, лицензия на данные не позволяет нам использовать их в публичных проектах). Каждый треугольник — зафиксированное положение корабля. Направление иконки соответствует направлению движения, а цвет — типу судна. В этом слое на данный момент 3.7 млн. объектов (положений кораблей). Использование мультивременного слоя позволяет быстро просматривать данные за произвольный временной период.&lt;br /&gt;
&lt;br /&gt;
== Как оно работает (скучный технический раздел :) ==&lt;br /&gt;
&lt;br /&gt;
Основная проблема, которую нам пришлось решить — передача на клиент только нужных данных без существенной загрузки сервера. Можно было бы настроить в БД нужные индексы, при каждом запросе делать выборки, результаты конвертировать в понятный клиенту формат и отгружать в браузер. Но нам это показалось недостаточно эффективным решением. Кроме того, у нас есть хорошо себя показавшие векторные тайлы, которые хотелось применить и для мультивременных слоёв.  Но всё оказалось не так просто…&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_vector_tiles.png|center|400px|]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Пример разбиения пространства на тайлы разного размера. Размер тайла определяется количеством попавших в него данных.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Сначала пару слов про наши векторные тайлы. Для передачи на клиент векторных данных мы разбиваем них на квадратные кусочки (тайлы), сразу же преобразуем эти кусочки в GeoJSON-подобный формат и сохраняем на диск. Клиенту просто отдаём статические файлы. Степень разбиения контролируется размером данных — если в тайле оказывается слишком много объектов, он разбивается на 4 подтайла. Такой подход сохраняет баланс между количеством запросов на сервер и загрузкой лишних (не видимых в данный момент) данных.&lt;br /&gt;
&lt;br /&gt;
Однако при применении этой схемы к мультивременным слоям мы столкнулись с проблемой формы пространственно-временной области, которая может быть запрошена.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles1.png|center|700px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Мультивременные тайлы по дням. Дополнительно показана структура тайлов за один конкретный день. Каждый квадратик — отдельный тайл с данными. По горизонтальной оси условно показан размер тайла в пространстве, а по вертикальной — его протяжённость по времени.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Всё дело в том, что квадратные тайлы (векторные или растровые — не важно) хорошо подходят для передачи на клиент только при условии, что область просмотра (экран монитора) тоже примерно квадратная. Но представьте на минутку, что пользователь захочет отрисовать картинку размером 1×100000 или 100000×1 пикселей! Стандартные квадратные тайлы 256×256 тут не подойдут — вам придётся передать ровно в 256 раз больше данных, чем нужно клиенту!&lt;br /&gt;
&lt;br /&gt;
Именно такая ситуация возникает в случае с пространственно-временными данными — пользователи хотят смотреть и данные на весь мир за один день (аналог запроса 10000×1) и данные за 10 лет на деревню бабушки (1×10000). Если есть тайлы только за отдельные дни, во втором случае придётся сделать минимум 3650 запросов; если в каждом тайле есть данные сразу за 10 лет, при просмотре всего мира за любой день мы загрузим весь архив (точнее говоря, попробуем загрузить…).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Geomixer_temporal_temporal_tiles2.png|center|500px]]&lt;br /&gt;
&amp;lt;p style=&amp;quot;text-align: center&amp;quot;&amp;gt;''Наборы тайлов с разным разрешением по времени. Показаны характерные запросы от пользователей, которые обрабатываются этими наборами. Каждый тайл имеет примерно одинаковый размер данных, так что при увеличении протяжённости во времени размер в пространстве уменьшается.''&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Решаем мы эту проблему хранением сразу нескольких наборов тайлов различной формы. Условно говоря, есть тайлы за каждый отдельный день, тайлы за неделю, за месяц и за год. Список тайлов передаётся на клиент. Когда пользователь выбирает определённый период в календарике, наш API решает, какой набор данных лучше использовать и грузит нужные тайлы (кстати, определение этого набора тоже интересная задачка, которая может быть решена разными способами).&lt;br /&gt;
&lt;br /&gt;
Такой подход позволяет крайне эффективно с точки зрения сервера выбирать данные для запросов разной формы (фактически, раздаётся статика). Из минусов можно отметить увеличение объёма данных на сервере для хранения векторных тайлов (хотя для нас это всё-равно копейки по сравнению с размером наших растровых данных) и сложность обновления (каждое изменение нужно отразить сразу в нескольких наборах).&lt;br /&gt;
&lt;br /&gt;
== Банальное заключение ==&lt;br /&gt;
&lt;br /&gt;
Мультивременные слои в ГеоМиксере — мощный инструмент визуализации и анализа данных, содержащих временную компоненту. Сочетание эффективной выборки данных за любой промежуток времени с богатыми возможностями визуализации позволяет строить на основе мультивременных данных очень интересные проекты. Минимальная нагрузка на сервер позволяет хранить данные практически неограниченного размера.&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_temporal_tiles2.png&amp;diff=16459</id>
		<title>Файл:Geomixer temporal temporal tiles2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_temporal_tiles2.png&amp;diff=16459"/>
		<updated>2013-11-28T07:58:29Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_temporal_tiles1.png&amp;diff=16458</id>
		<title>Файл:Geomixer temporal temporal tiles1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_temporal_tiles1.png&amp;diff=16458"/>
		<updated>2013-11-28T07:47:46Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_vector_tiles.png&amp;diff=16457</id>
		<title>Файл:Geomixer temporal vector tiles.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_vector_tiles.png&amp;diff=16457"/>
		<updated>2013-11-28T07:44:13Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_ais.png&amp;diff=16456</id>
		<title>Файл:Geomixer temporal ais.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_ais.png&amp;diff=16456"/>
		<updated>2013-11-28T07:42:34Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_landsat8.jpg&amp;diff=16455</id>
		<title>Файл:Geomixer temporal landsat8.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_landsat8.jpg&amp;diff=16455"/>
		<updated>2013-11-28T07:39:23Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
	<entry>
		<id>https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_hotspots.png&amp;diff=16454</id>
		<title>Файл:Geomixer temporal hotspots.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.gis-lab.info/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Geomixer_temporal_hotspots.png&amp;diff=16454"/>
		<updated>2013-11-28T07:25:13Z</updated>

		<summary type="html">&lt;p&gt;Parshin: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Parshin</name></author>
	</entry>
</feed>