QGIS openlayers карта вашего города
Меняем систему координат через: Проект - Свойства - Система координат - в поиске набираем EPSG:3857 (указывайте двоеточие).
Устанавливаем дополнение QuickMapServices, дальше Интернет - QuickMapServices и выберем нужную карту чтобы была подложка и можно было бы ориентироваться на карте.
Здесь учимся работать с программой QGIS на курсе Qgis для совсем начинающих.
Подгружаем карту и загружаем в систему.
-
- Скачиваем карту мира с сайта https://planet.openstreetmap.org/ в формате pbf (весит она много, можете поискать карту меньшего объёма).
- Идём на https://www.openstreetmap.org/, в поиске находим нужный нам район и стараемся запомнить, что именно нам нужно найти. У меня это были координаты целого района в Республике.
- Находим ссылку «Экспорт» и выбираем нужный нам район в параметрах.
- Появятся координаты. У меня Linux Ubuntu. Устанавливаем дополнение: sudo apt install osmctools. Задаём экспорт нужных нам координат командой: osmconvert planet_osm.pbf -b=лево,низ,право,верх -o=rayon.osm.
- Ждём (ждал больше часа).
- Импортируем данных в QGIS через дополнение QuickOSM.
Экспортируем в базу данных
Посли импорта OSM файла у нас появилось несколько слоёв. У каждого слоя свои значения и атрибуты. Их необходимо импортировать в базу данных. Для импорта кликаем на слое правой кнопкой - Экспорт - Сохранить объект как - PostgreeSQL dump (Укажите кодировку EPSG:3857). При настройке экспорта DROP TABLE ставим NO.
Подключаем базу данных PostgreSQL и дополнение PostGIS
Для того чтобы база весь проект не хранился в файле а в базе данных решил подключить PostgreSQL в виде дополнения PostGIS. Для этого необходимо установить PostgreSQL.
Изначально устанавливаю postgresql командами:
sudo apt update
sudo apt upgrade
sudo apt install postgresql
Для работы с БД использую bdeaver-ce
Проверил:
sudo systemctl start postgresql
Внутри сессии psql выполните:
password postgres
Задайте и подтвердите пароль, затем выйдите:
q
Настройте метод аутентификации в pg_hba.conf. Найдите файл (обычно /etc/postgresql/*/main/pg_hba.conf) и убедитесь, что есть строка для локальной аутентификации:
local all all scram-sha-256
Для подключения по сети (если нужно) добавьте:
host all all 127.0.0.1/32 scram-sha-256
Проверьте настройки в postgresql.conf (обычно /etc/postgresql/*/main/postgresql.conf). Убедитесь, что параметр listen_addresses позволяет подключения:
listen_addresses = 'localhost' # или '*' для всех интерфейсов
Перезапустите PostgreSQL, чтобы применить изменения:
sudo systemctl restart postgresql
Устанавливаю PostGIS
sudo apt install postgis
Заходим в интерфейс как суперпользователь:
sudo -u postgres psql
Создаём базу данных
CREATE DATABASE gisdb;
Устанавливаем в неё PostGIS
CREATE EXTENSION postgis;
При необходимости: CREATE EXTENSION postgis_topology;
Импортируем данный из SQL файлов
psql -U user -d database -f sql.sql
В интерфейсле QGIS
Слои - Добавить слой - Добавить слой PostGIS
При подгрузке в окне браузера приложения выбираем PostgreSQL и загружаем таблицы из блоков ранее, у меня там 4 таблицы. 1 с полигонами, 2 с линиями и 1 с точками.
Начнём работу с полигонами. Внутри: районы, промзоны и гаражи, природа, ограждения, и отдельно вода.
Стилизация
Для удобства
Как на видео Символы и надписи переключаемся в режим Символизация по уникальным значениям. Там выбираем Значения и присваиваем правило без заливки и приятную обводку для элементов по id с параметром все другие значения. Каждое новое значение в новый слой.
Такой подход позволит отобразить все дома. Задавайте техническую стилистику, поскольку объектов будет много и отобразятся все что есть на карте. В дальнейшем стилистику можно поправить только у нужных. Общую убрать.
Присвоение стилистики
Для начала нужно найти нужный атрибут у элемента по которому мы будет присваивать стилистику.
После того как найден атрибут Делаем копию подложки и переходим в: Слой - Правая кнопка мыши - Свойства - Стиль - Символизация по уникальным значениям. Выбераем нужный атрибут в списке, нажимаем Классифицировать. Это действие добавит все значения атрибута. И уже в самом значении задаём стили.
Для быстрого задания значения атрибута можно начать его вводить а не искать по списку.
Объекты карты можно посмотреть тут: https://wiki.openstreetmap.org/wiki/RU
Для удобства прописывай легенду, так будет проще находить объекты. Есть возможность добавлять цвета в политру(не нужно запоминать).
Как выбрать объекты для анализа
Слой - правая кнопка мыши - таблица атрибутов - внизу есть кнопка Автоматически придвегаться к текущему объекту - Кликаем на нужный нам объект.
Другой способ
Выбераем объект кнопкой выбрать объект в прямоугольнике или точке и смотрим его номер. В дальнейшем в поле Слои - Фильтры - Фильтруем по номеру.
Слои - Выбираем слои - правая кнопка мыши - Отобразить таблицу аттрибутов.
Фильтрация
Слои - Выбираем слои - правая кнопка мыши - Фильтрация.
Чтобы найти нужное поле можно выбрать пункт Поля и начать вводить название нужного поля.
При фильтрации по атрибутам есть возможность посмотреть Все атрибуты (кнопка Все), и выбрать только нужные нам атрибуты.
Слева выбираем поле, а дальше нужное значение. Эти параметры уходят вниз в строку запроса (Для работы нужно уметь формировать SQL запросы).
Моя карта и атрибуты
Структура моих слоёв Начинать лучше снизу:
- Дороги из линий(route) в два слоя, первый общий фон, второй для выделение и рамки.
- Дороги из линий(highway) в два слоя, первый общий фон, второй для выделение и рамки.
- Дороги из линий(highway) в два слоя, первый общий фон, второй для выделение и рамки.
- Спорт (sport)
- Вода (wather)
- Вода (watherway)
- Важные объекты (amenity)
- Дома (building)
- Ограждение территории (amenity)
- Общественные пространства (leisure)
- Природа (natural: все кроме без начений)
- Районы (residential: apartments, rural, urban)
- Промзоны и гаражи (landuse:industrial, garages, commercial)
- Природа (natural). Слой без значений.
Экспорт в тайлы
После того как карта созданна, необходимо экспортировать её в тайлы. Для этого нужно открыть меню инструменты анализа. Открыть можно через иконку шетстерёнки в панели, Инструменты обработки растра - Сгенерировать XYZ тайлы. Генерирую их в дерикторию. Можно найти их по поиску который расположени снизу слева. Чтобы определить охват можно использовать координаты, они распологаются снизу справа. Записал координаты: сверху, снизу, слева, справа. После чего в охвате выбрал по самому большому слою и прправил координты на свои.
При экспорте 18 и 19 размеры экспортируйте отдельно, из за того что размер шрифта в данном случае нужно увеличить.
OpenLayers
После того как сформировал тайтлы выгрузил их на сервер (сжал в архив на компьютере а разорхировал на сервере через консоль).
Масштаб от 12 до 18 мне показался оптимальным по весу и восприятию.
При тестировании на слой ниже загрузил openstreetmap карту и она улетала в другую сторону, мои тайлы не загружались. Поменяв местами координаты начальной точки карта openstreetmap стала отображаться в нужном месте.
Дальше столкнулся с тем что мои тайлы не подгружаются.
Полез в исходный код и понял что координата y не соответсвуюет.
Нашёл тайлы через режим сеть в браузере и понял какой тайл по номеру должен загрузиться а какой загрузился у меня (спасибо второй подложке). Сравнил разницу в тайлах. И нашёл изображение (координата x не менялась).
Это стандарт для тайловых картографических систем (например, TMS — Tile Map Service):
Интерфейс (экран): ось Y идёт сверху вниз. Верхний тайл имеет y=0, следующий — y=1, и т. д.
Сервер (TMS): ось Y идёт снизу вверх. Нижний тайл имеет y=0, следующий — y=1, и т. д.
Инверсия позволяет согласовать эти две системы координат. Без неё карта отображалась бы перевёрнутой по вертикали.
Формула для инверсии
Если карта не загрузилась попробуйте поставить галочку для инверсии по оси y
const maxY = Math.pow(2, z) - 1;
const invertedY = maxY - y;



