Хороший способ присвоить сообщение местоположению с PostGIS - PullRequest
2 голосов
/ 14 января 2012

Я устанавливаю приложение с учетом местоположения, как упоминалось здесь . С тех пор я узнал намного больше о приложениях ГИС и решил изменить несколько вещей в настройке, которую я первоначально предложил - теперь я собираюсь использовать базу данных postgresql с использованием расширения postgis для учета геометрических полей и использовать TIGER / Линия данных для ее заполнения. Данные TIGER / Line, кажется, предлагают разные наборы данных в разных разрешениях (слоях) - есть данные для состояний, округов, почтовых индексов, блоков и т. Д. Мне нужен способ связать сообщение с адресом, используя максимально возможное разрешение зерна .

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

Вот что я предлагаю:

Местонахождение

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

Таблица состояний похожа, и так далее ...

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

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

Кто-нибудь знает лучший способ сделать это?

1 Ответ

1 голос
/ 17 января 2012

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

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

...