#python-3.x #openstreetmap
#python-3.x #openstreetmap
Вопрос:
У меня есть скрипт на python, который позволяет мне получать из openstreetmap широту и долготу, но сейчас я ищу, как создать пользовательскую карту в OSM (или uMap), которая позволяет мне загружать кучу координат широты и долготы и добавлять точку на карте для каждой пары широта и долгота. Я знаю, что могу вручную загрузить CSV-файл, но на карте нужно разместить много точек, и я не могу загрузить пакет из 100 тысяч точек в одном csv-файле. Как я могу этого добиться?
РЕДАКТИРОВАТЬ: Следуя ответу @Michael2, я создал новую карту и пытаюсь выполнить запрос post. Однако я немного запутался с идентификатором карты и идентификатором слоя.
Если я создам новую карту, давайте назовем ее « mymap
«, тогда идентификатор будет « mymap_64813
» или просто « 64813
«? « 64813
» — это число, которое выдает мне umap. И я не могу понять, где найти идентификатор слоя : (
Ответ №1:
Для uMap вы можете эмулировать POST-запрос, который umap использует для хранения данных GEOJSON. Создайте новую карту и запишите идентификатор карты, идентификатор основного слоя данных (umap поддерживает несколько слоев на карту) и файл cookie вашего сеанса.
Затем выполните POST-запрос к:
https://umap.openstreetmap.de/de/map/<id of the map>/datalayer/update/<id of the layer>/
Обязательно отправьте файлы cookie для владельца и csrf-токена
Содержимое должно быть составным запросом формы со следующими полями:
name
: Строка имени слояdisplay_on_load
:true
rank
:0
geojson
: Файл с типом содержимогоapplication/json
и фактическими данными о точках в формате GEOJSON.
Чтобы проверить этот вызов, отредактируйте пример карты и посмотрите на трафик между клиентом и сервером, используя инструменты веб-разработчика вашего браузера.
Комментарии:
1. Привет @Michael2, спасибо за ответ. Идентификатор слоя — это название слоя?
2. А также, извините за вопрос новичка, но как работает cookie для владельца и csrf-токена? Я не делал ничего подобного раньше, поэтому я смотрю на Google все это. Я нашел файл cookie csrftoken (?), Но я не знаю, что с этим делать. Кроме того, я предполагаю, что мне нужно использовать модуль requests python, но как мне создать структуру запроса post?
3. Привет @Michael2, мне удалось получить (я думаю), что такое идентификатор карты и идентификатор слоя. В результате при выполнении запроса post я получаю «Запрещено». Какова структура содержимого в запросе post?
4. Если вы получаете запрещенный, вы отправили неправильный файл cookie и токен CSRF. Откройте ваш браузер. Нажмите F12. Перейдите на вкладку сеть. Вы увидите все HTTP-запросы, выполняемые вашим браузером. В вашем запросе вам необходимо включить все файлы cookie поля, отправляемые вашим браузером. Вам необходимо включить два токена аутентификации: первый — это токен CSRF. Это часто меняется и является просто функцией безопасности. Второй — это ваш фактический логин. Если одно из этих значений неверно, вы не получите ошибку 403
5. Ооо, я понял. Спасибо @Michael2, я просматривал токен CSRF и токен sessionid на вкладке приложения. Я вижу, что многое происходит, когда я перемещаюсь и ищу местоположения. Я попытался загрузить один маркер, используя только структуру geojson, но я увидел только много данных в формате .png и только одну информацию: файл изображения / gif. Как я могу сделать так, чтобы токен CSRF отображался в списке? Или я делаю это неправильно? Я также предполагаю, что токен идентификатора входа в систему я должен получить при фактическом входе в систему, верно?