Ответы пользователя по тегу OpenStreetMap
  • Как сохранить выбор в поле input?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Смотря какие будут количества запросов. Есть же https://overpass-turbo.eu/, который может искать, если составить запрос по шаблону. Можно его в виде WEB API использовать. Результаты, можно получать в GeoJSON и его уже отображать на каком leaflet или аналогах.

    Прелесть OSM в том, что его можно выкачать, и если ваш проект достаточно бОрзый по вычислительным ресурсам и стораджу, то можно отображать данные со своих носителей и рендер свой можно настроить и тайловый кэш. Всё это есть с инструкциями в сети. Ну судя по (отсутствующей) детализации вопроса вам может оказаться это всё поднять не под силу. Оно ж гуглится всё легко.

    А, стоп, там про адрес же, а я думал по ключевым словам и боунд-боксу. Ну да, нужно поднимать сервис геокодирования. Вот, кстати попалась первой ссылкой достаточно развернутая статья. А ещё вот у ДаДаты есть сервис геокодирования, не знаю какие там лимиты для бесплатного использования.
    https://nominatim.org/ уже предложили выше в ответе.

    Тоже соглашусь, что соблазн юзать бесплатный ОСМ выльется в ограничения, лимиты, невысокую скорость и, если поднимать локальные опенсорсные сервисы, не мало человекочасов девопса.
    Ответ написан
    Комментировать
  • Как сделать подложку(карту) на Python?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Самый простой, быстрый и универсальный путь такой.
    Взять готовый https://github.com/nextgis/nextgisweb
    Развернуть его в докере и у вас практически всё что надо есть. Исходники тоже есть, так что можно допилить.
    Теперь на счет подложки. Всё зависит от того, насколько детальная вам нужна карта и какую площадь вы ею хотите покрыть. Если небольшую площадь или не очень глубокий зумм нужен, то можно просто файловый кэш тайлов локально хранить и отдавать тупо через nginx локально.
    Про массовое скачивание тайлов можно посмотреть вот этот проект sasgis.ru

    Я бы сделал получение тайлов из сети и кеширование в каком-нибудь key-value локальном сторадже. Для нужной территории сделал бы "прогрев" кэша, а саму карту либо nextgis'ом, либо сам на лифлете или аналогичных сверстал.
    Кстати, точки можно и не из базы потдятгивать, а разместить в том же файловом кеше файлы с geo-json порезанные рамками тайлов уровня 8, к примеру. Ну или какой вам удобно там будет. Смотря сколько точек.
    Ответ написан
    Комментировать
  • Как отрисовывать офлайн карту из OSM?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А у вас какие мощности в распоряжении есть?
    Я бы поднял один из рендереров в отдельном докер-контейнере и генерил тайлы точно так же как в сети, но раздавал бы их локальным веб-сервером.
    Можно покопаться в исхониках одного из доступных рендереров и выудить оттуда код рендера тайлов.
    Вообще задача не тривиальная. Очень много всего придумано для рендеринга карт. Там много нбансов с подписями, со стилями линий и заливок, с тегами гео-обьектов...
    Ответ написан
    Комментировать
  • Позволит ли OpenStreetMap реализовать данный функционал?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Выше в ответе вам уже посоветовали поднять свой инстанс OSRM.
    Это делается очень просто с помощью докера: https://hub.docker.com/r/osrm/osrm-backend/
    OSRM умеет, вроде бы (не успел попрбовать эту возможность), поддерживать дополнительную матрицу для переопределения весов ребер, учитываемых при построении маршрутов. Это обычно используется для учета пробок на дорогах. Рёбра, на которых КПП закрыты, можно опускать в рейтинге так, чтобы OSRM строил через них маршруты только в самую последнюю очередь. Если по какому-то такому ребру таки пjстроен маршрут, значит нормальных путей не нашлось.

    OSRM будет брать данные из постгреса, который стоит поднять на другjм контейнере.
    Если нужно редактировать данные, можете попробовать iD.
    Ответ написан
  • Можно ли сделать картографический сервис с SVG файлом более 20 мб?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Там 20 мегабат векторных данных? Не такая уж и большая проблема, если она у вас быстро рендерится и по содержанию устраивает. Вы бы показали сам svg. тогда было бы понятнее. Может там обычный растр, но каждый пиксель цветным прямоугольником свёрстан в svg, мало ли...
    В любом случае, что-то мне подсказывает, что вам не требуется именно в векторе вся физическая карта. Что вы там показывать предлагаете? Реки? Моря? Горы? Может быть отрендерить карту в растр всю или отдельные слои, а сверху положить контуры областей для интерактивного взаимодействия.

    Посмотрел упомянутый SVG и да, это долго и больно ждать пока он отрендерится браузером весь. В любом случае придётся его как-то либо сегментировать, либо расслаивать.
    Я бы вам порекомендовал посмотреть в сторону NextGIS Web. Исходники есть на гитхабе.
    Но ребята барыжат и данными, и советами, и помощью в импорте геоданных из OSM, хотя там ничего особо сложного и нет.
    Из полезного вам, там есть поддержка растровых и, вроде бы, векторных подложек, можно настроить свой сервер рендера тайлов. Кроме того они поддерживают слои и выделения. В том числе геоданные в слоях вполне могут быть невидимы, а минимальным кодом можно сделать свою выдачу подсвеченных объектов по клику на карте. При этом данные будут запрашиваться с сервера, а не храниться полным набором локально что делает работу с картами быстрее в плане первичной загрузки и рендера.

    Ещё из полезного. НекстГИС умеет подключаться к Postgres (postgis) и брать геоданные оттуда напрямую. Позволяет делать несложный рендер объектов (контуры, заливки), боее сложные стили я не пробовал. но этого достаточно. чтобы подсветить полупрозрачным выделением какой-нибудь бассейн Амазонки или Кордильеры. Добавляя слои вы без дополнительного программирования и специальной обработки данных сможете добавлять на свою карту новые объекты. Конечно всё это можно реализовать и на чистом лифлете.

    В общем выбросьте свою svg-шку, предварительно нстроив в том же QGIS стиль, который будет копировать оформление этой карты. Может ыть стоит поискать готовый стиль, ведь наверняка уже кто-то озадачивался уже этой идеей. Потом настойте талйовый сервер, который будет генерить вам подложку в этом стиле и вы получите быстрый просмотрщик карты. Использовать ли NextGIS или пилить своё на leaflet'e (либо аналогах) - дело ваше, по райней мере можно подсмотреть что у них там как.
    Импортируйте снапшот OSM себе в локальную БД, можно отфильтровать ненужное, а можно и не фильтровать, если есть место. Я бы пофильтровал, у вас задача довольно узкая, но нужен весь шарик. К чему вам тогда детальная геометрия улочек и домов всех отрисованных захолустий планеты?
    Наверно весь необходимый вам объём влезет в пару сотен метров, если не упарываться сильно с фильтрацией, а может и меньше.
    Старайтесь использовать стандартные протоколы передачи гео-данных. NextGIS поддерживает WMS из коробки, но можно найти и плагин для лифлета. Можно, кстати, остановитьс яи на голом GeoJSON, если не использовать NextGIS пилить свой бэкенд к вашей карте. то искат, агрегировать и выдавать нужную геометрию в GeoJSON умеет postgis из коробки посредством чистого SQL.

    Итак. Резюмируем варианты:
    1) NextGIS - и вы получаете:
    - работу с геоданными и слоями на пользовательском уровне,
    - достаточно понятное место в исходниках бэка, куда можно вписать свою логику выборки данных,
    - лютый гемор (если ребята не доилили свои фронтовые решения) с модификацией фронтенда некстгиса под свои задачи;
    - профессиональну подготовку данных и консультации (правда платно, но не дорого), у них в портфолио есть задачи и похлеще вашей.
    2) Бэк на каком-нибудь Flask или ноде, который будет отрабатывать API клика по карте и отдавать при необходимости geojson, доставая его из postgis через SQL. Растровые тайлы рендерить стандартными сревисами рендера. благо их много. Единственное. что повозитесь с подгонкой стиля, но если онне критичен, то можно взять сторонние сервисы.
    3) Порежьте ваш svg на векторные или растровые тайлы, но с уменьшением детализации на мелких масштабах, чтобы показывать на фоне через лифлет, а сверху кладите отдельный GeoJSON с реками, с горами или с чем вам там надо для каждого конкретного случая. Это самый трудоёмкий, на мой взгляд, вариант, и самый труднорасширяемый в дальнейшем.
    Ответ написан
    4 комментария
  • Какой сервис выбрать для расчета маршрута и как создать собственный сервис с интерактивными картами?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    По требованиям все кроме третьего пункта (про стоимости) умеет osrm. К нему же идёт опенсорсный фронтенд, который можно допиливать.

    В обоих ваших вариантах вы написали какую-то чушь.
    Тайловый рендер разворачивается в докер-контейнере за 5 минут. Как и osrm. Сложно будет настроить все это под ваши хотелки, но можно.
    Бд - postgis. Есть тулза, которая импортит снапшот osm данных: https://wiki.openstreetmap.org/wiki/Osm2pgsql
    Можете придумать или поискать тег для указания стоимости проезда по дороге и везде проставить. По построенному osrm маршруту потом дополнительным запросом к бд можно вытащить дороги с ценами
    Ответ написан
    Комментировать
  • Как выполнить нормализацию адресов?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    После того, как открыли для себя сервис https://dadata.ru/, вообще перестали тратить время и деньги на собственные костыли из граблей. Сервис просто огонь.
    Для нас онлайн режим и скорость обработки не критична, поэтому мы даже уложились в бесплатный пробный тариф.
    Вроде бы у них были решения по установке их ПО в закрытом контуре, а это не что иное, как нужный вам оффлайн. Правда тут уже бесплатно не прокатит точно.

    До дадаты этот вопрос решался жутким нагромождением фильтров, регекспов с заменами и человеко-машинного совокупления.
    Общая схема годится не только для адресов, а вообще любых грязных данных:
    1. Входной датасет сохраняем в CSV и НИКОГДА не меняем.
    2. Обработка многоступенчатая. Каждая ступень состоит из фильтра и модификатора. Фильтр решает применим ли модификатор к каждой записи. Модификатор применяет свою модификацию если фильтр разрешил.
    3. Отладочный выхлоп, который показывает и позволяет быстро просмотреть полностью внесённые изменения.
    4. Каждая ступень должна делать минимальное однотипное улучшение максимально большого числа строк. Цель - каждой ступенью уменьшать разнообразие проблем, увеличивать регулярность, стандартизировать.
    5. При огромных входных датасетах можно сохранять промежуточный выхлоп, но в общем очистка должна выглядеть как пайп их последовательных ступеней обработки.
    - Очень часто бывает, что какая-то ступень незаметно ломает данные, а понимаешь это уже поздно, когда последующие ступени реализованы и отлажены, и сильно опираются на результат ломающей. Благодаря ступенчатости и иммутабельности процесса всегда можно зипнуть текущее состояние с любым предыдущим шагом и очередным фильтром заменить необходимые куски.
    - Часто бывает, что какая-то из ступеней улучшив отдельные записи убирает характерные признаки для фильтрации элемнтов для другой ступени. Благодаря такому инкрементальному процессу можно переставлять ступени местами.
    - При внесении ступенью изменения в запись. ступень должна оставлять свою сигнатуру в отдельном столбце. Удобно для поиска проблем.

    Расскажите подробнее почему не рассматривается онлайн. Заинтриговали.
    Ответ написан
    3 комментария