OpenStreetMap, как получить координаты адреса, часть простая
Последнее время наблюдаю тенденцию, что всё больше и больше людей сталкиваются с проблемами в отсутствии геоданных. Вернее даже не так, в их закрытости. Если ещё вчера всех устраивали возможности картографических сервисов по расстановке маркеров, то теперь пользователь хочет большего: подсветить улицу, показать дома на ней, посчитать протяжённости рек и т.д. И тут их ожидает сюрприз, казалось бы на карте они всё это видят, но сделать ни чего не могут — это просто картинки. Развитие, что Google.Maps, что Яндекс.Карт остановилось на показе картинок, геокодинге, да навигации.
Шаг вправо, шаг влево и ты в тупике. Единственный путь — воссоздать необходимую геометрию самому. И если нарисовать дорогу и десяток домиков по улице вполне быстро и легко, то скажем сотня другая километров водного пути отбивает всё желание.
Именно в такие трудные моменты за спинами разрекламированных Google и Яндекс становится виден проект OpenStreetMap, и заявляет он: — Данные у меня есть, хочешь которые ты.
Да, возможно не такие полные местами, но именно геоданные, а не весёлые картинки. А это открывает большие возможности по их обработки и анализу. К тому же данные доступны по открытой лицензии ODbL и имеют два главных условия использования: обязательная ссылка на источник данных (участники OpenStreetMap) и в случае публичных производных данных они должны быть также опубликованы по лицензии ODbL.
Поехали
А теперь собственно окунёмся в эти данные. Сегодня наша цель извлечь из них адреса и получить их координаты. Причём будем делать это не поштучно, как это делают геокодеры — вводя адрес и получая координаты, а сразу все имеющиеся. Сохранять результат будем в CSV.
Особенность простого способа в том, что нам не нужны ни какие базы данных, знай себе копируй и вставляй. Но чтобы это было возможно, придётся идти на жертвы. А именно, наше упрощение в том, что адреса мы будем извлекать для заранее оговоренного одного населённого пункта. Мы просто первоначально ограничим наши поиски заданной территорией — нужный населённый пункт вырежем из общего набора данных.
Исходный материал
Итак, отправная точка — это данные OSM о всей планете. Но они очень большие, поэтому если нам не нужно покрытие всей планеты, то берут более локальные территории например на Geofabric разбито по континентам. Для российского сегмента наилучший вариант Gis-Lab, где удобно нарезаны файлы по регионам. Забираем необходимый файл региона в формате pbf.
Инструменты
Для дальнейшей работа нам понадобятся инструменты osmconvert и osmfilter. C помощью первого можно конвертировать данные из разных форматов и обрезать, оставляя только интересующие области, уменьшая тем самым объём и как следствие скорость обработки. Второй предназначен для фильтрации объектов по их свойствам.
А вот пример файла:
В итоге первая команда будет у нас такая:
Теперь у нас есть точечные данные только из заданной области. Но там много того, что нам в итоге не нужно, например дороги, парки, заборы и т.д.
Фильтрация
Поэтому следующим шагом мы отфильтруем из всего многообразия только дома содержащие адреса. Дома в OSM обозначаются тегом building, а адресная информация в тегах начинающихся на addr. Так же отбросим информацию об авторе и версии объекта, она нам просто не нужна.
Ну вот файл ещё раз уменьшился в размерах и теперь настал момент посмотреть что же там внутри осталось. Самое время превратить его во что-то человеко-читаемое. Как и обещал это будет CSV.
Результат
Воспользуемся всё тем же osmconvert, в котором предусмотрен вывод в CSV. Из параметров стоит заострить внимание на колонки и из каких тегов вставляется в них информация.
| @id | addr:street | addr:housenumber | @lat | @lon |
|---|---|---|---|---|
| 1000000147959515 | улица Масалова | 25А | 51.6522509 | 36.0337820 |
| 1000000147960436 | Школьная улица | 71 | 51.6546536 | 36.0139438 |
| 1000000147965426 | улица Котова Гора | 1 | 51.7337383 | 36.1837660 |
Ну вот, это уже какие-то да геоданные и их можно вставить в ГИС и как-то проанализировать, что и видно на представленной в начале картинке.
Но тема не ограничивается только адресами. На втором шаге можно оставить например остановки общественного транспорта и визуализировать транспортную доступность. Впрочем это уже совершенно из другой статьи.
Установка OpenStreetMap Nominatim для нахождения широты и долготы по введенному адресу
Хотел бы поведать свою историю об установке геокодера Nominatim на выделенный сервер. Изначально предполагалось, что эта задача займёт у меня около 5-7 часов, но не тут то было… Поэтому было решено написать статью c описанием разворачивания Nominatim на сервер до полной работоспособности сайта. Но обо всём по порядку.
Введение
Есть множество сервисов с геокодерами, не буду здесь их всех перечислить, отмечу, что на Хабре есть хорошие статьи по этому поводу: «Geocoding with PHP and the Google Maps API», а также «Яндекс Карты: Поиск произвольных объектов».
Для тех кто не в курсе: Geocoding — это процесс нахождения широты и долготы по введенному адресу.
Мой выбор пал именно на Nominatim, так как его можно развернуть на своём сервере и не ограничиваться количеством запросов, а также уже был опыт работы с OSM картами и хотелось бы его применить.
Документация
Сайт с уже работающей картой можно найти по ссылке: OpenStreetMap Nominatim
А вот и ссылка на примеры запросов: Wiki nominatim
Так же есть ссылка на установку Nominatim Installation. Но эта документация немного устарела, для установки именно по этой статье необходимо немного потанцевать с бубном. Всё ниже описанное, будет ссылаться на эту статью по установке, только без участия бубна.
А так же есть докер контейнер nominatim docker. По какой-то причине, скорее всего из-за устаревших пакетов установки, этот контейнер у меня таки не запустился.
Шаг 1: Создание виртуальной машины
За основу была взята машина из облака Microsoft Azure серии standart D2 с характеристиками: 2 cores, 7 GB RAM, 100 GB SSD. Именно на этой машине и будет производиться установка Nominatim. 100GB на самом деле — это больше чем нужно для моей задачи, так как карта Украины не настолько большая. После установки всех необходимых компонентов осталось свободных 70%.
Шаг 2: Установка необходимых пакетов
Шаг 3: Настройка
Шаг 4: PostgreSQL
Ubuntu location /etc/postgresql/9.x/main/postgresql.conf
CentOS location /var/lib/pgsql/data/postgresql.conf
shared_buffers (4GB)
maintenance_work_mem (10GB)
work_mem (50MB)
effective_cache_size (24GB)
synchronous_commit = off
checkpoint_segments = 100
checkpoint_timeout = 10min
checkpoint_completion_target = 0.9
The numbers in brackets behind some parameters seem to work fine for 32GB RAM machine
На этом самая простая часть работы с установкой закончена. А теперь начинается хардкор, потому что дальнейшие действия выполняются не всегда корректно. И после такого некорректного завершения, к сожалению, иногда приходиться выполнять действия заново на новой виртуальной машине.
Шаг 5: Загрузка и установка osm карт
В начале необходимо загрузить саму карту из сайта в формате *.pbf: OpenStreetMap Data Extracts. В качестве примера я загружаю карту Украины и переименовываю в data.pbf.
Последняя команда открывает файл конфигураций по установке nominatim. В файл local.php нужно ввести код который описан ниже.
В качестве BaseURL необходимо вписать адрес сайта, с которого будет запущен nominatim.
Теперь запускаем команду установки nominatim. Эта операция занимает довольно таки длительное время, например с картой Украины установка длилась около 7 часов. В силу того, что я выполнял все команды через ssh, и являюсь подверженным переменному отключению интернета, выполнение команды установки проводится в скрине.
Теперь запустим сайт быстрым способом:
Я обошелся без настройки apache или работой с nginx, так как об этом вы с легкостью можете прочитать на Хабре в других статьях. Да и без настройки сайт прекрасно работает.
Тестируем сайт
В результате мы должны увидеть что-то подобное, как на моём скрине:
Выводы
В конце хотелось бы подметить, что для загрузки карты Земли нужно сервер по мощнее, чем серия D2, если вы не хотите *неделю ждать загрузки. Эту проблему так же можно решить с помощью временного масштабирования сервера до серии D14 (16 ядер, 112 ГБ памяти). А вот время выполнение запроса поиска очень радует: в среднем поиск по Украине занимает всего 300мс.
Надеюсь, данная статья поможет другим разработчикам потратить меньше времени на разворачивание Nominatim и понять, нужно ли вам это. Может стоит взять уже готовое и использовать?
Если у кого-то из хабросообщества будет необходимость в рабочем Docker контейнере с Nominatim, или другие идеи — пишите, всегда рад пообщаться.
OpenStreetMap на каждый день
На хабре OSM упоминают постоянно, вот только репутация у проекта, похоже, совсем никакая: кучка людей что-то программирует, рисует какие-то линии и отношения, борется за лицензионную чистоту. Но на самом деле проект совсем про другое: дать каждому карту, с которой можно делать что угодно: те же гуглокарты, те же Яндекс.Карты, но которые при желании можно поправить или скачать на мобильное устройство.
Поэтому я хочу рассказать об основах: как эти карты заменили мне яндекс почти во всех каждодневных задачах.
Посмотреть и поискать
Для русскоязычного участника у проекта есть две точки входа: openstreetmap.org (также osm.org) и openstreetmap.ru (osm.org.ru). На них есть большая карта и строка поиска. Различаются эти сайты списком слоёв: на русском их значительно больше, в том числе красивейший MapSurfer.NET, спутниковые снимки от Bing, трёхмерные домики и обратная связь («указать неточность на карте», затем дабл-клик в любом месте). Второе различие — механизм поиска.
На openstreetmap.org поиск работает по адресам в западном стиле: номер дома, улица, город (например, «24, Невский проспект, Санкт-Петербург»). Сокращения не работают, выкидывать статусную часть (написать «Невский» вместо «Невский проспект») или добавлять её («посёлок Кузьмолово» вместо «Кузьмолово») нежелательно. Зато работает поиск по POI (точки интереса: магазины, кафе, парикмахерские, кинотеатры и т.п.) и по названиям категорий («кафе рядом с Невский проспект», падежи тоже не работают). Короче, хороший поиск, но не адаптированный к русским запросам.
Это попытались исправить на openstreetmap.ru: туда можно вставить большинство адресов с разных сайтов, и они правильно обработаются. Собственно, 90% моих обращений к Яндекс.Картам было как к поисковику по адресам, и сейчас наш сайт его заменил. Из бонусов — для проекта геопозиционирования избирательных комиссий я использовал API нашего поисковика (openstreetmap.ru/api/search?q=Язь), и он в Петербурге нашёл почти все адреса (написанные, замечу, в свободной форме).
Ещё 9% обращений к картам — поиск места «глазами»: открытие сайта, уменьшение масштаба до всей планеты, затем приближение к нужному месту в три-четыре прыжка с помощью растягивания прямоугольника мышью с зажатым Shift. После привыкания к масштабированию прямоугольником сайты гугля и яндекса внезапно становятся жутко неудобными. Замечу, что openstreetmap.ru пока что тоже не очень удобен, потому что там нет линейки масштабов, и приходится сто раз жать на кнопку «минус».
Поделиться
Проиллюстрировать координаты или адрес можно тремя способами. Первый — сделать скриншот карты. Второй — дать ссылку на фрагмент карты. На openstreetmap.org для этого справа внизу есть два типа ссылок: длинная (для статей) и короткая (кинуть в чатик). У первой очевидная и читаемая структура, вторая не разрывает экран.
На openstreetmap.ru постоянная ссылка слева внизу, но кроме этого, можно явно отметить точку, о которой речь, маркером: это слово спрятано в значке с шестерёнками справа.
Самый продвинутый способ — поместить на страницу живую карту с маркерами и чем только не. Вручную это несложно сделать библиотекой Leaflet, но можно полениться и применить инструмент, рекомендуемый для информационных сайтов Евросоюза.
Измерять и рисовать
Инструмент измерения расстояний на карте Яндекса часто используют для рисования маршрутов: и линия есть, и её длину показывают, и ссылку получить несложно. В OpenStreetMap это два разных инструмента. Так, для измерения расстояний есть отдельный сайт Distance Calculator. Он даже выдаёт расстояние в двух системах координат. И позволяет сохранить нарисованный путь в gpx. Oh wait…
Рисование маршрутов для других — в Show Your Journey. Хотя там везде предлагается зарегистрироваться, это нужно только для правки своих маршрутов, а сделать новый просто: справа внизу кнопка «Start a route», затем нарисовать (или загрузить GPX), затем ввести название и тыкнуть в «Create».
Наконец, недавно на openstreetmap.ru в инструментах появился пункт «Персональная карта». Это адекватная замена рисованию меток и ломаных на картах Яндекса. Правда, интерфейс не такой красивый, и информации маловато, поэтому если карта позволяет, рисовать ломаные в яндексе пока проще.
Прокладывать маршрут
О, это просто грааль в пользовательской картографии. У каждого продавца карт есть свой движок, у OpenStreetMap их десяток. Для быстрого подсчёта расстояний не могу отказать себе в удовольствии использовать Project OSRM: его скорость поражает. Тянешь маркер — и маршрут перестраивается в реальном времени. Увы, работает только в Европе и европейской части России. Есть неплохой шанс, что этот движок скоро запустят в полную силу на openstreetmap.org.
Для более сложного роутинга, с промежуточными точками и выбором транспорта, я пользуюсь сервисом Cloudmade. Кроме него есть OpenRouteService и YourNavigation.org: у всех трёх есть свои недостатки, первый и третий ещё и нерегулярно обновляются, но окончательный выбор делается по удобству: функциональность у них примерно одинаковая, и все они лучше коммерческих альтернатив, особенно на длинных дистанциях. Пользовался бы красивым MapQuest, но у меня никак не получается его завести.
Взять с собой
Способ XX века: распечатать! Сайтов много, самый очевидный — Walking Papers. Если собираетесь провести несколько дней в незнакомом городе, Maposmatic делает некое подобие атласа с указателем улиц.
Но будем более технологичны. Даже носить с собой гигабайты выкачанных тайлов — это прошлый век. Преимущество OpenStreetMap — доступность исходных данных. Векторные карты на телефонах с J2ME показывает GpsMid, на ай*ах — MapsWithMe, а для андроидов самое лучшее приложение — это OsmAnd+ (есть бесплатная версия, также хабропост). В последнем прямо из программы можно скачивать сборки карт для нужных областей и стран, плюс добавлять разные слои POI. Например, в последнем путешествии мы подключили слой статей из википедии, и пока я рулил, жена читала описания мест, где мы проезжали.
Настоящие туристы, разумеется, плюют на новомодные устройства и пользуются отдельными навигаторами. Выгрузки данных есть почти под любую систему: Навител, СитиГид, ПокетГис, ГисРусса. Но больше всего выгрузок для Garmin, потому что у всех своё назначение. Три самых популярных по России: автомобильная и две туристических: от ValentinAK и от Макса Васильева. Для поездок за границу добро пожаловать к шведскому столу.
Пользоваться и дополнять
Что-то под конец статья скатилась в список ссылок. Ну и ладно: в нашей несуразной вики, признаюсь, найти что-то полезное непросто, особенно после набега графоманов-википедистов. С другой стороны, уже на офлайновом использовании мы вышли за границы функциональности «больших» карт, и при этом самые красивые применения данным OSM остались за кадром. И что действительно поражает — все эти сайты, сервисы, выгрузки, роутинг работают с одними и теми же данными, которые может поправить или дополнить каждый. Чем мы и занимаемся каждый день. Пользуйтесь нашей картой — и, может быть, когда-нибудь вам захочется поправить какую-то мелочь. Так и увязают.
Openstreetmap поиск по адресу
You are not logged in.
#1 2010-06-10 16:07:19
Поиск по адресу в файлах OSM
Кто нить знает как по файлам ОСМ найти адрес аналогично тому как он ищется через онлайновый API. Я перекопал кучу осм файов, но вних не нашол как связать данные и получить всю информацию аналогичную той что возвращает онлайновый API. Пример того что возвращает онлайновый API.
http://nominatim.openstreetmap.org/sear … sdetails=1
Он вернет расширенную информацию о том где лежит кастелнау (город, графство и еще много чего). Имея файл ОСМ англии я несмог получить то же самое если икаьт по файлу «руками» через текстовый вьювер.
#2 2010-06-10 16:44:46
Re: Поиск по адресу в файлах OSM
#3 2010-06-10 16:48:19
Re: Поиск по адресу в файлах OSM
Собственно, нужно просто собрать информацию по ссылкам из разных частей одного файла.
#4 2010-06-10 16:49:23
Re: Поиск по адресу в файлах OSM
#5 2010-06-10 16:56:48
Re: Поиск по адресу в файлах OSM
#6 2010-06-10 17:14:16
Re: Поиск по адресу в файлах OSM
Ds: Если есть файл и по нему нужно восстановить один объект, дешевле делать это без индекса. Индекс нужен, когда нужно максимально быстро обрабатывать множественные запросы. В принципе наличие индекса сокращает время запроса на порядки, но и построение самого индекса во много раз дольше получения данных по одному объекту без использования индекса.
#7 2010-06-11 12:53:23
Re: Поиск по адресу в файлах OSM
Дело не в индексе. Я не спрашиваю о конкретном механизме поиска у меня вопрос по МОДЕЛИ ДАННЫХ в ОСМ. Проблема в том что по ссылкам и отношениям не получается собрать нужную информацию, так как нет отношений в которых бы участвовали те элементы которые мне нужны. Тобиш все по отдельности там етсь и находятся. Но нет отношений которые бы говорили чо они связаны межлу собой. Например есть Richmond и есть Castelnau но нет ни одного отношения которое бы говорило что Castelnau лежит в Richmond. is_in у кастелнау то же не заполнен (как и у многих других улиц). Вообще судя по данным Кастелнау сама по себе и нигде не лежит, так как никто на нее не ссылается. НО ЧТО ИНТЕРЕСНО ОНЛАЙН ПОИСК ТО ЧТО МНЕ НАДО КАК ТОДЕЛАЕТ. Я думал может у них есть еще како то отдельный файл с дополнителной информацией.
Last edited by bbdev1 (2010-06-11 12:57:44)
#8 2010-06-11 12:59:58
Re: Поиск по адресу в файлах OSM
Причем такая рпоблема не только в англии. То же самое и в России. Если искать по файлу то неуается установить связь между улицами и районами где они лежат. ТАк ак у многих не заполнен is_in и нет отношений между улицами и районами. Но чертов онлайн АПИ как то находит всю информацию
#9 2010-06-11 13:02:44
Re: Поиск по адресу в файлах OSM
Мне надо узнать в каком районе города(если етсь)/городе/округе лежит улица. Например для улицы Типанова мне надо получить что она лежит в Московский район/Санкт-Петербург
#10 2010-06-11 13:29:41
Re: Поиск по адресу в файлах OSM
#11 2010-06-11 13:38:08
Re: Поиск по адресу в файлах OSM
По координатам попадание что ли смотреть? По ссылкам то что мне нужно никуда не входит. По координатам это конечно мощщно. Представляю сколькоон будет лопатить всю англию.
Last edited by bbdev1 (2010-06-11 13:43:10)
#12 2010-06-11 13:47:14
Re: Поиск по адресу в файлах OSM
Дело не в индексе. Я не спрашиваю о конкретном механизме поиска у меня вопрос по МОДЕЛИ ДАННЫХ в ОСМ. Проблема в том что по ссылкам и отношениям не получается собрать нужную информацию, так как нет отношений в которых бы участвовали те элементы которые мне нужны. Тобиш все по отдельности там етсь и находятся. Но нет отношений которые бы говорили чо они связаны межлу собой.
#13 2010-06-11 13:51:32
Re: Поиск по адресу в файлах OSM
По координатам попадание что ли смотреть? По ссылкам то что мне нужно никуда не входит. По координатам это конечно мощщно. Представляю сколькоон будет лопатить всю англию.
А тут надо оценивать баланс времени. В целом, справедливо:
время построения индекса >> время единичного поиска без индекса >> время единичного поиска при наличии индекса
Поэтому следует оценить количество запросов и, и исходя из него, сделать вывод о том, целесообразна ли индексация для решения конкретной задачи.
#14 2010-06-11 13:51:57
Re: Поиск по адресу в файлах OSM
Вопрос в том как построить отношения для БД аналогичной той что использует АПИ. Понятно что напрямую с XML никто не работает. Только вот как нарыть отношения чтобы сделать такие же связ как в их БД пока не нашел. Пока единственный вариант походу это строить их геометрическим путем через границы областей и попадание вэев в эти области 
Last edited by bbdev1 (2010-06-11 13:54:13)
#15 2010-06-11 13:54:43
Re: Поиск по адресу в файлах OSM
Залейте данные в базу и юзайте, в чем проблема.
#16 2010-06-11 13:56:34
Re: Поиск по адресу в файлах OSM
В том что в ИСХОДНЫХ данные ненайти нужныз связей, СЛЕДОВАТЕЛЬНО Я МОГУ ХОТЬ ОБЗАЛИТЬСЯ В РАЗНЫЕ БАЗЫ но связи не появятся. А делать связи через геометрический поиск это уже всеравно через базу или самому руками, дело то не в этом а в поиске наиболее оптимального варианта построения связей. При этои неважно в MSSQL mysql еще каком SQL это все будет.
#17 2010-06-11 13:57:18
Re: Поиск по адресу в файлах OSM
Ладно, видимо и нет никакого способа кроме как по координатам.
#18 2010-06-11 13:58:37
Re: Поиск по адресу в файлах OSM
Опять же про конкретное решение вопрос то не стоял, вопрос по логической структуре ОСМ был. А запихивание в базу это уже решение.
#19 2010-06-11 13:59:06
Re: Поиск по адресу в файлах OSM
В том что в ИСХОДНЫХ данные ненайти нужныз связей, СЛЕДОВАТЕЛЬНО Я МОГУ ХОТЬ ОБЗАЛИТЬСЯ В РАЗНЫЕ БАЗЫ но связи не появятся. А делать связи через геометрический поиск это уже всеравно через базу или самому руками, дело то не в этом а в поиске наиболее оптимального варианта построения связей. При этои неважно в MSSQL mysql еще каком SQL это все будет.
Оптимальный способ получается postgresql+postgis.
#20 2010-06-11 13:59:46
Re: Поиск по адресу в файлах OSM
bbdev1, postgis довольно быстрая штука. кладр бот по России минут за 15 отрабатывает особо не напрягаясь. ну там и индексы всякие рулят и бибикают.
#21 2010-06-11 14:00:05
Re: Поиск по адресу в файлах OSM
Только вот как нарыть отношения чтобы сделать такие же связ как в их БД пока не нашел.
Вообще-то кучка ссылок приведена по ссылке в 5 посте.
Гарантий, что «точно так же», понятное дело, никаких, но ведь вопрос не в том, чтобы «были шашечки». Вполне вероятно, что для ваших конкретных нужд избранный вами способ индексации окажется эффективнее принятого в OSM API.
#22 2010-06-11 14:00:08
Re: Поиск по адресу в файлах OSM
Вопрос в том как построить отношения для БД аналогичной той что использует АПИ.
Nominatim строит индекс именно по геометрическому попаданию в.
Собственно, у него других вариантов и нет, все остальные виды «зависимостей» слишком утопичны
#23 2010-06-11 14:46:47
Re: Поиск по адресу в файлах OSM
Вообще «все остальные способы» заключаются в построении ссылок и применяются в форматах основаных на GDF и во всех форматах основаных на MapInfo и в польском формате (это форматы исходных данных для карты, не путать с форматами конечными, такими как у гармина навитела томтома). Строить сложнее так как надо расставлять ссылки, но конечному пользователю ЗНАЧИТЕЛЬНО проще это обрабатывать. Так как ненадо производить большие вычислительные действия связанные с поиском попадания части линии в невыпуклый многоугольник с дырками или состоящий из островков (одна и та же улица может рпоходить через несколько админ едениц). Конфигурация админ едениц бывает довольно замысловатая (особено в англии).
Last edited by bbdev1 (2010-06-11 14:50:50)
#24 2010-06-11 14:48:58
Re: Поиск по адресу в файлах OSM
OSM это первый формат который я увидел с админ деление сделаным не на ссылках (на прямых ссылках когда линия ссылается на арену или на обратных когда етсь отношение между аренами и линиями)
Last edited by bbdev1 (2010-06-11 14:51:24)
#25 2010-06-11 14:58:21
Re: Поиск по адресу в файлах OSM
Пространственный индекс применяется не для поиска по адресу, а для быстрой выборки по координатам. Причем применяется совместно с пространственной сортировкой данных (чтобы данные лежащие рядом на карте лежали рядом в файле). Для поиска по адресу пространственный индекс не нужен. надо построить сециальную структуру ориентированную на поиск по именам. Можно применить много способов все зависит от того как буде работать поиск (пок каому принципу). Поиск попадания в арену пространственным индексом не обработаеш так как у арены сложная форма, всеравно придется обрабатывать все координаты арены и линий которые попали в МБР арены. Пространственный индекс уменьшит количество перебираемых линий но строится все будет всеровно тяжко. Так как в общем случае одну и туже линию придется сравнить с кучей арен МБР которыйх пересекается. Поэтому производители коммерческих карт облегчают жизнь пользователям и сразу создают ссылочную структуру позволяющую более менее легко строить различные индексы для различных способов поиска по адресу.
Last edited by bbdev1 (2010-06-11 15:23:46)







