Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

MI6UGRU

.pdf
Скачиваний:
16
Добавлен:
13.02.2015
Размер:
14.71 Mб
Скачать

Приложение B: Техника геокодирования

SEVENTH 7TH

EIGHTH 8TH

NINTH 9TH

TENTH 10TH

NORTH N

SOUTH S

EAST E

WEST W

ALLEY AL

AVENUE AV

AVE AV

BOULEVARD BLVD

BRIDGE BR

CIRCLE CIR

COURT CT

DRIVE DR

EXTENSION EXT

HIGHWAY HWY

INTERSTATE I

LANE LN

MOUNT MT

PARK PK

PARKWAY PKWY

PLACE PL

PLAZA PLZ

POINT PT

RAILROAD RR

ROAD RD

ROUTE RT

SAINT ST

SQUARE SQ

STREET ST

STR ST

TERRACE TER

!EOLNOSPACE

,

627

Приложение B: Техника геокодирования

;

#

!EOLSPACE FLOOR SUITE "P.O. BOX"

!NOSPACE

.

\"

\!

\\

!SPACE

"STATE HIGHWAY"STHWY" "N ST"NORTH ST"

"S ST"SOUTH ST"

"E ST"EAST ST"

"W ST"WEST ST"

"N AV"NORTH AV"

"S AV"SOUTH AV"

"E AV"EAST AV"

"W AV"WEST AV"

В этот файл можно вносить собственные добавления и изменения. MapInfo различает четыре класса подстановок (инструкций), которые по-разному обрабатывает. Перед элементами каждого класса указывается соответствующее ключевое слово:

Класс подстановок

Ключевое слово

 

 

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

!SPACE

пробелами

 

 

 

Сокращение после знака

!EOLNOSPACE

 

 

 

Сокращение после пробела

!EOLSPACE

 

 

 

Удаление

!NOSPACE

 

 

 

Чтобы MapInfo знала, как обрабатывать различные строки в файле сокращений, перед каждой группой инструкций должно быть указано ключевое слово.

628

Приложение B: Техника геокодирования

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

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

Этот класс подстановок является стандартным в MapInfo. Он обрабатывается следующим образом: MapInfo сравнивает лексемы, ограниченные пробелами, в целевых адресах со строками файла адресов. Под лексемой, ограниченной пробелами, понимается строка символов, перед которой и после которой стоит пробел. Например, MapInfo заменит “Ave” на “Av” в названии “Park Ave”, но не заменит “Avery Blvd” на “Avry Blvd.” Оба названия улиц содержат строку “Ave”. Но эта строка ограничена пробелами только в “Park Ave”, но не в “Avery Blvd.” В “Avery Blvd”, после “Ave” следует буква “r”, а не пробел.

Данная интерпретация является стандартной для всех строк файла сокращений. Можно добавлять элементы, имеющие такой же смысл. Например, можно добавить пару “ПРОСПЕКТ ПРОСП”, чтобы MapInfo считала, что строка “ПРОСП” в целевых адресах означает “ПРОСПЕКТ”. Аналогично можно добавить такую пару, как: “ПРОЕЗД ПР”.

Для обозначения группы строк, представляющих собой простые подстановки, ограниченные пробелами, используется ключевое слово “!SPACE”. Строки после “!SPACE” задают стандартные инструкции и могут располагаться в пределах своей группы как угодно. Когда MapInfo находит другое ключевое слово, она переключается на другую интерпретацию строк.

Сокращение после знака

Находя элемент данного класса в адресе, MapInfo просто отбрасывает его и все, что следует после него. При этом не обязательно, чтобы до или после такого элемента следовали пробелы. Подобный прием полезен при обработке таких адресов, как:

123 Appian Way, Mail Stop 829

7305 Van Zandt # 23

Ленинский проспект 100, квартира 100

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

!EOLNOSPACE

,

#

“!EOLNOSPACE” – это ключевое слово, которое показывает, что после него следуют элементы класса сокращений после знака. Затем на одной строке указана запятая, а на другой – знак номера. Теперь, если MapInfo найдет запятую или знак номера в любом адресе, она отбросит эти символы вместе со всем, что за ними следует.

Приведенные примеры примут вид:

629

Приложение B: Техника геокодирования

123 Appian Way

7305 Van Zandt

Ленинский проспект 100, квартира 100

Примечание: наличие запятой в классе сокращений после знака позволяет отсекать “квартиры”, “корпуса” и прочие ненужные элементы. Однако она может провоцировать ошибки в простых ситуациях типа “Ленинский проспект, 100”. В этом случае можно с самого начала не включать в адреса запятую.

Сокращение после знака

Находя элементы данного класса, ограниченные пробелами, MapInfo удаляет эти элементы и все, что за ними следует. Рассмотрим примеры:

73 Appian Way Suite 829

3033 Van Zandt Room 202 Ленинский проспект 100 квартира 20 Дубнинская 10 кв 4

Чтобы обрабатывать эти случаи, нужно добавить следующие строки в файл сокращений:

!EOLSPACE

SUITE

ROOM

КВАРТИРА

ÊÂ

“!EOLSPACE” – это ключевое слово, которое показывает, что после него следуют элементы класса сокращений с учетом пробелов. Если MapInfo найдет такие строки в любом адресе, она отбросит их вместе со всем, что за ними следует. Приведенные примеры примут вид:

73 Appian Way

3033 Van Zandt Ленинский проспект 100 Дубнинская 10

Удаление

MapInfo удаляет элементы адресов. В качестве примеров применения можно привести:

433 Van-Rensselaer

91 St Albans'

Надо удалить из адресов дефис и апостроф. Для этого следует внести такие элементы в файл сокращений:

!NOSPACE

-

'

“NOSPACE” – это ключевое слово, показывающее, что после него следуют элементы, которые следует удалить. Приведенные примеры примут вид:

369 VanRensselaer

91 St Albans

630

Приложение B: Техника геокодирования

Примечание: дефис в классе NOSPACE может конфликтовать с адресами типа “4- ая улица Текстильщиков”.

Допустимые пробелы

В некоторых подстановках строки содержат пробелы внутри себя. В таких случаях следует использовать двойные кавычки. Двойные кавычки ставятся:

в начале строки

между искомой строкой и подстановкой

и в конце строки.

Например, можно подставлять “STHWY” вместо “State Highway”. Для этого следует задать строку:

"State Highway"STHWY"

Подобным образом можно решить проблемы со сложными названиями, элементы которых имеются в файле сокращений. Например, начальные строки “North St” и “Park Av” содержатся в файле сокращений. Следовательно, MapInfo подставит “N” вместо “North” и получит “N St”, а вместо “Pk” – “Park” и получит “Pk Av”. Теперь в файл сокращений можно добавить следующие строки:

"N ST"North ST"

"PK AV"PARK AV"

Отметим, что эти строки должны следовать после строк подстановок для “N” в “North” и “PK” в “Park”. Если они будут указаны выше, то не будут работать. Итак:

...

...

NORTH N

...

...

PARK PK

...

...

"N ST"NORTH ST"

"PK AV"PARK AV"

...

...

Теперь при обработке NORTH N MapInfo будет преобразовывать NORTH ST в N ST. А при обработке "N ST"NORTH ST" она будет преобразовывать N ST в NORTH ST. PARK AV преобразуется аналогично.

Специальные символы

MapInfo использует специальным образом восклицательный знак (!), двойные кавычки

(") и обратную наклонную черту (\). Эти символы указывают MapInfo, как обрабатывать дальнейшие строки, но сами по себе не являются строками подстановок. Восклицательный знак указывает, что данная строка не является сокращением. Двойные кавычки обозначают наличие допустимого пробела в строке подстановки. А

631

Приложение B: Техника геокодирования

наклонная черта сообщает, что в данный момент специальный символ надо считать обычным символом.

То есть, если Вы хотите использовать любой из этих трех символов в его обычном значении в строке подстановки, поставьте перед ним наклонную черту:

\!

\"

\\

Добавление строк в файл сообщений

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

Файл сокращений представляет собой текстовый (ASCII) файл с названием MAPINFOW.ABB в Windows, MapInfo.Abbreviation в Macintosh. Его можно менять в любом текстовом редакторе, в том числе добавлять новые строки и ключевые слова.

Ошибки в названиях улиц

Если написание названия улицы в целевой и исходной таблице различаются, MapInfo не посчитает эти названия совпадающими. Возможны три варианта дальнейших действий:

Геокодировать вручную.

При ручном геокодировании MapInfo откроет диалог со списком близких вариантов.

632

Приложение B: Техника геокодирования

Пролистайте список с помощью кнопок ВÂÅÐÕ и Вниз и выберите нужное название.

Отредактируйте целевую таблицу.

Если Вы полагаете, что целевая таблица содержит слишком много ошибок, лучше отредактировать ее перед геокодированием с помощью команды ОБНОВИТЬ КОЛОНКУ.

Источником ошибки может быть простая опечатка в написании названия в исходной таблице.

Измените название улицы в исходной таблице.

Óулицы есть другое название, или название изменилось

Для некоторых улиц используются два разных названия. Таблицы StreetInfo содержат только одно из них. Но адреса в Вашей таблице могут быть приведены в двух вариантах или не в том, которых учтен в таблице MapInfo.

Подобная проблема возникает, когда меняют название улицы. На карте будет показано старое название, поэтому адреса с новым названием не будут геокодированы. Можно изменить название на карте, но тогда адреса со старым вариантом названия "повиснут в воздухе". Нам хотелось бы работать со всеми адресами.

Для этого можно добавить новую строку в файл названий улиц:

Откройте файл FILENAME2.TAB—файл стандарта StreetInfo названий для карты улиц (а не файл сегментов).

Найдите строку с названием улицы, для которой нужно ввести еще одно название, и запомните значение кода MI_REFNUM.

Добавьте новую строку с другим названием улицы и тем же кодом MI_REFNUM.

Сохраните и закройте файл.

Теперь при геокодировании MapInfo будет обрабатывать оба названия.

Неправильная нумерация домов

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

Можно установить режим Использовать ближайший адрес в диалоге "Варианты". Тогда MapInfo будет геокодировать подобные записи по ближайшему имеющемуся диапазону, относя запись к середине этого диапазона.

èëè

Можно обрабатывать такие случаи в ручном режиме. MapInfo выдаст список имеющихся диапазонов. Выберите нужный диапазон из списка или нажмите кнопку ПРОПУСТИТЬ, чтобы оставить запись необработанной.

èëè

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

633

Приложение B: Техника геокодирования

Абонентские ящики

Таблицы StreetInfo не содержат данных об абонентских ящиках или других нестандартных элементах адреса. Если Ваша база данных содержит такие данные, то ее нельзя геокодировать на основании таблицы StreetInfo. Нужно провести геокодирование другим способом.

Например, если Ваша таблица содержит много адресов с указанием абонентских ящиков, можно выбрать все такие записи и геокодировать их по почтовым индексам. А затем оставшиеся записи геокодировать по полным адресам.

Чтобы выделить адреса, содержащие номера абонентских ящиков, можно ориентироваться на наличие слова “box”. С помощью функции MapInfo InString$ можно выбрать все записи, содержащие подстроку “ Box ”. Обратите внимание на пробелы по обе стороны от слова “box”. Это гарантирует, что MapInfo не включит в выборку такие, например, адреса, как Boxwood Street. Командой ВЫБРАТЬ èëè SQL-ЗАПРОС выберите все записи, удовлетворяющие критерию:

InString$(1,ADDRESS," BOX ")>0

Число “1” означает, что MapInfo должна искать данную подстроку, начиная с первого символа. “ADDRESS” указывает на столбец, содержащий адреса, “ BOX ” – это искомая подстрока. Если MapInfo находит “ BOX ” в адресе, функция возвращает номер позиции, с которой начинается подстрока “ BOX ”. Это означает, что в любой записи, для которой InString$ больше нуля, адрес содержит “ Box ”.

Теперь можно геокодировать сделанную выборку по почтовым индексам. Затем следует геокодировать всю базу по адресам. Поскольку записи с данными об абонентских ящиках уже будут закодированы, MapInfo не станет их заново обрабатывать.

Неправильное название города

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

Возьмем, например, адрес “Невский проспект 50, Ленинград”, который относится на самом деле к городу Санкт-Петербургу. Поскольку целевой адрес использует название, отличающееся от названия в исходной таблице, эта запись не будет геокодирована.

Можно установить режим Использовать адрес, найденный в другой области в диалоге "Варианты". В этом режиме MapInfo закодирует адрес по той области, к которой адрес действительно относится (если его можно отнести к единственной области). Если же адрес можно отнести к более чем одной области, запись не будет геокодирована.

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

Геокодирование и русский язык

Для геокодирования на русском языке необходимо проделать следующие шаги:

1.В диалоге команды ПРАВКА “Настройки” нажать на кнопку СТРАНА. В отрывшемся диалоге выбрать режим Номера домов после названия улиц.

634

Приложение B: Техника геокодирования

2.Задать свой файл сокращений MAPINFO.ABB, используя правила, описанные выше, либо воспользоваться файлом сокращений MI-RUS.ABB, переименовав его в MAPINFO.ABB.

3.При создании адресов и русской версии файла сокращений можно следовать следующей стратегии.

Адреса задаются в следующем стиле, в каком они приведены в Справочнике “Улицы Москвы”:

Имя_улицы Прилагательное_имя Тип_улицы Номер_дома

ãäå:

Имя_улицы – это собственно название улицы; Прилагательное_имя – это слова типа “Верхняя”, “Нижняя”, Большая”, “Малая”, “Первая” и т.д.

Тип_улицы – это проезд, проспект, шоссе и т.д. Само слово “улица” можно не применять.

Номер_дома – число без дробей.

Чем меньше запятых, точек, дефисов и прочих небуквенно-цифровых символов будет в адресе, тем меньше вероятность ошибок в геокодировании.

Файл сокращений можно дополнить парами типа:

ПЛОЩАДЬ ПЛ ШОССЕ Ш ТУПИК ТУП

НАБЕРЕЖНАЯ НАБ

ПЕРЕУЛОК

ÏÅÐ

ПРОЕЗД

ÏÐ

БУЛЬВАР

ÁÓË

...

 

è ò.ä.

Классы !EOLNOSPACE, !EOLSPACE и !NOSPACE можно также дополнить по правилам, описанными выше.

Таким образом, можно гарантировать геокодирование адресов типа: “Ленинский проспект 100”, “Энтузиастов шоссе 40”, “Беговая 36” “Масловка верхняя 39”

Если в классе сокращений !EOLNOSPACE задана запятая, то можно автоматически геокодировать адреса типа “Ленинский проспект 100, Москва”, “Энтузиастов шоссе 40, Пете Иванову”, “Беговая 36, фирма ЭСТИ” “Масловка верхняя 39, квартира 40”.

635

Приложение B: Техника геокодирования

Как пользоваться кодами результатов

Вы можете задать числовое поле (в диалоге "Варианты"), в которое MapInfo будет записывать коды результатов геокодирования. Эти коды будут содержать информацию о том, какие шаги геокодирования выполнила MapInfo для данной записи, завершилось ли кодирование успехом и почему не найдено точное соответствие. Коды результатов можно использовать для оценки и настройки параметров геокодирования. Код результата – это число, каждая из цифр которого обозначает отдельный шаг геокодирования. MapInfo проводит суммирование пройденных этапов для каждой записи и получает код результата для данной записи. Например, код 122 означает:

1.Адрес найден в другой области: 100

2.Не найден подходящий диапазон номеров: 20

3.Сделана подстановка из файла сокращений: 2

Ниже в таблицах объяснены значения каждого элемента кода.

Общие правила

<0

Не найдено соответствие

 

 

 

0

Поиск еще не проводился

 

 

 

1

Точное совпадение

 

 

 

>1

Неполное совпадение

 

 

 

Коды результатов разработаны таким образом, чтобы при отсутствии совпадений они имели отрицательное значение, а в случае совпадения – положительное. Если запись еще не обрабатывалась, ей соответствует нулевой код.

 

 

 

Название улицы

 

 

1

 

Найдено точное совпадение

 

 

 

 

 

 

 

 

 

 

 

2

 

Использован файл сокращений

 

 

 

 

 

 

 

 

 

 

 

3 (-)

 

Точное совпадение не найдено

 

 

 

 

 

 

 

 

 

 

 

4 (-)

 

Улица не указана

 

 

 

 

 

 

 

 

 

 

 

5

 

Пользователь выбрал название из

 

 

 

 

 

 

 

 

списка

 

 

 

 

Первая цифра кода показывает, как MapInfo обработала название улицы.

 

 

 

 

 

 

 

Диапазоны номеров

 

000

Найден подходящий диапазон и сторона улицы

 

 

 

 

10

Найден диапазон, но не определена сторона улицы

 

 

 

 

20 (+/-)

Диапазон не найден, но номер лежит между минимальным и

 

 

максимальным значениями

 

 

 

 

30 (+/-)

Диапазон не найден, номер лежит вне диапазона между

 

 

минимальным и максимальным значениями

 

 

 

 

 

636

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]