Библиотека для работы с классификатором адресов России (КЛАДР).
kladr-api
- сущности получаемые из HTTP-сервиса КЛАДР посредством API.kaldr-clent
- реализация HTTP-клиента для работы с сервисом КЛАДРkladr-core
- базовая функциональность для работы с КЛАДРkladr-search
- модуль строящий и читающий полнотекстовый индексkladr-service
- HTTP-сервис, позволяющий посредством API делать запросы в КЛАДР
Добавьте в ваш проект зависимость:
<dependency>
<groupId>org.jamel.kladr</groupId>
<artifactId>kladr-core</artifactId>
<version>${kladr-version}</version>
</dependency>
, где kladr-version
- номер последней стабильной версии библиотеки (например, 0.0.1
). Узнать какая версия является последней можно здесь.
После чего можно будет, например, вывести список всех регионов России:
import java.io.File;
import org.jamel.kladr.KladrReader;
import org.jamel.kladr.data.Region;
import org.jamel.kladr.processors.KladrObjectsProcessor;
public class RegionsPrinter {
public static void main(String[] args) {
KladrReader reader = new KladrReader(new File("/tmp/kladr"));
reader.readKladrTable(new KladrObjectsProcessor() {
@Override
public void processRegion(byte regionCode, Region region) {
System.out.println(regionCode + " " + region.getName());
}
});
}
}
Выведет:
1 Адыгея
2 Башкортостан
3 Бурятия
...
87 Чукотский
89 Ямало-Ненецкий
99 Байконур
Или пример посложнее. Допустим нам нужно вывести полные адреса (до улицы) в городе Бердск (КЛАДР код 54000002):
import java.io.File;
import org.jamel.kladr.AddressBuilder;
import org.jamel.kladr.KladrReader;
import org.jamel.kladr.cache.KladrCache;
import org.jamel.kladr.data.Street;
import org.jamel.kladr.processors.StreetProcessor;
public class BerdskAddressesPrinter {
private static final long BERDSK_CODE = 54_000_002;
public static void main(String[] args) {
KladrReader reader = new KladrReader(new File("/tmp/kladr"));
// read table kladr.dbf into cache and create address builder
KladrCache cache = new KladrCache();
reader.readKladrTableTo(cache);
final AddressBuilder builder = new AddressBuilder(cache);
// process each street
reader.readStreetTable(new StreetProcessor() {
@Override
public void processStreet(long streetCode, Street street) {
if (street.getCityCode() == BERDSK_CODE) {
System.out.println(builder.buildFor(street));
}
}
});
}
}
Выведет:
обл. Новосибирская, г. Бердск, ул. 30 лет Победы
обл. Новосибирская, г. Бердск, ул. 40 лет Октября
обл. Новосибирская, г. Бердск, пер. Банковский
...
обл. Новосибирская, г. Бердск, ул. Взлетная
обл. Новосибирская, г. Бердск, пер. Дивный
обл. Новосибирская, г. Бердск, пер. Добрый
Сервис КЛАДР удобно использовать в том случае если вы хотите разместить на своем сайте форму для ввода адреса. Сервис предоставляет JSON API к которому легко привязать любой плагин для автокомплита (в своем примере я использовал Typeahead от Twitter). В действии можно посмотреть здесь.
Для того чтобы получить работающий бинарник нужно собрать "толстый" jar, включающий все зависимости:
TODO: дописать как это сделать
TODO: дописать как это сделать
TODO: дописать как это сделать
TODO: дописать как это сделать
TODO: написать http-клиент