WMS-сервис с треками

Я работаю в компании занимающейся мониторингом автотранспорта. Для отображения объектов на карте в качестве одной из подложек используется ОСМ.
База: MS-SQL. Из нужных нам данные в наличии: время, широта, долгота, количество спутников, скорость. Достигнута предварительная договоренность с руководством о предоставлении этих данных для ОСМ.

Реализацию вижу в виде WMS-сервиса. Уже поднял geoserver надо к нему wms прикрутить. После получения данных с трекеров, раз в несколько минут, происходит предварительная обработка и перенос в другие таблицы, тут их можно и подхватить.
Думаю, что все треки отображать смысла нет, надо придумать критерий по которому данные будут добавляться в базу WMS-сервиса, но так что бы на продуктив была минимальная нагрузка.

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

Здорово!

Это ты хвастаешься, или есть вопросы? :slight_smile:

Хвастаться буду, когда это в JOSM видно будет :slight_smile: А пока описал как я это вижу, м.б. я где-то не правильно думаю и стоит сделать по-другому.
А еще, скорее всего сегодня-завтра возникнет вопрос как wms приделать к geoserver. Описание нашел http://docs.geoserver.org/latest/en/user/data/app-schema/wms-support.html но пока не применял.

Со стоянками что делать планируете? Если их каким-либо способом не отрезать - они всё засрут в округе.

В системе есть понятие “парковка” вероятно можно его использовать.

А не проще ли просто выгружать треки в базу осм время от времени от имени какого-то пользователя? не надо играться с сервисом, поддерживать канал связи и учить всех ссылке на wms :slight_smile:

Может получиться так:
:slight_smile:

Здорово! А город-то какой? :3

Название института у левого среза намекает :slight_smile:

P.S. у левого среза скриншота

Ага, только скриншот не от автора топика. :wink:

Москва уж… http://yosmhm.neis-one.org/?elagin

Какая замечательная штука, спасибо.
Сервис на тестовых данных успешно заработал ( в JOSM надо указать ссылку http://localhost:8080/geoserver/wms ) Вполне хватило инструкции http://funnymonkey.com/install-geoserver-ubuntu
Дальше нужно хранилище. MSSQL использовать не планируется. Хорошо бы PostgreSQL запользовать. Как удобнее из MSSQL в PostgreSQL данные перегонять?

Вопрос “клякс” и прочего мусора во многом решается выбрасыванием точек с плохим (высоким) HDOP. Но есть подозрение, что раз это система трекинга, то этот параметр она не передает и не сохраняет.

Поднял PostgreSQL-базу, приделал к ней PostGIS. Таблица “geometry_columns” не создалась, зато есть view с таким же именем. Наплевал. Настроил все это в OpenGeoServer.

Сделал по инструкции http://gis-lab.info/docs/postgis/manual/ch03.html :
CREATE TABLE gtest ( ID int4, NAME varchar(20) ); SELECT ST_AddGeometryColumn(‘’, ‘gtest’,‘geom’,-1,‘LINESTRING’,2);
INSERT INTO gtest (ID, NAME, GEOM) VALUES ( 1, ‘Первая геометрия’, ST_GeomFromText(‘LINESTRING(2 3,4 5,6 5,7 8)’, -1) );
(Обращаю внимание, что в названии функций проявился префикс “ST”)
В Layer Preview наблюдаю нужный зигзаг.

Как я понял дальше нужно настроить правильный SRID. В GeoServer → Edit Layer есть поле Declared SRS, но WGS там целая куча :slight_smile: Выбрал: EPSG:2309
Затем сделал:
INSERT INTO gtest (ID, NAME, GEOM) VALUES ( 2, ‘Track1’, ST_GeomFromText(‘LINESTRING(
55.720901489257812 37.425498962402344,
55.720798492431641 37.424098968505859,
55.720699310302734 37.423999786376953,
55.720298767089844 37.423999786376953,
55.720199584960938 37.424098968505859,
55.720199584960938 37.424098968505859)’, 2309) );

Удалил тестовый зигзаг. Зашел обратно в Layer Preview и увидел трек в виде символа “J”

Запускаю JOSM, создаю точку на одной из выше описанных координатах, нахожу где она создалась. Оставляю только свой WMS-слой. Наблюдаю на черном фоне два белых квадарата наложенных один на другой со смещением на юго-восток.

Edit Layer → Bounding Boxes
Native Bounding Box (использовал Compute from data) регион установился вокруг координат занесенных в базу.

Lat/Lon Bounding Box установил сам:
Min X, Min Y, Max X, Max Y
30, 55, 60, 60

Другие (тестовые) слои отображаются нормально.

В трекерах обычно используется EPSG:4326

2309 Вобще какая то странная http://www.spatialreference.org/ref/epsg/2309/

Попробуй так


INSERT INTO gtest (ID, NAME, GEOM)     VALUES (  2,  'Track1', ST_GeomFromText('LINESTRING(
55.720901489257812 37.425498962402344,
55.720798492431641 37.424098968505859,
55.720699310302734 37.423999786376953,
55.720298767089844 37.423999786376953,,
55.720199584960938 37.424098968505859,
55.720199584960938 37.424098968505859)', 4326) );

Ну и GeoServer → Edit Layer есть поле Declared SRS ставь 4326

Изменил, но не помогло. На каком-то определенном масштабе белые квадраты начинают покрывать черный фон. Но линий по-прежнему не наблюдается.

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

В prod есть пара координат, id оборудования, время когда координата была отправлена оборудованием. По id можно создавать линии в osm.gtest. Нет гарантии что все координаты попадают в prod последовательно по времени. Значит нужно в osm вставлять точки сортированные по времени. Некоторые автомобили могут ездить по одному и тому же маршруту. С одной стороны это хорошо, но 100-500 одинаковых треков это уже лишнее. К тому же разные автомобили могут ехать по тем же точкам. Даже когда автомобиль стоит на месте координаты могут приходить.

Как сделать более правильно, при создании очередного трека проверять не превышен ли какой-то лимит в этом месте для всей базы? Опять же если новый трек в каком-то месте вливается в старый, хорошо накатанный, то в этом месте он заканчивается и ищется то место, где он начинает отклоняться от старого в этом месте первая точка должна создаться на старом треке.

В функциях PostGIS еще не разбирался, м.б. есть какие-то готовые, которые помогут решить такие проблемы?

Что-то вдруг подумалось, а может быть рисуется белым по белому? Где цвет линии-то определяется?

Запускаю josm из консоли. Создаю новый слой на котором создаю ноду взяв координаты из базы. Делаю зум на элемент. Изменяю масштаб. В консоли наблюдаю:
http://…/geoserver/wms?SERVICE=WMS&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=osm:gtest&STYLES=&SRS=EPSG:3857&WIDTH=500&HEIGHT=500&BBOX=4187638.3443475,7514576.3175247,4188300.4215561,7515238.3947333

Здесь нахожу поддерживаемые форматы, мне нужен KML, так точно будет видно есть данные или нет.

http://…/geoserver/wms?SERVICE=WMS&FORMAT=kml&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&LAYERS=osm:gtest&STYLES=&SRS=EPSG:3857&WIDTH=500&HEIGHT=500&BBOX=4187638.3443475,7514576.3175247,4188300.4215561,7515238.3947333

Сохраняю файл:

<?xml version="1.0" encoding="UTF-8"?>](http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd\>) osm:gtest

Изменяю масштаб (на линейке отображается 445 км.), опять вызываю новую ссылку в браузере, указав формат KML, и опять данных нет:

<?xml version="1.0" encoding="UTF-8"?>](http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd\>) osm:gtest

P.S. GeoServer → Gridsets присутствует EPSG:4326