1. Улицы — это один слой с линейными объектами, отдельный шейп-файл. Адреса — точечный слой, тоже шейп.
Улицы на перекрестках не разбиваются; каждая улица — это, как правило, линия, состоящая из нескольких отрезков, — полилиния. Иногда одна улица — это несколько (две, три) полилинии: в тех случаях, когда улица прерывается и потом продолжается, — но таких очень мало, пусть это будет исключением, потом можно вручную все поправить.
2. Полей, обозначающих крайние угловые дома, нет. Не вижу, чем они могут помочь…
3. Поле для связи: их сразу два — название улицы и специальный уникальный идентификатор (увы, не сегмента! а то я бы все уже повернул!), который надежнее чем название улицы, потому что, как я сказал выше, некоторые улицы состоят из двух-трех полилиний. То есть идентификатор связывает конкретный адрес с конкретной линией. (Вообще говоря, непринципиально, потому что там исключений раз два и обчелся, можно и по названию связать.)
4. С геокодированием я пока не разбирался, до сих пор для проекта это не требовалось.
Я формулирую задачу так. Скажите, что здесь не так
А) Скрипт берет точку и сопоставляет ее с полилинией следующим образом. От точки до линии находится кратчайшее расстояние. Допустим, у нас есть улица XY и точка A. Находим от точки A до улицы XY кратчайшее расстояние AB. То есть анализируем, до какого из отрезков линии кратчайшее расстояние.
Б) Теперь строим отрезок АС, перпендикулярный отрезку AB.
В) Всё. Осталось измерить угол отрезка AC относительно север-юга. Величину угла вписываем в таблицу адреса. Задача решена. Там, где скрипт будет сбоить, поправить потом вручную.
Я нашел пару скриптов, но они не делают прям как надо.