Липсващи ж.к. в Osmand+ – какъв може да е проблемът?

Здравейте,

При търсене по адрес в Osmand в списъка с улици се показват елементи от рода на <София> (ж.к. XXXXXX) и когато се избере някой от тях, в списъка за сграда се показват блоковете, както са били маркирани с addr:housename=“бл.YYY”. Някои ж.к. обаче липсват (например „Младост 3“).

Таговете на блокове (is_in, addr:suburb) в „Младост 4“ и „Младост 3“ изглеждат съвсем еднотипно, и за двата ж.к. има точкови обекти с таг place=suburb, но „Младост 3“ (както и други квартали) отсъства от списъка с „улици“. Знае ли някой от кои тагове или релации се генерират в Osmand елементите <град> (ж.к.) и какви данни вероятно липсват за отсъстващите квартали?

Привет!

Тъй като нямам smart phone, не мога да инсталирам Osmand, за да проверя кои ж.к. липсват и кои не. Може ли за повече примери?

Аз самият се занимавах с таговете на сградите в ж.к.-та, бих искал да разрешим проблема.

Мерси

Здравейте.
Това е доста стара тема въпроса на която сме дискутирали ето тук тази тема тук: http://forum.openstreetmap.org/viewtopic.php?id=22015

Досега и аз още не съм открил точно как да се тагват правилно адресите и входовете в ж.к.-тата но има една релация с която става номера точно да излизат блоковете при търсене именно в Османд. Описал съм го това в другата тема в последното мнение. За Османд няма проблеми работи идеално това тагване.

Остава въпроса да си поиграя тези дни да видя какво ще стане с индексирането на адресите на блоковете в Mkgmap при конвертиране на картата за Гармин устройства.

Привет отново,

Всъщност темата не е точно същата – нямам предвид адресирането на блокове в общия случай (входове, addr:entrance/unit и пр.), а конкретно по какъв начин Osmand индексира за търсене сградите от даден квартал. В екрана за търсене по адрес се избират последователно от списъци град, улица и сграда (като цяло е удобно – така първо имената се довършват автоматично, и второ човек не може да въведе нещо, което липсва в индекса за търсене). В списъка с „улици“ са включени и кварталите, което ни върши чудесна работа: ако срещу Street се избере квартал вместо улица, срещу Building вместо имената/номерата на къщи по улицата се показват имената/номерата на сградите в квартала. Кварталите са в началото на списъка с улици, във вида <град> (квартал). Не ми е ясно обаче по какъв критерий се добавят – ако например просто се вземаха обектите, маркирани като place=suburb, не трябваше да липсва нищо. Ето кои присъстват в този списък:

<София> (7-ми 11-ти километър)
<София> (в.з. Американски колеж)
<София> (ж.г. Зоопарк)
<София> (ж.к. Банишора)
<София> (ж.к. Борово)
<София> (ж.к. Гео Милев)
<София> (ж.к. Гоце Делчев)
<София> (ж.к. Градина)
<София> (ж.к. Дианабад)
<София> (ж.к. Захарна фабрика)
<София> (ж.к. Зона Б-5-3)
<София> (ж.к. Иван Вазов)
<София> (ж.к. Изгрев)
<София> (ж.к. Илинден)
<София> (ж.к. Красна поляна 2)
<София> (ж.к. Лагера)
<София> (ж.к. Левски В)
<София> (ж.к. Лозенец)
<София> (ж.к. Люлин - център)
<София> (ж.к. Люлин 10)
<София> (ж.к. Люлин 2)
<София> (ж.к. Люлин 4)
<София> (ж.к. Люлин 6)
<София> (ж.к. Младост 1)
<София> (ж.к. Младост 1А)
<София> (ж.к. Младост 2)
<София> (ж.к. Младост 4)
<София> (ж.к. Надежда 1)
<София> (ж.к. Надежда 4)
<София> (ж.к. Света Троица)
<София> (ж.к. Свобода)
<София> (ж.к. Сердика)
<София> (ж.к. Студентски град)
<София> (ж.к. Сухата река)
<София> (ж.к. Хаджи Димитър)
<София> (ж.к. Хиподрума)
<София> (ж.к. Христо Смирненски)
<София> (ж.к. Яворов)
<София> (ЖП блокове)
<София> (кв. Бенковски)
<София> (кв. Васил Левски)
<София> (кв. Горубляне)
<София> (кв. Илиянци)
<София> (кв. Крива река)
<София> (кв. Орландовци)
<София> (кв. Хладилника)
<София> (кв. Христо Ботев)
<София> (комплекс Ембаси суитс)
<София> (комплекс Каса Вива)
<София> (комплекс Уинслоу гардънс)
<София> (м. Къро)
<София> (СПЗ Модерно предградие)

Липсват например ж.к. Дружба 1 и 2, ж.к. Лев Толстой, ж.к. Люлин 1, 3, 5 и от 7 до 10, ж.к. Младост 3, ж.к. Обеля 1, ж.к. Надежда 2 и 3, ж.к. Обеля 1 и 2 и други.

Опитах се на сляпо да намеря някакви разлики в маркирането на сградите в липсващите и включените квартали, но ми изглеждат еднакви. Явно пропускам нещо. (Ако има значение – използвам JOSM.)

Абе горе долу проблема е същия като в другата тема дето съм споменал. Дали ще е номер на блок вход и т.н. и на мен ми е интересно как се индексират адресите например в Османд и mkmap, просто трябва да се добавят подходящите тагове които ще свършат работа за правилното индексиране.
Като цяло видях го този списък дето споменаваш. Досега не се бях загледал в интерес на истината защото като търся например квартал не избирам на ръка от списъка а въвеждам директно например “ж.к. ХХХХХХХ” нещо си. Обаче ако въведеш така за София директно само това нищо не излиза само един или два кваратала, а по интересното е че като избереш този списък който ти си посочил и там ти ги листва директно номерата на блоковете.
За Варна като си играх с един квартал и както съм писал в другата тема при добавяне на релация къв всяка сграда от тип associatedStreet тогава директно Османд ги индексира сградите с този таг и тага housenumber ако е номера на блок ти излиза в списъка с адресите. Значи този вариант работи и е тестван. За София гледам няма направена подобна схема.
Специално за София гледам че например имената на кварталите са посочени с отделни точки. За Варна е по скоро дадено името в заграждащия полигон който обхваща квартала и липсва дадената точка с описанието на квартала с таг place:subrub. Съответно и затова не излиза в подобен списък кварталите във Варна. Обаче забелязах и нещо друго интересно в Османд. Като се напише само <Варна> излизат абсолютно всички сгради и точки които имат някакъв адресен таг като липсват подкатегориите за отделните квартали както например ги има за София, мисля че точно тага place:subrub в случая играе съществена роля да се категоризират отделните райони.
Освен това открих описание на начина на индексиране на Османд ето тук: https://code.google.com/p/osmand/wiki/MapAddressDataStructure
Обаче това описание е малко объркващо поне за мен и не ми стана много много аджеба как става самото индексиране. Но като цяло от което разбрах е май разделят града на зони и улиците също като гледат в кой район коя улица попада и дали попада в границите на града, също използват разделяне за микрорайони търсят тагове по точки и т.н. Като цяло използват сложен алгоритъм за индексиране на адресите. Обаче цялата работа ми намирисва че роля оказват и полигоните които обграждат даден квартал както може би и улиците които го заграждат. Може би най добре ще е да се поиграе с OsmandMapCreator за да се тества с някое парче от картата да се види как работи индексирането на практика. Ще трябва да караме по метода проба грешка освен ако не се намери някой да вдене как се прави самото индексиране описано в по-горната статия.

Да, и аз го гледах това описание и също не разбрах много ясно какво искат да кажат. :slight_smile:

Изтеглих си и кода на Osmand, нали е open source, но и от него няма какво да се научи, понеже само чете и ползва готовите индекси.

Свалих „Младостите“ в XML формата на OSM и ги прекарах през Osmand Map Creator и в момента се опитвам да проверя какво точно се е получило. Към Map Creator има отделен инструмент, binary inspector – конзолна програмка за работа с двоичния формат на Osmand, – и с него уж могат да се извадят списъци на улиците и други елементи на получената карта. Не успях от първи опит, ще го мъча още. В краен случай ще гледам кода на самия Map Creator.

Иначе Osmand Map Creator може да показва графично за някои от елементите към кой родителски елемент ги е закачил и се вижда, че например много от улиците в „Младост 4“ са „закачени“ към обекта за „Младост 3“. Предполагам, че е защото няма многоъгълник за граници на квартала и програмата ги причислява по разстояние към най-близкия точков обект от тип suburb. Това може би е хубаво да се поправи, но не би трябвало да причинява никакви неприятности със самия ж.к. и с блоковете, защото блоковете не са закачени към улици. Те са маркирани направо с addr:housename=“бл.325” addr:suburb=“ж.к. Младост 3” (или 4) и отделно с is_in=“ж.к. Младост 3; София; България”. Нямат addr:street= и addr:housenumber и според мен не трябва да имат. Не съм сигурен как е във Варна, но в София блоковете не се водят към улица, а към жилищния квартал, т.е. адресите не са „ул. Филип Аврамов №301“ (за блок 301), а „ж.к. Младост 3, бл. 301“ и хората биха ги търсили точно като „квартал, блок“ (а някои улички във вътрешността на кварталите изобщо нямат имена).

Странното е, че „Младост 3“ и „Младост 4“ и блоковете в тях са маркирани точно по един и същ начин, но първият квартал липсва в списъка на Osmand, а втория го има (избрах ги за тестове, понеже са точно един до друг и са ми познати).

Ще пиша и във форумите на Osmand, може да дадат по-подробна информация за алгоритъма за индексиране или да си погледнат данните и да ни помогнат да разберем защо се получава така.

Малко нова информация: всъщност „липсващите“ квартали изглежда могат да се намират през механизма за търсене, макар и по малко странен начин. В полето City (не Street!) се въвежда името на квартала (в моя случай – ж.к. Младост 3). Програмата не го разпознава и не го довършва, но позволява да се въведе до края (само „Младост 3“ също работи; освен това след като нещо е било търсено и намерено поне веднъж, то вече се включва в готовия списък).

Под полето се показва бутон Search villages/postcode. Избираме го. OsmAnd намира квартала като населено място. После в списъка Street вече може да се избере <ж.к. Младост 3> (в този вид, с <>) и тогава в списъка със сгради се показват блоковете. Интересно е, че в списъка Street има и други елементи, например <ж.к. Младост3> (комплекс Цариградски), които явно са подчинени на ж.к. Младост 3. (Това ми подсказва начин да подобря маркировката на сградите в Бизнеспарк София…)

Във форумите на Osmand има оплаквания, свързани със suburbs, защото в някакъв момент миналата година те са били изхвърлени от индексирането на населените места. След оплакванията са били върнати обратно, понеже в някои държави просто не може да се търси без тях. Този бъг е свързан с темата: https://code.google.com/p/osmand/issues/detail?id=2358. Освен това според пишещите във форумите, всеки месец поне по един потребител питал как се търсят Suburbs, защото това с полето City и бутона Search villages/postcode е меко казано неинтуитивно.

Остава въпросът защо някои suburbs се показват в списъка Street, след като „правилният“ начин да се търсят е през полето City

[РЕДАКЦИЯ] Изглежда следният алгоритъм е бил добавен наскоро в OsmAnd (Виж тези теми: https://groups.google.com/d/msg/osmand/SFdTn-ibKcM/CO9xRBrXBAQJ и https://groups.google.com/forum/#!topic/osmand/BnbPWrlCyZ8/discussion.):
сградите, които

  • имат поне един от таговете addr:housename или addr:housenumber и
  • нямат нито един от таговете addr:street и addr:place и
  • не участват в релация associatedStreet,
    автоматично се прикачват към фиктивна „улица“ с името на квартала, към който принадлежат, а тя самата явно се прикачва към записа за самия квартал, който е в индекса на градовете и селата и се намира със Search villages/postcode.

JOSM се оплаква, когато обектът има addr:housenumber без addr:street – явно е възприето housenumber да се използва само за адреси от вида „улица, №“. Тогава за горния алгоритъм ни остава да ползваме addr:housename плюс is_in / addr:suburb за принадлежност към квартала, както е в момента схемата в софийските ж.к. (или да очертаем границите на ж.к. – така и немаркираните обекти ще се причислят правилно към тях).

Та може би проблемът всъщност не е чак такъв проблем. :slight_smile: Моля да ме извините за спама…

Вчера си поиграх доста с Osmand Map editor както и с индексирването на адресите за да разбера как става самото индексиране. Като цяло да спомена че ще трябва доста да преработим картата особено за София тъй като има грешно индексирване на кварталите. Типичен пример е Младост 4 е индексиан 2 пъти реално защото обхваща и района на Младост 3.
Та търсенето работи защото точно именно различните квартали са индексиране все едно са в различно населено място. Това се дължи на това че точката описваща квартала е тагната с place:subrub и точно тогава Османд го индексира квартала като отделен град. Изследвах това директно с индексите на картата.
ОБАЧЕ основния проблем са полигоните както описах и преди това. Когато Османд види че има такава точка place намираща се в заграден полигон с landuse:residential то компилатора го възприема като населено място и индексира всички сгради обградени в този полигон които имат таговоте **addr:housename или addr:housenumber ** Относно това дали влизат в индекса за София мисля че компилатора чете директно is_in тага откъдето взема на предвид че subrub попада в границите на София. То това го има и описано в по горната статия дето съмп посочил как става поетапното индексиране. На пръв поглед е неясно но като вникнеш по навътре в нещата започвам да разбирам как работи индексирането. Обаче се чудя дали няма да е по-добре да направим фиктивна улица с добавяне на релация от тип associatedSstreet така директно ще се изписва ж.к. и ще излизат кварталите в търсенето.

П.С.
Например открих грешки в Дружба 1 и Дружба 2 в is_in тага там имената не бяха правилно разделено с “;” а само със запетая. Освен това има и проблеми с други райони за които е турен общ полигон за landuse:residential който обхваща повече от едно населено място. Освен това този таг is_in не знам дали има смисъл да се ползва защото отдавна е остарял морално. Остава да видя дали например тага addr:place се използва при индексиране на адресирането. И сигурно някои квартали се намират в полето за улици тъй като Османд им присвоява наблизо намиращата се улица и сигурно няма таг за street и затова.
Дай някой конкретен пример и може да потърся къде се корени проблема.

Като цяло алгоритъма на индексиране на Оsmand е доста сбъркан поне според мен. Например преди време руснаците дето си правят техните карти з Гармин използваха друг алгоритъм само с тагове addr за да стане индексирането както трябва с отделни тагове addr:place addr:country и заграждащ полигон за сградите.

Засега не е много доба идея да се пипат полигоните за София тъй като там гледам улиците са направени и поставени отгоре по краищата на полигоните и за да се маркиат те директно трябва да изтриеш някоя улица че да може да се маркира полигона.

Освен това ми се иска да си поиграя още малко за да измислим една обща схема за тагване така че да не съобразяваме само с Османд още повече че картите се трансформират и за други формати. Например аз ми се ще да подкарам пранилното индексиране и за Гармин устройства с програмата mkgmap.

Здрасти.
Чак сега го видях това твое мнение като го бях пропуснал да го прочета преди това.
Да и аз точно си играх с инспектора на Османд за да видя точно кои блокове се привързват към дадения квартал в индекса на получената карта.
Искам да те попитам как успя да подкараш да ти извежда графично OsmandMapCreator да ти показва кой обект към кой адрес е привързан? Защото видях че е нещо с десния бутон и показване на адреса но при мен нищо не излиза като се мъча по този начин. Явно някъде нещо бъркам :roll_eyes:.
Иначе относно блоковете то и във Варна както и навсякъде по големите градове блоковете са привързани към кварталите основно. Е има и някои изключения за блок към улица но такива сгради са рядкост по принцип изато точно си мислих да се прибегне до схемата с фиктивна улица с име “ж.к. ХХХХХ”. Така директно ще се изпише в полето за търсене квартала. Макар че този начин не е много правилен и ако например има улица със същото име на квартала в града то тогава ще има дублиране на имената.

Привет,

Командата е десен бутон / Show Address (предпоследната), но за да работи, трябва вече да има obf файл в папката, която е зададена в Window / Preferences / Directory with obf binary files – там, където и без това се записват файловете при конвертиране (не съм сигурен за File / Specify working directory, затова и нея съм я насочил към същата папка). Гледам да държа само по един obf файл там, защото не съм сигурен какво става с индекса, ако са няколко.

Аз пък не можах да се преборя с binary inspector – опитах с опции -vstreets, -vaddress и т.н., но нищо не извежда, само общи статистики за obf файла. Единственото, което проработи, беше -vpoi.

Снощи се погърчих доста с Map Creator. Изтеглих си едно парче с цялата София от openstreetmap.org, после с JOSM си добавих някакви тестови сгради и комплекси и изпробвах различни комбинации от тагове, като след всяка промяна конвертирах и качвах на телефона в OsmAnd. За съжаление резултатите бяха доста хаотични, например тестовите сгради присъстват в списъците на два или три квартала, въпреки че са в отделно очертание с landuse=residential или даже в комплекс, дефиниран като очертание с place=suburb (не като точка), или още повече – с директно зададени addr:suburb, addr:place или is_in. Днес заподозрях, че просто съм разположил комплексите твърде близо (бяха съвсем малки, за тест) и това е объркало индексатора. Имам чувството, че може би в него има твърде много с кръпки за някакви частни случаи и те от време на време се държат непредсказуемо, но още не съм имал време да му гледам кода.

Иначе ми се струва, че това с фиктивната улица не е добро решение в дългосрочен план. Едно е самият OsmAnd или друг конкретен софтуер да си създава „наум“ такива улици като патерици, понеже примерно им е трудно да си сменят вътрешния модел на данните, друго е ние да правим такива хакове в общите данни на openstreetmap.org, които се предполага да се ползват универсално от какви ли не хора и програми за какви ли не цели.

Може би най-подходящият таг за нашите комплекси все пак е place=suburb в комбинация с addr:suburb/addr:place на блоковете? Според документацията suburb е точно за разграничаване на неща с еднакви имена в рамките на град. По принцип изглежда са го измислили заради улици с еднакви имена в различните квартали, при нас просто освен това има и сгради с еднакви „имена“ (т.е. в София има много сгради „бл. 301“ и те се разграничават по suburb). Опитвам се да докарам нещата да работят в OsmAnd без остарелия is_in, само с addr:suburb/addr:place, да видим какво ще излезе. Може би ще е смислено да им предложим да добавят отделен бутон за квартала (City - Suburb - Street - Building), вместо кварталът да се въвежда при градовете, и човек просто да може да избере или улица, или квартал, или и двете. Разбира се, нямам представа какво е положението с Гармин и тамошните конвертори.

Като цяло това проработи при мен за да видя коя сграда към кой квартал или населено място е индексирана:

inspector.bat -vaddress -vstreets -vmap -vbuildings -vstreetgroups Sofia.obf > obekti.csv

Където София е обф файла а с “>” се дава да ти изведе обектите директно във csv файл без да ги принтира на екрана.

Като цяло и аз не харесвам да се ползват тага addr:Street ама на този етап масово конветорите четат главно него за имената на улиците или при нас както е става за имената на кварталите. Според мен би трябвало въобще при индексирането на адресите да се изплозват таговете addr и нищо друго. Защото като гледах с индексирането направено от Османд то доста често има неправилно индексирани сгради например на 7-ми километър там някои сгради са присвоени на някой от Младосите беше мисля блокове. Като цяло става голямо мазало със сегашния им алгоритъм.
Доколкото прочетох при Османд както и за Гармин значение оказва и administrative и admin_level таговете за да се индексират правилно в кой град или район се намират улиците при индексацията.

Относно фиктивната улица с име на квартал поне засега това е по универсалното решение да ти кажа. Прави се едно общо правило всички квартали да имат пред името “ж.к.” така че да се разгарничават ясно от улиците със същи имена. Освен това например в Гарминските уреди единствено можеш да търсиш по Град, улица и номер и толкоз и няма възможност например да избереш микрорайон.

Даже давам пример с OFRM картата.
Преди година две при тях търсенето на блоковете беше направено с помощта на POI-та които съдържаха името на квартала пред тях и съответния номер на блок т.е. реално и тук може да се направи същото да се индексират всички блокове като точки и после да се търсят те там в менюто с POI. След време успяха да ги направят да се търсят директно през адресното търсене и точно там се търси квартала в полето за улица във формат например “ж.к. Младост 1 бл” точно така се изписва в списъка с търсените улици квартала и после съответния му номер.
За съжаление още не съм подкарал адекватно как става самото индексиране на mkgmap за улиците защото специално за Варна в OSM липсва като цяло много много адресна информация за улиците.
Смятам да видя как стоят нещата за Бургас защото гледам че един потребител си е играл доста да направи адресации на улиците в централната част на града и там че е интересно да видя дали се е получил желания резултат.

Например за Андроидски програми да ти кажа пробвах и други програми различини от Османд и при тях например индексирането е направено по различен начин и там например въобще не излиза нито един квартал в търсенето и освен това ако търся накоя улица директно то списъка на София например и я избера някой път ми показва улица в Костинброд. Нещо пък там става объркване с таговете за град и област. То дефакто явно си излиза списък с областта каквото е намерило ама ти си мислиш че това е само града.
Като цяло това с адресацията се оказа пълен омиш отвсякъде, защото всеки ползва различни схеми за адресиране, прогамите от своя страна ползват различни методи да прочетат тези адреси и така. Затова и е такава тотална обърквация отвсякъде.