Собственный картографический сервис
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Собственный картографический сервис
Здравствуйте!
Желаю сделать свой картографический сервис. Задумка такова: в качестве основы использовать карты OpenStreetMap. С помощью OpenLayers, как я понимаю, можно использовать несколько слоев карты на своем сайте. Есть, к примеру, спутниковый снимок 1970 года размером 333 Мб. Хочу накладывать его поверх OSM. И... задумался: а что, пользователям обязательно скачать весь 333 Мб, чтобы увидеть карту? Есть ли готовые решения, которые позволят на своем сервере поднять свой аналог Google.Maps, т.е. загрузить только те фрагменты карты и в нужном масштабе? Понимаю, что от этого место на диске вырастет на несколько гигов за счет того, что будут несколько разных слоев в разных масштабах.
Желаю сделать свой картографический сервис. Задумка такова: в качестве основы использовать карты OpenStreetMap. С помощью OpenLayers, как я понимаю, можно использовать несколько слоев карты на своем сайте. Есть, к примеру, спутниковый снимок 1970 года размером 333 Мб. Хочу накладывать его поверх OSM. И... задумался: а что, пользователям обязательно скачать весь 333 Мб, чтобы увидеть карту? Есть ли готовые решения, которые позволят на своем сервере поднять свой аналог Google.Maps, т.е. загрузить только те фрагменты карты и в нужном масштабе? Понимаю, что от этого место на диске вырастет на несколько гигов за счет того, что будут несколько разных слоев в разных масштабах.
-
- Гуру
- Сообщения: 5292
- Зарегистрирован: 09 апр 2010, 19:30
- Репутация: 1015
- Ваше звание: просто мимо прохожу
- Откуда: Ё-бург
Re: Собственный картографический сервис
https://mapguide.osgeo.org/
есть много способов это организовать
нет конечно, из картинки делается пирамида тайтлов и пользователям отдаются только нужные кусочкипользователям обязательно скачать весь 333 Мб, чтобы увидеть карту?
есть много способов это организовать
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Собственный картографический сервис
Vady, если вы волнуетесь больше за место на диске, то ваши растровые данные лучше публиковать как http://www.opengeospatial.org/standards/wms - пользователь получает только то, что должно быть отображено на экране, но этот кусок вырезается из исходных данных каждый раз заново.
Если вас место на диске смущает меньше, но вы хотите, чтобы все работало быстрее, то для вас https://wiki.osgeo.org/wiki/Tile_Map_Se ... cification
Это не единственные два способа.
Если вас место на диске смущает меньше, но вы хотите, чтобы все работало быстрее, то для вас https://wiki.osgeo.org/wiki/Tile_Map_Se ... cification
Это не единственные два способа.
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Re: Собственный картографический сервис
Уже получилось наложить слой со снимком в QGIS. Только одно не могу понять: как в этой программе сделать пирамиду из растрового изображения? В OsGeo. Подскажите пожалуйста как.
Пробовал в кугисе заглянуть в свойства слоя с растровым изображением, нашел там раздел Пирамида, выбрал все разрешения, нажал Создать пирамиды, дождался окончания процесса, а итогового результата не увидел...
Пробовал в кугисе заглянуть в свойства слоя с растровым изображением, нашел там раздел Пирамида, выбрал все разрешения, нажал Создать пирамиды, дождался окончания процесса, а итогового результата не увидел...
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: Собственный картографический сервис
Это вы построили пирамиды для ускорения локального доступа к растру — они находятся либо внутри самого растра, либо во внешнем файле. Для организации веб-доступа они не помогут.
Если вы хотите получить набор изображений, которые можно раздавать обычным веб-сервером — можно воспользоваться скриптом gdal2tiles.py. Если у вас есть QGIS, то и этот скрипт, скорее всего, установлен. Он даже сгенерирует вам код веб-карты на базе OpenLayers 2 для просмотра результата.
Есть другой вариант — сконвертировать растр в формат MBTiles. Это тоже тайловое представление, но более компактное, поскольку тайлы хранятся не в файловой системе, а в базе данных SQLite. Но в этом случае понадобится картографический веб-сервер, умеющий отдавать картинки из этой базы. Ну или можно свой бэкенд написать, это несложно — несколько десятков строчек на любом языке программирования. Можете нагуглить готовые решения по словам «MBTiles server».
Если вы хотите получить набор изображений, которые можно раздавать обычным веб-сервером — можно воспользоваться скриптом gdal2tiles.py. Если у вас есть QGIS, то и этот скрипт, скорее всего, установлен. Он даже сгенерирует вам код веб-карты на базе OpenLayers 2 для просмотра результата.
Есть другой вариант — сконвертировать растр в формат MBTiles. Это тоже тайловое представление, но более компактное, поскольку тайлы хранятся не в файловой системе, а в базе данных SQLite. Но в этом случае понадобится картографический веб-сервер, умеющий отдавать картинки из этой базы. Ну или можно свой бэкенд написать, это несложно — несколько десятков строчек на любом языке программирования. Можете нагуглить готовые решения по словам «MBTiles server».
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Re: Собственный картографический сервис
Подскажите пожалуйста, где в QGIS-е можно такой возможностью воспользоваться? Искал по менюшкам, модулям, не нахожу gdal2tiles, где можно сгенерировать тайлы для разных зумов и впоследствии сгенерировать код веб-карты.Ariki писал(а): ↑19 май 2018, 21:15Если вы хотите получить набор изображений, которые можно раздавать обычным веб-сервером — можно воспользоваться скриптом gdal2tiles.py. Если у вас есть QGIS, то и этот скрипт, скорее всего, установлен. Он даже сгенерирует вам код веб-карты на базе OpenLayers 2 для просмотра результата.
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: Собственный картографический сервис
Это скрипт, запускаемый из командной строки операционной системы. Если у вас Windows, то можно запустить из консоли MSYS, которая устанавливается вместе с QGIS. Про параметры запуска можете почитать на страничке справки, на которую я дал ссылку выше.
Кроме того (по крайней мере, в QGIS 3), его можно запустить через панель инструментов геообработки: пункт меню Анализ данных → Панель инструментов; GDAL → Raster miscellaneous → gdal2tiles.
Кроме того (по крайней мере, в QGIS 3), его можно запустить через панель инструментов геообработки: пункт меню Анализ данных → Панель инструментов; GDAL → Raster miscellaneous → gdal2tiles.
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Re: Собственный картографический сервис
Спасибо большое! Получилось в QGIS 3 сделать. Теперь попробую развивать интерфейсно.
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Re: Собственный картографический сервис
Одно но: gdal2tiles сформировал веб-карту на основе OL версии 2.12. Сейчас актуальная - это 4.6.5. Считаю нецелесообразным начать развитие своего проекта на старых версиях библиотек, поэтому решил написать самому веб-карту на основе OL 4.6.5.
Вот код моей работы:
Вот ссылка на результат моей работы: http://velizh.ru/OL/
Чтобы увидеть косяк, нужно отодвинуть зум до минимума.
А это - результат создания с помощью gdal2tiles: http://velizh.ru/OL/openlayers.html
Я так понимаю, не выставлен минимально допустимый зум, с которого можно вести отсчет по собственным картам и не выставлена начальная-конечная позиция тайлов.
Как адаптировать код к версии 4.6.5?
Вот код моей работы:
Код: Выделить всё
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
<style>
.map {
height: 100%;
width: 100%;
}
</style>
<script src="https://openlayers.org/en/v4.6.5/build/ol.js" type="text/javascript"></script>
<title>OpenLayers example</title>
</head>
<body>
<div id="OLmap" class="map"></div>
<script type="text/javascript">
//Инициализируем карту
var map = new ol.Map({
target: 'OLmap'
});
//Добавляем слой и подключаем карты OSM
var osmLayer = new ol.layer.Tile({
source: new ol.source.OSM()
});
map.addLayer(osmLayer);
//Добавляем слой и подключаем карты Bing
var bingLabelledAerials = new ol.layer.Tile({
source: new ol.source.BingMaps({
key: 'ApvZJsI2Lu5e81yJ3Du-aFcjmh4AhRV5MdyW6ewCLAOITZlhP2kXRyW5302GNa30',
imagerySet: "AerialWithLabels"
})
});
map.addLayer(bingLabelledAerials);
//Добавляем слой и подключаем свои карты
var velizhLayer = new ol.layer.Tile({
source: new ol.source.XYZ({
url: 'http://velizh.ru/OL/{z}/{x}/{y}.png',
minZoom: 1,
maxZoom: 8
})
});
map.addLayer(velizhLayer);
//Позиционируем и зуммируем...
var view = new ol.View({
center: ol.proj.fromLonLat([ 31.1905, 55.60475 ]),
zoom: 13
});
map.setView(view);
</script>
</body>
</html>
Чтобы увидеть косяк, нужно отодвинуть зум до минимума.
А это - результат создания с помощью gdal2tiles: http://velizh.ru/OL/openlayers.html
Я так понимаю, не выставлен минимально допустимый зум, с которого можно вести отсчет по собственным картам и не выставлена начальная-конечная позиция тайлов.
Как адаптировать код к версии 4.6.5?
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: Собственный картографический сервис
gdal2tiles генерирует preview на основе OL (чисто чтобы оценить результат). Это не имеет никакого отношения к тому, как вы будете использовать сгенерированные тайлы.
https://openlayers.org/en/latest/examples/xyz.html - пример подключения слоя в документации
Собственно, вы даже использованием OL не ограничены - можете попробовать Leaflet, если он вам больше понравится https://leafletjs.com/index.html
И встречный вопрос по существу: вы программированием на JavaScript владеете, если да - на каком уровне?
https://openlayers.org/en/latest/examples/xyz.html - пример подключения слоя в документации
Собственно, вы даже использованием OL не ограничены - можете попробовать Leaflet, если он вам больше понравится https://leafletjs.com/index.html
И встречный вопрос по существу: вы программированием на JavaScript владеете, если да - на каком уровне?
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Re: Собственный картографический сервис
Вы мне привели пример подключения слоя, который я и использовал, но получилось почему-то криво. По поводу LeafLet - повторю, в картографировании я новичок, не знаю с чего лучше начинать - с OL или LL. На JavaScript программирую много лет.
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Re: Собственный картографический сервис
-
Последний раз редактировалось Vady 08 июн 2018, 23:33, всего редактировалось 1 раз.
-
- Гуру
- Сообщения: 1195
- Зарегистрирован: 23 апр 2011, 10:32
- Репутация: 205
- Откуда: Ульяновск
Re: Собственный картографический сервис
Открыть документацию и посмотреть как при его создании слоя задать ему максимальный/минимальный разрешённый зум.
-
- Гуру
- Сообщения: 731
- Зарегистрирован: 12 янв 2011, 22:40
- Репутация: 304
- Ваше звание: ∀
Re: Собственный картографический сервис
Во-первых, насколько я помню, для TMS в шаблоне URL нужно поставить минус перед y:
Во-вторых, похоже, у вас набор тайлов построен по нестандартной схеме. Вы генерировали тайлы с опцией -profile=mercator или какой-то другой? Был ли геопривязан исходный растр? Была ли указана проекция в его метаданных? Указывали ли вы проекцию при генерации тайлов в параметре -s_srs?
Нестандартные сетки, конечно, можно использовать с помощью ol.source.TileImage и ol.tilegrid.TileGrid, но со стандартной работать куда проще.
Код: Выделить всё
url: 'http://velizh.ru/OL/{z}/{x}/{-y}.png'
Нестандартные сетки, конечно, можно использовать с помощью ol.source.TileImage и ol.tilegrid.TileGrid, но со стандартной работать куда проще.
-
- Интересующийся
- Сообщения: 16
- Зарегистрирован: 03 май 2018, 14:28
- Репутация: -1
- Откуда: Россия
Re: Собственный картографический сервис
Уже получился целостный снимок, а не "рваный", как ранее! Прогресс! http://velizh.ru/OL/Ariki писал(а): ↑06 июн 2018, 13:21Во-первых, насколько я помню, для TMS в шаблоне URL нужно поставить минус перед y:
Вот параметры генерации тайлов:Ariki писал(а): ↑06 июн 2018, 13:21Вы генерировали тайлы с опцией -profile=mercator или какой-то другой? Был ли геопривязан исходный растр? Была ли указана проекция в его метаданных? Указывали ли вы проекцию при генерации тайлов в параметре -s_srs?
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 20 гостей