Я настраиваю приложение с учетом местоположения, как указано здесь . С тех пор я узнал гораздо больше о приложениях ГИС и решил изменить несколько вещей в настройке, которую я первоначально предложил - теперь я собираюсь использовать базу данных postgresql с расширением postgis, чтобы разрешить геометрические поля, и использовать Данные TIGER/Line для его заполнения. Данные TIGER/Line, по-видимому, предлагают разные наборы данных в разных разрешениях (слоях) — есть данные для штатов, округов, почтовых индексов, блоков и т. д. Мне нужен способ связать сообщение с адресом, используя максимально возможное разрешение зернистости. .
Например, если возможно, я хотел бы связать пост с определенной улицей (наилучшее разрешение). Если не улица, то конкретный почтовый индекс (менее конкретный). Если не почтовый индекс, то конкретный округ (менее конкретный) и так далее. Примечание: я хочу в конечном итоге показать все это на карте.
Вот что я предлагаю:
Местоположения
id -- int
street_name -- varchar -- NULL
postal_code_id -- int -- NULL
county_id -- int -- NULL
state_id -- int
Почтовые индексы
id -- int
code -- varchar
geom -- geometry
Округи
id -- int
name -- varchar
geom -- geometry
Таблица состояний аналогична и так далее...
Как видите, таблица местоположений будет определять уровень специфичности любых установленных полей. Таблицы почтовых индексов, округов и штатов не связаны друг с другом внешним ключом (слишком сложно, чтобы определить правильную иерархию, которая действует везде), однако я считаю, что есть способ определить их взаимосвязь с помощью поля геометрии (например, запросить, в каком штате находится определенный почтовый индекс или какие почтовые индексы принадлежат определенному штату).
Я думаю, что это хорошая установка, потому что, если база данных будет расти (скажем, я решу включить в базу данных данные по районам или кварталам), я могу добавить еще одну таблицу для этих данных, а затем добавить еще один внешний ключ в таблицу местоположений (например, блок_идентификатор).
Кто-нибудь знает лучший способ сделать это?