Comments 15
UFO landed and left these words here
Пока проект находится в закрытом тестировании. Здесь описан лишь алгоритм.
Не понял смысл статьи.
«У нас был файл, мы написали парсер, он распарсился».
Ну я каждый день такое делаю, так и шо?
Распарсить файл — практически всегда дело плевое… Однако в данном случае акцент нужно сместить в сторону: «как реализовать верный алгоритм». Ведь, впервые столкнувшись с подобной задачей, не мудрено наломать дров…
позволите, у меня небольшое замечание по коду. все-же, это не очень элегантное решение:
elseif (
mb_strpos(mb_strtolower($addrItem, 'UTF-8'), 'просп. ')
||
mb_strpos(mb_strtolower($addrItem, 'UTF-8'), ' просп.')
||
mb_strpos(mb_strtolower($addrItem, 'UTF-8'), 'пр-т')
||
mb_strpos(mb_strtolower($addrItem, 'UTF-8'), 'проспект')
)

Достаточно объявить всего две ф-ции:
function contains ($in, $str) {
return
mb_strpos(mb_strtolower($in, 'UTF-8'), $str);
}
function
containsOne ($in, array $array) {
foreach (
$array as $str) {
if (
contains($in, $str)) {
return
true;
}
}
return
false;
}

и мы получаем намного более изящный результат, код уменьшается в раз 5 и становится намного более читаемым и расширяемым:
elseif (containsOne($addrItem, array('просп. ', ' просп.', 'пр-т', 'проспект')))


но рефакторить код есть куда. очень много мест. сейчас он вообще плох.
еще непонятно, что будет, если ищущийся итем стоит в начале строки. например «г. Такой-то, просп. Другой-то». Корректно проверять как
та блин. вот так, то есть сравнивая c false:
mb_strpos(mb_strtolower($in, 'UTF-8'), $str) === false;

Да, согласен. Код писался на скорую руку и очень сыр. Пусть не будет звучать как оправдание, но целью данного кода был разовый разбор имеющихся данных. Цель оправдывает средства.
я бы постеснялся выкладывать столь сырой код, да еще и сообщая, что это библиотека.
да и ведь неудобно так разрабатывать то было. задолбаться ведь можно
Первый – самый простой и не надежный: скормить адрес имеющихся фирм геокодеру Яндекса, который и разберет адрес на кусочки. Но есть и большой минус этого способа – если в базе геокодера такого адреса по какой то причине не окажется, то он вернет ближайшее к указанному месту строение…

а в чём тут проблема? он же сообщает с какой точностью найден объект: api.yandex.ru/maps/jsapi/doc/ref/reference/geocoderresult.xml#precision
Дело в том, что случаются моменты, когда дома, находящиеся по одной улице, могут находится в совершенно разных районах. Был такой случай, что геокодер определял дом, который находится не в соответствующем районе
нарисовать карты районов для всей России осилит не каждый
Они все уже нарисованы и храняться в wikimapia. Можно подключить слой от WikiMapia в Google Earth и сохранять полигоны в kml-файлы.

Я такое безобразие делал для сервиса частных объявлений о недвижимости. Способ, может быть и не совсем прямой, но для Нижнего его таки можно осилить =)
Спасибо, ваша статья очень помогла, а то я уже мозг взорвала над тем где мне все таки получить внутригородские р-ны в кладаре, а их так и нет вовсе
Only those users with full accounts are able to leave comments. Log in, please.