партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Простой адаптивный форум - модуль для битрикс
Это форум по решению для битрикс «Модуль Классификатор адресов.WEB».
Страницы: 1
Ответить
RSS
Поиск по индексу, Возможность поиска местоположений по индексу
 
Здравствуйте. Подскажите можно ли с помощью имеющегося API получить местоположение основываясь на индексе - т.е. имеется индекс 183038, при обращении через API получаем г. Мурманск, ул. Миронова, д. 3. Видел есть компонент который позволяет по адресу в итоге получить индекс, хотелось бы решить обратную задачу - по индексу - адрес.
 
Алексей, здравствуйте! С помощью функции SKladrEntry::GetList можно определить код КЛАДР для индекса, если выбрать с фильтром по индексу элемент. Потом, например, с помощью функции SKladr::GetPostAddrString получить адрес по этому коду КЛАДР в виде строки, или с помощью SKladr::GetPostAddr в виде массива.

Описание api: http://g-rain-design.ru/components/kladr/api/

Если что-то непонятно из описания api, можно посмотреть в коде модуля, если у вас он зарегистрирован. Например, примеры использования функции SKladrEntry::GetList есть в разных функциях.
 
В код я и посмотрел (и в принципе подход через SKladrEntry::GetList сразу "заприметил";), но в том то и дело код
$arRes = SKladrEntry::GetList("", array("NAME"=>"ASC";), "00", array("ZIP" => "183038";),
array("NAME","CODE","SOCR","ZIP";));
в явном виде обращается к регионам. Даже что бы понять какую таблицу выбрать для поиска и фильтрации - необходим код.
 
Алексей, у меня сейчас нет под рукой сайта с кладром чтобы точно сказать, но может получится сначала определить код региона через SKladrEntry::GetList, с фильтром array("ZIP" => "183%") или array("ZIP" => "183000"), а потом использовать полученный двузначный код региона уже при выборке адреса, т.е. при следующем вызове SKladrEntry::GetList. Например, у региона Санкт-Петербург индекс 198000, я не помню точно у всех регионов аналогично или нет, посмотрите, если да, то этот способ должен работать.
 
Или еще другой вариант: выбрать с помощью SKladrEntry::GetList все регионы, потом сделать SQL запрос из нескольких таблиц. Сложность состоит в том, что сначала искать в таблицах с домами, потом, если ничего не найдено, в таблицах с улицами, а если не найдено там, то в таблицах с остальными уровнями кладр (1-4).

Вот структура таблиц:

Цитата
4. Таблицы с данными регионов

Для каждого региона - 4 таблицы: g_kladr_kladr_NN, g_kladr_street_NN, g_kladr_doma_NN, g_kladr_altnames_NN, где NN - двузначный код региона.

Таблица g_kladr_kladr_NN

Стандартные поля КЛАДР:

Поле Тип Ноль По умолчанию
NAME varchar(40) Да NULL
SOCR varchar(10) Да NULL
CODE char(13) Да NULL
ZIP varchar(6) Да NULL
GNINMB varchar(4) Да NULL
UNO varchar(4) Да NULL
OCATD varchar(11) Да NULL
STATUS varchar(1) Да NULL

Дополнительные поля:

Поле Тип Ноль По умолчанию Описание
ACTIVE char(1) Нет 'Y' Активность
SORT int(11) Нет 100 Сортировка

Таблица g_kladr_street_NN

Стандартные поля КЛАДР

Поле Тип Ноль По умолчанию
NAME varchar(40) Да NULL
SOCR varchar(10) Да NULL
CODE char(17) Да NULL
ZIP varchar(6) Да NULL
GNINMB varchar(4) Да NULL
UNO varchar(4) Да NULL
OCATD varchar(11) Да NULL

Дополнительные поля:

Поле Тип Ноль По умолчанию Описание
ACTIVE char(1) Нет 'Y' Активность
SORT int(11) Нет 100 Сортировка

Таблица g_kladr_doma_NN

Стандартные поля КЛАДР:

Поле Тип Ноль По умолчанию
NAME varchar(40) Да NULL
KORP varchar(10) Да NULL
SOCR varchar(10) Да NULL
CODE char(19) Да NULL
ZIP varchar(6) Да NULL
GNINMB varchar(4) Да NULL
UNO varchar(4) Да NULL
OCATD varchar(11) Да NULL
Таблицы создаются только если загружен соответствующий регион, поэтому нужно сначала выбрать какие регионы загружены с помощью SKladrEntry::GetList.

Но сами sql запросы будет несложные, хоть и длинные (просто названия нескольких таблиц указываются через запятую в отличие от выборки из одной таблицы): SQL-запрос на выборку из нескольких таблиц

CDatabase::Query

Таким образом можно сделать функцию для поиска по индексу.
Страницы: 1
Ответить
Читают тему (гостей: 1)
Форма ответов
Текст сообщения*
Загрузить файл или картинкуПеретащить с помощью Drag'n'drop
Перетащите файлы
Ничего не найдено
Загрузить файлы
Отправить Отменить
 
Главная   ·   Модули для 1С-Битрикс   ·   Типовые услуги   ·   Форум   ·   Блог   ·   Контакты
Рейтинг@Mail.ru