Синхронизация отделений Новой Почты с OSM

Если НП берёт координаты с Яндекса и добавить в API GPS координаты не согласятся, то придётся делать полуавтоматическую синхронизацию. Первый раз вручную разметить всё, что Nomatim не осилил, а последующие разы опять же если Nomatim в недоумении, то тоже помогать ему ручками.

Ну, во-первых для всех точек, добавленных Nominatim’ом стоит ставить fixme=position.
На начальном этапе полуавтоматическое добавление самый верный способ.
Судя по API НП у точек есть свой ‘Ref’. Стоит узнать как часто он меняется и если достаточно устойчив,
можно воткнуть кго в OSM для уже созданных точек в качестве какого-нибудь левого тэга типа ref:novaposhta=‘…’
Тогда уже по нему в дальнейшем можно будет синхронизировать базы (время работы, удаленные/перенесенные отделения).

Nominatim не добавляет точки. Или это вообще, про добавлении точки исходя только лишь из адреса?

Да, я об этом.

Получен второй ответ:

Треба б попросити їх перейти на OSM :slight_smile:

@TheSteelRat
перед тим як робити імпорт/уточнення в загальній базі на ОСМ, можна потестувати все це в пісочниці - http://wiki.openstreetmap.org/wiki/Uk:Sandbox_for_editing

Поки ми тут все обговорюємо, вже все звершилося
https://www.openstreetmap.org/changeset/44344278

За всю Україну не скажу, але по Кременчуку доволі не погано все зроблено. Дублікатів нема, зміщень нема, все впорядковано.

@militrik
C Кременчуком нет проблем. Там все отделения отлично мёрджатся, надо только удалить 2 дубликата. Гораздо более интересная ситуация с мелкими городами и сёлами, допустим:
https://www.openstreetmap.org/#map=18/50.34318/30.30430. Тут скрипт не смёрджил 1-ое отделение. В итоге мы имеем 3 отделения в городе, вместо двух. Притом добавленное отделение по координатам НП расположено совсем не там, ибо геолокация Яндекса на тот момент (когда НП забивала координаты) такого адреса не знала.

В общем у этого коммита есть несколько проблем:

  1. Дубликаты.
  2. Неправильное местоположение там, где Яндекс карты не знают адрес. Будет отделение в центре города/улицы :).
  3. Несоблюдение правил OSM - координаты то Яндекса…

А скрипт вважає відділення одним і тим же, якщо розходження в координатах від вже нанесеного та даних яндекса складає N метрів? І скільки цих метрів?

Бо ось приклад і все гаразд. Пошта не переїхала по даним яндекса і залишилась там, де я її наносив.
https://www.openstreetmap.org/node/4160503598#map=19/49.09377/33.42261
https://yandex.ua/maps/21609/kremenchuk/?ol=biz&oid=1230399501&ll=33.422518%2C49.094347&z=19&from=1org_map&mode=search

Привет

Это я автор скрипта мержа и этого коммита. Знаю что не все идеально получилось, что заметил - подправил вручную. Но так все-таки лучше, чем было раньше :slight_smile:

К сожалению не знал, что у вас тут похожая дискуссия уже была, иначе бы наверно тоже поучаствовал

В планах адаптировать его и для других данных, которые доступны в интернете. Например - банкоматов и отделений ПриватБанка и других банков

Не дуже добре вийшло
https://www.openstreetmap.org/node/4550936835#map=15/51.1126/28.0523 - нова, невірна точка
https://www.openstreetmap.org/node/3671979178 - стара точка
Наглядно видно через Achavi з вказанням bbox’у по Новим Білокоровичам

І чомусь думаю таких прикладів буде багато.

А скрипт вважає відділення одним і тим же, якщо розходження в координатах від вже нанесеного та даних яндекса складає N метрів? І скільки цих метрів?

Алгоритм был такой: считать корректным отделение если у него задан номер (например name=Нова Пошта 1) и находится в пределах двух километров от адреса, который предоставляет novaposhta.ua либо не имеет номера (name=Нова Пошта) и находится в пределах одного километра

В случае с Білокоровічами расстояние почти 2.5 км и скрипт, к сожалению, не распознал уже существующее отделение
Но теперь, созданное отделение имеет корректный source:pkey тег и созданную точку можно перенести в правильное место

@Eugene Schava вы так и не отреагировали на мои замечания.

К вам 4 претензии:

  1. Вы не можете использовать координаты отданные Яндексом в OSM. На самом деле на этом пункте можно было бы остановиться.
  2. Алгоритм вашего скрипта очень прост. Он ничего не знает про границы города и адреса по координатам, а оперирует лишь расстоянием между OSM и Яндекс координатами. В итоге получается как в Лопатине (Львовская область). В городе всего 1 отделение и оно было нанесено правильно. Ваш скрипт снёс это отделение и переместил его куда-то возле леса.
    Ещё примеры:
    Чернигов, отделение 5. НП - правильно. OSM - нет. Вы выбрали OSM. Хотя там по названию дороги рядом легко можно было понять, что OSM отделение стоит не там.
    Ивано-Франковск, отделение 2. Та же тема ^^.
    Одесса, отделение 1. НП - правильно (Ленинградское шоссе 28, OSM - не правильно - 27)
    и т.д и т.п.
  3. Вы же понимали, что ваша авто правка не сможет сделать всё красиво. Где стандартные теги типа fixme когда ваш скрипт не может на 100% сказать, что эта координата стоит правильно? Как комьюнити сможет помочь вам исправить косяки вашего коммита?
  4. Вы какую-то визуализацию перед мёрджем делали? Вы бы увидели ваши косяки до коммита.

Вообще рекомендую перед тем как делать большие изменения погуглить, возможно это изменение уже обсуждается и вы не в теме.

P.S. И куда исчезло отделение 1 в Броварах?

Кстати,

Нельзя. Они используют координаты Google. По TOS Яндекса и Google нельзя использовать результаты их geocoding на любых картах, кроме их.

Я вибачаюсь, але що означає координати гугла? Гугл приватизував поняття “координати”?
Api Приватбанка видає дані в такому вигляді. Дані видаються без усіляких ключів та реєстрацій, безкоштовно та без смс.
https://api.privatbank.ua/p24api/infrastructure?atm&address=&city=Комсомольск
Не бачу тут ніякого гугла, яндекса ітд.
Так, що вибачайте, але після того, як я не знайшов в osmand банкомату, коли він був мені так потрібен, я без жодних вагань залив усі в своє місто. На всю країну не ризикнув, бо мій метод не враховує вже нанесені, на зразок скрипту Eugene Schava.
Так, що не бачу жодних перешкод, врахувавши помилки та неточності, створити скрипт для заливки даних, наприклад, Привату. Хоча, мушу визнати, координати привата буває плавають ±50м. Тому скрипт повинен враховувати і адресу.
Про Приват десь вже бачив обговорення на форумі.

@militrik а я что-то говорил про координаты банкоматов? Нет. Я говорил про отделения. Их координаты API не отдаёт, зато отдаёт страница с картой. Вот эти координаты использовать нельзя.

Вы не поверите, но и координаты Новой Почты, и координаты банкоматов Привата используют геокодинг. Однако НП призналась, что использует геокодинг Яндекса, а Приват настаивает, что это их внутренний сервис. Одно я знаю точно - это не координаты GPS передатчиков в банкоматах.

Что мы получаем, когда пытаемся смёрджить объекты уже на карте и объекты от которых у нас есть местами очень неточные координаты геокодеров? Правильно. Дубликаты, неправильные переносы, удаление объектов, которые были старательно нанесены членами сообщества. Именно поэтому чем сложнее алгоритм, тем меньше ошибок. Остальное должны исправить люди, однако им нужно помочь (валидатор, fixme).

Згоден про відділення.
Їх можна визначити виходячи з адреси та координат банкомату/терміналу, прийнявши за замовчуванням, що в кожному відділенні є хоч один банкомат та/або хоч один термінал самообслуговування.

https://devcenter.novaposhta.ua/docs/services/556d7ccaa0fe4f08e8f7ce43/operations/556d8211a0fe4f08e8f7ce45

{
    "success": true,
    "data": [
        {
            "Description": "Відділення №1: вул. М. Грушевського, 3",
            "DescriptionRu": "Отделение №1: ул. М. Грушевского, 3",
            "Phone": "(0342) 59-13-42",
            "TypeOfWarehouse": "9a68df70-0267-42a8-bb5c-37f427e36ee4",
            "Ref": "39931b80-e1c2-11e3-8c4a-0050568002cf",
            "Number": "1",
            "CityRef": "20982d74-9b6c-11e2-a57a-d4ae527baec3",
            "CityDescription": "Заболотів (Снятинський р-н)",
            "CityDescriptionRu": "Заболотов (Снятинский р-н)",
            "Longitude": "25.299652300000000",
            "Latitude": "48.470805500000000",
            "TotalMaxWeightAllowed": 0,
            "PlaceMaxWeightAllowed": 0,
            "Reception": {
                "Monday": "15:30-18:00",
                "Tuesday": "-",
                "Wednesday": "15:30-18:00",
                "Thursday": "-",
                "Friday": "15:30-18:00",
                "Saturday": "-",
                "Sunday": "-"
            },
            "Delivery": {
                "Monday": "09:00-15:00",
                "Tuesday": "-",
                "Wednesday": "09:00-15:00",
                "Thursday": "-",
                "Friday": "09:00-15:00",
                "Saturday": "-",
                "Sunday": "-"
            },
            "Schedule": {
                "Monday": "09:00-18:00",
                "Tuesday": "09:00-18:00",
                "Wednesday": "09:00-18:00",
                "Thursday": "09:00-18:00",
                "Friday": "09:00-18:00",
                "Saturday": "09:00-15:00",
                "Sunday": "-"
            }
        }
    ],
    "errors": [],
    "warnings": [],
    "info": []
}

API Нової пошти чудово віддає на вихід координати своїх відділень. Тут тільки єдине питання звідки вони їх взяли?

Та то ми офтопили про відділення Приватбанку.
Про Нову Пошту точно скажу, що це не координати складу. Всі ми розуміємо, що то є координати визначені яндексом за адресою будівлі. Але ми цього не знаємо). Вище є мі й приклад.