Записался на курсы ВКСвоё собственное дополнение для VS CodeTelegram mtprotoПравильно не запустился VS CodeMingda D2 Мой принтер

QGIS openlayers карта вашего города

Меняем систему координат через: Проект - Свойства - Система координат - в поиске набираем EPSG:3857 (указывайте двоеточие).

Устанавливаем дополнение QuickMapServices, дальше Интернет - QuickMapServices и выберем нужную карту чтобы была подложка и можно было бы ориентироваться на карте.

Здесь учимся работать с программой QGIS на курсе Qgis для совсем начинающих.

Подгружаем карту и загружаем в систему.

    1. Скачиваем карту мира с сайта https://planet.openstreetmap.org/ в формате pbf (весит она много, можете поискать карту меньшего объёма).
    2. Идём на https://www.openstreetmap.org/, в поиске находим нужный нам район и стараемся запомнить, что именно нам нужно найти. У меня это были координаты целого района в Республике.
    3. Находим ссылку «Экспорт» и выбираем нужный нам район в параметрах.
    4. Появятся координаты. У меня Linux Ubuntu. Устанавливаем дополнение: sudo apt install osmctools. Задаём экспорт нужных нам координат командой: osmconvert planet_osm.pbf -b=лево,низ,право,верх -o=rayon.osm.
    5. Ждём (ждал больше часа).
    6. Импортируем данных в 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 запросы).

Моя карта и атрибуты

Структура моих слоёв Начинать лучше снизу:

Экспорт в тайлы

После того как карта созданна, необходимо экспортировать её в тайлы. Для этого нужно открыть меню инструменты анализа. Открыть можно через иконку шетстерёнки в панели, Инструменты обработки растра - Сгенерировать 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;