Где мое почтовое отделение? — поиск почтового отделения ДубльГис по индексу

Почтовым индексом называется последовательность букв или цифр, которая добавляется к почтовому адресу. Главной задачей индекса является дополнительное обозначение почтового отделения. Благодаря ему сотрудникам почты легче сортировать корреспонденцию. Индексы на сегодняшний день используют почти все почтовые службы страны.

История

Впервые понятие «Индекс» начало применяется в Советском Союзе с 1932 годов. Оно имело следующие вид – «число-буква-число». Буква посредине обозначала страну, в которую адресуется почтовое отправление. Число в конце – это номер почтового отделения. Первое число, которое находилось до буквы, соответствовало городу, в который пересылается отправление. В 1932 году столицей Украинской Советской Социалистической Республики был Харьков. Именно здесь в этом году был издан первый специальный справочник почтовых адресов Украины. Нумерация индексов в нем начиналась от 1 до 10.

В Западной Германии в 1962 году была введена первая система почтовой индексации. После этого в послевоенные годы ее активно стали внедрять и в других странах. Именно немецкая система почтовой индексации послужила для остальных стран примером.

В нашей стране свою популярность почтовый индекс обрел уже после Второй Мировой Войны в 1972 году.

На сегодняшний день почтовые индексы значатся в адресных системах 192 стран по всему миру. Именно эти страны являются членами Всемирного Почтового Союза.

Применение почтового индекса

Разные страны мира используют абсолютно разные схемы оформления и размещения почтового индекса на пересылаемой корреспонденции.

В Европе почтовый индекс стоит перед названием населенного пункта и часто содержит в себе буквенный код этой страны. В Америке сначала указывается населенный пункт, а только потом – его почтовый индекс. В Европейском Союзе 1 или 2-буквенный код всегда следует перед названием населенного пункта, хотя часто перед ним находится буква, обозначающая страну-получателя.

В большинстве случае индекс присваивается определенной местности, иногда он может обозначать код предприятия с огромными объемами входящей корреспонденции. Это делается для упрощения пересылки и получения этим предприятием писем и посылок. Это могут быть как государственные учреждения разного уровня, так и большие корпорации с огромными объемами корреспонденции. Разные страны мира практикуют эту схему.

В случае наличия автоматизированных систем распознавания индекса используется специальный шаблон под названием «кодовый штамп». В большинстве случаев это трафарет или сетка для указания на ней числовых данных. Такая индексная сетка может быть указана на конвертах или почтовых карточках. Все, что остается отправителю – это правильно вписать нужные цифры. В случае возникновения сомнения в правильности указанных чисел и отсутствия времени или возможности проверить код, лучше всего написать индекс города или населенного пункта, куда отсылается почтовое отправление. В этом случае сотрудники почтовой службы по адресу смогут легко указать индекс того отделения связи, куда пересылается письмо или посылка.

Как узнать индекс

Есть несколько способов того, как человек может узнать индекс населенного пункта.

Первый

Непосредственно в своем почтовом отделении перед отправкой письма попросить у сотрудников почты справочник индексов. Именно в нем собраны и структурированы почтовые индексы всех населенных пунктов нашей страны. Кроме этого, чтобы дополнительно убедиться, можно уточнить найденное значение у сотрудников почты. Это – наиболее традиционный метод поиска индекса.

Второй

На сегодняшний день информационные технологии прочно вошли в жизнь почти каждого из нас. Теперь, чтобы узнать индекс можно обойтись и без похода на почту. Все, что нужно, это открыть соответствующий электронный справочник индексов Российской Федерации и выбрать нужную для себя информацию. Узнать почтовый индекс других стран мира также не составит труда. Для этого нужно посетить другие интернет-ресурсы где предоставляется эта информация.

Интересные факты

В Финляндии существует почтовый индекс вида «99999». Его создали специально для Корвантунтури – места, где проживает Дед Мороз. В Гренландии, у Деда Мороза также есть свой собственный почтовый индекс – «2412».

А вот в Канаде, число писем для Деда Мороза с каждым годом возрастало огромными темпами, что властью в 1983 году было принято решение о запуске специальной программы ответов на эти письма. Таким образом, на каждое отправленное письмо каждый ребенок получает индивидуальный ответ. Причем на том языке, на котором оно было прислано. Канадская почтовая служба позаботилась о специальном отдельном адресе для Деда Мороза – «SANTA ». И для Северного Полюса было также предусмотрено отдельное название – «H0H 0H0».

Однажды после переезда пришлось озадачиться поиском своего почтового отделения. В последних версиях настольной версии 2Гис, к счастью, для большинства городов имеется информация об индексах зданий и в конечном итоге поиск свелся к выбору почтового отделения по номеру, равному последним трем цифрам индекса, однако число рутинных операций для этого было достаточно велико и захотелось на досуге в качестве разминки для ума и из любви к прикладным алгоритмам попытаться этот процесс автоматизировать.

Попытка №1

Сначала было решено пойти «в лоб», то есть найти способ получить по индексу сразу адрес почтового отделения. Способ нашелся достаточно быстро — на сайте почты России имеется сервис Поиск отделений почтовой связи, реализующий данную задачу. Хотя стабильность и скорость работы данного сервиса оставляет желать лучшего (последние несколько дней он вообще отключен в связи с проведением профилактических работ), было найдено достаточно сторонних сервисов, зеркалирующих эту информацию, например ГдеПосылка или Независимый рейтинг почтовых отделений России. Однако возникла другая проблема — полученный адрес можно было только целиком скормить приложению через пользовательский интерфейс в универсальное поле «Где»: Однако API плагинов такой возможности не имеет, методу поиска нужно предать три отдельных поля: населенный пункт, улица, дом. В принципе, на этом этапе можно было бы попробовать озадачится выкусыванием из полученной строки адреса необходимых полей, но эта задача не представлялась интересной и было решено пойти в обход (возможно сейчас я бы вернулся к этому варианту).

Попытка №2

Кроме адреса почтового отделения, приведенные выше сервисы так же сообщают его название, которое, в общем случае, состоит из наименования населенного пункта и порядкового номера отделения если их несколько. Этой информации, в общем случае, должно хватить для поиска по справочнику организаций (по населенному пункту и наименованию отделения). На данном этапе был реализован первый рабочий вариант плагина, опрашивающий все три приведенных сервиса исходя из их доступности (репозиторий на GitHub). Однако в любом случае время отклика было нестабильным да и идеология настольного приложения 2Гис предполагает возможность полноценной работы в offline-режиме.

Попытка №3

После непродолжительных поисков offline-базы был найден Эталонный Справочник Почтовых индексов объектов почтовой связи, представляющий собой DBF файл, да еще и обновляющийся с завидной периодичностью. Из 18-мегабайтного файла была сделана выборка только необходимой информации и включена в плагин. Однако на данном этапе был обнаружен ряд проблем с именами почтовых отделений и их отнесению к населенным пунктам. Практически все из них удалось решить в текущей реализации плагина (текущая ветка на GitHub). Ниже представлен основной алгоритм формирования критериев для поиска почтового отделения в справочнике организаций:

// Получаем название почтового отделения string postOfficeName = LocalFileInformationService.Instance.GetPostOffice(postIndex); if (postOfficeName != null) { // Название отделения в виде " " Match m = CITY_POST_OFFICE_NAME.Match(postOfficeName); String city; String number; if (m.Success) { // Почтовое отделение с номером city = m.Groups[1].Value; number = m.Groups[2].Value; } else { // Почтамт, либо единствненое отделение в маленьком населенном пункте city = postOfficeName; number = null; } try { ICriteriaSet criteries = _pBaseView.Factory.CreateCriteriaSet(); // ищем организации в рубрике "Почтовые отделения" criteries.set_Criterion("grym_rub:name", "Почтовые отделения"); string gisCityName; if (_cities.TryGetValue(city, out gisCityName)) { // если в базе есть населенный пункт с названием, совпадающим с названием почтовго отделения, локализуем поиск в данном населенном пункте criteries.set_Criterion("grym_city:name", gisCityName); } if (number != null) { // если у отделения есть номер, скорее всего он будет в его названии criteries.set_Criterion("grym_name", number); } else { // узнаем число отделений в населенном пункте отделения int officesCount = LocalFileInformationService.Instance.GetCityPostOffices(city, postIndex.Substring(0, 3)); if (officesCount > 2) { // если в городе больше двух (для верности) почтовых отделений, то отделение без номера скорее всего называется "Почтамт" criteries.set_Criterion("grym_name", "Почтамт"); } else if (String.IsNullOrEmpty(gisCityName)) { // иначе если не удалось локализовать поиск по населенному пункту (например пос. Светлый в г. Томск не входит в базу населенных пунктов), ищем назвнаие населенного пункта в названии почтового отделения // остается вопрос как быть с почтовыми отделениями, названия которых не соответствуют названиям населенных пунктов, например отделенеие Томь в Черной речке и Тимирязевский в Тимирязево. if (((int)dr.Value["addr_count"]) > 0) { // определяем город в котором находится данный дом string featureCity = dr.Value["city"].ToString(); // узнаем число отделений в населенном пункте к которому относится здание int officesCount2 = LocalFileInformationService.Instance.GetCityPostOffices(NormalizeCityName(featureCity), postIndex.Substring(0, 3)); if (officesCount2 > 0) { // если мы находимся в населенном пункте с несколькими отделениями, значит скорее всего мы в поселке, входящем в состав города (не вынесен как отдельный населенный пункт) (пос. Светлый, Томск) // значит нужно искать по названию отделения criteries.set_Criterion("grym_name", city); } else { // в населенном пункте нет почтовых отделений называющихся так же как и сам населенный пункт. Странно, придется просто вывести все почтовые отделения в населенном пункте // например почтовое отделение в пос. Черная речка, Томск называется Томь criteries.set_Criterion("grym_city:name", featureCity); } // else Как быть с селом Тимирязево, который входит состав города Томска, а почтовое отделение называется Тимирязевский? } else { // Дом без адреса? Странно, откуда тогда у него индекс criteries.set_Criterion("grym_name", city); } } } _pBaseView.Frame.DirectoryCollection.Search(criteries, "Почтовое отделение " + postIndex, "Почтовое отделение" + postOfficeName + ""); } catch (Exception e) { MessageBox.Show(e.Message + e.StackTrace + e.GetType().ToString()); } } else { MessageBox.Show("Упс, похоже такого индекса не существует."); } 

Осталась только проблема с селом Тимирязево, официально входящим в состав города Томска — отделение в нем называется «Тимирязевский», но само село не выделено в справочнике как самостоятельный населенный пункт (что так и есть). Возможно стоит вернуться к пункту 1 и попытаться поработать с адресной информацией.

Попытка №4

Еще было предположение, что здание, в котором располагается почтовое отделение имеет тот же индекс, что и само отделение, но это оказалось не так, например Почтовое отделение №39 в Прокопьевске имеет индекс 653033. К тому же API 2Гис не позволяет в критериях поиска организаций указывать почтовый индекс здания.

Плюшки и улучшения.

Автообновление.

Учитывая частоту выхода обновлений эталонного справочника, есть желание дописать функцию автообновления базы индексов.

Интерфейс.

Когда задумывался плагин, было желание максимально встроить его функциональность в имеющийся интерфейс, т.е сделать индекс здания в информационной карточке здания гиперссылкой, инициирующей поиск: Однако штатное API не предусматривает такой возможности, но был найден обходной путь с подменой контроллера данной вкладки (реализован в первой версии плагина):

class CustomMainController : IMapInfoController, IControlAppearance, IObjectCustomization { private IMapInfoController _innerController; private IBaseViewThread _pBaseView; private string _currentCity;  public CustomMainController(IBaseViewThread pBaseView) { _innerController = ((GrymCore.IMapInfoControllers2)pBaseView.Frame.Map.MapInfoControllers).FindMapInfoController("Grym.MapInfo.Default"); _pBaseView = pBaseView; _currentCity=_pBaseView.BaseReference.Name; ((GrymCore.IMapInfoControllers2)pBaseView.Frame.Map.MapInfoControllers).RemoveController(_innerController); ((GrymCore.IMapInfoControllers2)pBaseView.Frame.Map.MapInfoControllers).AddController(this);  PostalInformationServiceManager.Instance.BaseViewThread = _pBaseView; }  public bool Check(IFeature f) { return _innerController.Check(f); }  ... } 

Однако но данная реализация имеет некоторые проблемы: вкладка информация перемещается в конец списка и появляются сбои при одновременном запуске нескольких экземпляров справочника для разных городов), поэтому пока от идеи пришлось отказаться в пользу штатного механизма кастомайзеров, позволяющего добавлять пользовательские ссылки в подвал карточки.

Заключение

На данном этапе первичная задач написания плагина (порешать интересную задачку, изучить что-то новое, вспомнить c#) вроде бы выполнена. Кроме того появилась идея другого плагина, расширяющего функциональность фильтра «Работает сейчас». Поэтому надо принимать решение, что делать дальше. В этом хотелось бы прислушаться к мнению сообщества — вдруг кому-то будет интересна данная разработка или появятся интересные идеи для ее развития.

Скачать:

Обычная версия плагинаВерсия плагина заменяющая индекс здания на ссылку (осторожно, версия нестабильна и может приводить к падению оболочки 2Гис).

11
33,8k 11

При наличии email/никнейма человека и небольшего количества свободного времени можно найти его аккаунты во всех соцсетях и узнать о нем очень многое.

1. Pipl.com

Этот сайт умеет искать аккаунты человека на разных сервисах по имени, адресу электронной почты или телефону. Он поддерживает Gravatar, Linkedin, Disqus, YouTube, Last.fm, Github, Twitter, Imgur, Kongregate, Hubpages, Slideshare, Pinterest.

Ссылка на сайт: pipl.com

2. Knowem.com

А этот сервис проверяет, заняты ли аккаунты с определенным именем на разных сайтах. В отличие от pipl.com, он ищет аккаунты еще и на Foursquare, YouTube, Delicious, Imgur и WordPress. Но, к сожалению, не дает прямые ссылки на профили.

Ссылка на сайт: knowem.com

3. EmailSherlock

Этот сервис как и pipl.com отображает ссылки на аккаунты. Но список сайтов у него немного другой. Например, он смог найти профиль в Vimeo. Также он выдает подробную информацию о домене, в котором зарегистрирован почтовый ящик.

Ссылка на сайт: emailsherlock.com

4. PeekYou

Здесь надо вводить не email, а никнейм (а почтовые адреса часто содержат его). Первый из четырех сайтов, который дал ссылки на Instagram и Facebook.

Ссылка на сайт: peekyou.com

5. PoiskMail.com

Этот сайт ничего не ищет, а просто автоматически генерирует ссылки на страницы в разных соцсетях с никнеймом человека. Воспользоваться им будет быстрее, чем набирать эти ссылки вручную.

Ссылка на сайт: poiskmail.com

6. Lullar.com

Еще один генератор ссылок. Список сервисов у него намного длиннее, чем у предыдущего и многие из них в России совсем неизвестны. Но попытать счастья стоит.

Ссылка на сайт: lullar.com

7. Поиск на Facebook

И в заключении хотелось бы напомнить о самом простом способе найти информацию о человеке по email: просто вбить его в поиске на Facebook. Частенько этого бывает достаточно.

Ссылка на сайт: facebook.com

Сервисы из статьи делают одно и то же — ищут профили в социальных сетях. Но места поиска у всех отличаются. Для достижения максимального результата лучше применять их все в комплексе.

Источник: Айфонс

188
Ссылка на основную публикацию