Я разработчик ГИС в Esri UK, и у меня довольно много опыта работы с Geometry Engine от Esri. Только после нескольких месяцев работы с инструментом я понял, насколько он на самом деле мощный.

Этот пост в блоге в основном предназначен для людей, которые не знают/не имеют краткого представления о том, что такое геометрический движок. Это сборник нескольких семплов и демо, которые я собрал вместе.

Что такое Геометрический движок?

Геометрический движок встроен в функциональность ArcGIS API for JavaScript, что позволяет вам работать с фигурами на карте в 2D и 3D. Он может делать такие вещи, как: ближайшие вершины, длина линии и вырезание нескольких объектов из другого.

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

Обычно это работает так…

var exampleA = геометрияEngine.перекрывается(геометрия1, геометрия2);
var exampleB = геометрияEngine. геодезическая длина(геометрияC, метры);

ПримерA демонстрируется при выполнении задачи (в данном случае перекрывается) с двумя объектами. Это довольно просто. exampleA в этом случае вернет true или false.

exampleB — одна из вычисляющих функций. Вместо нескольких геометрий мы бы передали параметр, например «метры», чтобы определить длину в метрах.

Начать работать с геометрическим движком очень просто.

Для чего это можно использовать?

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

Вот лишь несколько примеров более причудливых идей и вариантов использования геометрического движка, которые я использовал в течение долгого времени.

  1. Вычисление средней скорости транспортных средств с использованием данных в режиме реального времени/время.

Вот пример только с точечными данными с отметкой времени. С помощью JavaScript я мог бы просто провести черту между ними всеми. Это будет выглядеть так.

Синяя точка — автомобиль. Автомобиль должен иметь возможность ездить только по дорогам. Поэтому нам нужно будет провести простой анализ времени в пути (от точки а до точки б), чтобы это исправить. Затем мы вычисляем длину нового слоя анализа. Это больше похоже на это:

Это довольно простая математика, чтобы иметь возможность рассчитать пройденное время, если у нас есть время начала, время окончания, а теперь и длина, потому что мы можем рассчитать это с помощью Geometry Engine.

2. Анимация данных! Я МНОГОЕ использую движок геометрии при создании любых анимаций с помощью ArcGIS API for JavaScript.

В геометрическом движке есть функция, которая называется «уплотнить». В основном это создает дополнительные вершины в линии для создания «кадров» в анимации.

3. Вычитание геометрий друг из друга.

В приведенном выше примере я выполняю 15-минутный буфер времени в пути. Но вместо того, чтобы сам буфер был полигоном/цветом, я затушевал/затемнил остальной мир. Я придумал это «обратный многоугольник». Таким образом, я просто вырезаю буфер времени в пути (форму) из другой формы (мира). Это работает очень быстро, и это изящный маленький трюк, о котором люди часто спрашивали.

Сложные задачи геометрического движка

Все, что я показал выше, использует клиентскую версию GeometryEngine. Но на самом деле существует задача Geometry Engine на стороне сервера, которую можно вызывать через REST. Особенно полезно для расчета гораздо более крупных задач или при создании пользовательских инструментов геообработки.

Это действительно зависит от вашего варианта использования. Я бы настоятельно рекомендовал взглянуть на нечто под названием RBush. Таким образом, вы можете создать свой собственный пространственный индекс вашей геометрии на стороне клиента. Думайте об этом как… о создании локального API REST для загруженных вами геометрий. Это позволяет вам в основном извлекать данные только в пользовательском экстенте/геометрии, которую вы хотите запросить.

Был проект, над которым я работал в прошлом году, где я выполнял почти более 5000 звонков в секунду. Я делал запрос по тысячам следов зданий. Эти данные могли бы быть размером с Великобританию с миллионами строк… Этот проект был бы невозможен без RBush. Мне удалось увеличить скорость вызовов геометрического движка более чем в 100 раз.

Я надеюсь, что этот блог помог! Я подумал, что начну делиться некоторыми своими выводами и мыслями о том, чем я занимаюсь почти ежедневно.

Другие полезные ссылки и демонстрации

Технический блог Geonet с использованием геометрического движка
Демонстрация фермерских хозяйств с использованием GeometryEngine
Расчет воды, создаваемой плотиной