Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   [решено] Оптимальное решение для привязки координат к географическим объектам на MS SQL Server (http://forum.oszone.net/showthread.php?t=261611)

LilLoco 31-05-2013 16:04 2159940

Оптимальное решение для привязки координат к географическим объектам на MS SQL Server
 
Добрый день.

В организации проводятся некоторые измерения по различным районам. К данным по измерениям привязываются координаты с GPS. Данные агрегируются по долготам/широтам (с точностью до 4го знака) и храняться в таблицах на SQL Server. Далее для ведения статистики (отчетности) необходимо разбивать все позиции на различные группы (н-р, районы, округа, города, поселки, основные трассы). И тут встает вопрос, каким способом производить такое разбиение?

Изначально, когда разбивалось только на районы, алгоритм был такой:
в таблице на сервере создавались географические полигоны, и принадлежавшие полиганам позиции помечались идентификатором района.
Данных по измерениям очень большое количество, и поэтому такой способ занимал длительное время обработки.
Более того, так как сейчас необходимо разбиение на большее количество групп, очень сложно будет создать такие полигоны на сервере, и время обработки увеличится. (Изначально было всего 30-35 районов.)

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

Подскажите, как реализовать такую задачу.
Буду рад любой информации.

Спасибо.

freese 31-05-2013 17:53 2160000

я немного далек от sql, но пять копеек вставлю (-
Цитата:

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

да, создать список, но к каждой позиции только данные измерений. Отдельно районы, округа и т.д. с указаниием диапазонов координат из таблицы

LilLoco 31-05-2013 19:48 2160064

Вложений: 1
freese, спасибо.

Можно немного поподробнее. Не совсем понял, ваше представление - структуры всего этого.
Я думал что - то наподобие (см. вложение).

Ну и соответственно, ко всем необходимым таблицам по измерениям добавлять столбец PosId, которая берется из Position по совпадения Longitude, Latitude.

Iska 31-05-2013 21:12 2160117

LilLoco, что за группы 1…N?

LilLoco 01-06-2013 00:11 2160194

Iska, как бы уровни вложенности. Например: 1 группа- Москва, московская область; 2 группа - цао, вао, Ногинский район, Шатурский район; 3 группа - деревни, поселки; ну и так далее... То есть каждая группа будет отвечать за определенное разбиение на уровни.

Iska 01-06-2013 02:16 2160227

LilLoco, с точки зрения теории это явно избыточно. Необходимо и достаточно держать в таблице только нижний уровень.

Мне не очень алгоритм понятен. Полигоны — это что суть, физически?

Tau_0 01-06-2013 04:45 2160236

Цитата:

Цитата Iska
Полигоны — это что суть, физически? »

По всему, --- нечто подобное:
Полигонометрия

http://ru.wikipedia.org/wiki/Полигонометрия
ЗЫ Раньше узлами сетки служили тригопункты, а теперь ко всему можно привязаться...

Iska 01-06-2013 06:20 2160244

Цитата:

Цитата Tau_0
http://ru.wikipedia.org/wiki/Полигонометр »

Цитата:

В Википедии нет статьи с таким названием.
Поправьте ссылку.

Хотелось бы услышать автора темы.

Tau_0 01-06-2013 09:53 2160273

Цитата:

Цитата Iska
Поправьте ссылку. »

Исправил...

LilLoco 01-06-2013 14:04 2160370

Цитата:

Полигоны — это что суть, физически?
географическая область. Н-р, Ногинский район.

Цитата:

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

Iska 01-06-2013 23:09 2160590

Цитата:

Цитата LilLoco
географическая область. Н-р, Ногинский район. »

Я, наверное, перемудрил с вопросом. Имелось в виду, что набор записей с единым значением «Группа N» суть последовательность координат, дающих при последовательном соединении полигон, «накрывающий» замкнутую область, обозначающую физическую площадь «Группы N»? Я просто действительно пока не очень понимаю.

LilLoco 02-06-2013 01:38 2160633

Вложений: 1
Цитата:

Цитата Iska
последовательность координат, дающих при последовательном соединении полигон, «накрывающий» замкнутую область, обозначающую физическую площадь «Группы N»? »

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

Для наглядности, прикладываю картинку.
Есть 4 группы - таблицы, на которые мы делим данные (Podrazd - подразделения, Oblast - области, Region - районы, City - города). Есть таблица Geo, которая содержит список всех возможных координат, где мы можем снимать измерения, с шагом 0.0001. Таких записей получается порядка 2 миллиардов.

Далее к таблицам измерений присоединять колонку PosId, которая будет идентификатором принадлежности измерения к "группе разбиения". Идея лезет в голову только такая пока что.

P.S. Чтобы немного уменьшить объем таблицы Geo, вложенность можно определять не в ней, а в таблицах-группах. Т.е. в таблице Oblast создать колонку Podrazd.podrazdid, в Region - Oblast.OblastId и так далее. Но это на данный момент не так сильно волнует. Основным вопросом для меня является правильно ли я мыслю, или этот вариант лучше вообще не использовать?

Спасибо.

lxa85 02-06-2013 09:13 2160657

LilLoco, скажи, а измерение до 4ого порядка, это сколько в метрах?

LilLoco 02-06-2013 13:54 2160775

lxa85, я думаю порядка 4-5 метров. Это в московской области по широте.

Я думал о том, чтобы хранить координаты с шагом не 0.0001, а 0.001. Думаю погрешность будет невелика.

Iska 03-06-2013 03:07 2161141

Цитата:

Цитата LilLoco
А как тогда определять уровни вложенности? Н-р, г.Электросталь. Предположим, что это нижний уровень. Выше идут: Ногинский район, московская область, обслуживающее подразделение... »

Отдельные таблицы, связанные отношениями один-ко-многим.

Цитата:

Цитата LilLoco
P.S. Чтобы немного уменьшить объем таблицы Geo, »

Не для того, чтобы уменьшить объём, а для того, чтобы нормализовать базу.

LilLoco 03-06-2013 09:32 2161206

Iska, ну то есть, ход мыслей у меня более менее правильный?

Iska 03-06-2013 10:12 2161230

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

Расскажите об задаче наиболее подробным образом, чтобы было понятно человеку, впервые об этом узнавшем.

LilLoco 03-06-2013 11:24 2161277

Цитата:

Цитата Iska
непонятно Ваше решение с «создать таблицу, содержащую весь список возможных координат». »

Другого на данный момент я не придумал. Поэтому прошу помощи.

Цитата:

Цитата Iska
наиболее подробным образом »

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

С оборудования снимаются файлы с данными, которые вносятся в базу данных SQL Server. По полученным данным, формируются таблицы (Измерения) для ведения статистики вида: id, longitude, latitude, столбцы с измерениями.
То есть, для каждой точки проезда/прохода, существует ряд измерений. Точка имеет свои координаты долготы/широты.

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

Для этого нам необходимо связать координаты из полученной таблицы (Измерения) с реальными географическими объектами.

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

Вот в принципе и вся задача.

Iska 03-06-2013 11:34 2161286

Цитата:

Цитата LilLoco
С оборудования снимаются файлы с данными, которые вносятся в базу данных SQL Server. По полученным данным, формируются таблицы (Измерения) для ведения статистики вида: id, longitude, latitude, столбцы с измерениями.
То есть, для каждой точки проезда/прохода, существует ряд измерений. Точка имеет свои координаты долготы/широты. »

Примерно ясно.

Цитата:

Цитата LilLoco
Есть задача, чтобы можно было просмотреть статистику лишь для определенных мест, например, только на шоссе, либо только в деревнях. »

Понятно.

Цитата:

Цитата LilLoco
Для этого нам необходимо связать координаты из полученной таблицы (Измерения) с реальными географическими объектами. »

Откуда будут браться координаты реальных географических объектов? Какая-то база? Как именно они (координаты) из этой гипотетической базы определяют область объекта (накрытие)? Это как-то связано с упомянутыми полигонами?

lxa85 03-06-2013 12:31 2161328

Дополню Iska и разовью свою мысль. Допустим идет процесс пешей и автомобильной гамма съемки. Автомобиль, равно как и человек ходит по дорогам,иногд по лесам,полям,болотам. Вам доступны только его координаты,без описания окружения. Iska поднимает вопрос топопривязки полученных координат к реальной местности. С приборов можно получить трассу маршрута(удобно в плане дорог). Но для практического использования необходимо привязать полученные значения к карте. Возможно для вас целесообразние будет получить картографические сведения из специальных баз(если разработка официальная и поддерживается руководством) возможно они подскажут свое API для работы с картами.

LilLoco 03-06-2013 12:41 2161333

Цитата:

Цитата Iska
Это как-то связано с упомянутыми полигонами? »

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

Цитата:

Цитата Iska
Откуда будут браться координаты реальных географических объектов? Какая-то база? »

Планируется, сделать геокодирование по всем точкам при помощи яндекс-карт, google-maps, 2gis, mapinfo. Каким именно сервисом пользоваться еще не знаю. Но выбор будет среди них. Другого под рукой ничего нет.

Iska 03-06-2013 13:13 2161345

lxa85, некоторые сами «рисуют» карты: Waze: нам по пути, или История маленького, но очень гордого стартапа.

Цитата:

Цитата LilLoco
Изначально, когда было разделение на небольшие возможные регионы (лишь несколько районов московской области), использовалась таблица, в столбце которой хранились полигоны этих районов »

Ну, таково было и моё видение. Вы от этого решили уйти? Почему?

Цитата:

Цитата LilLoco
и использовался тип данных - geometry. »

Где можно почитать — что это за тип данных в Microsoft SQL Server?

LilLoco 03-06-2013 13:51 2161380

Цитата:

Цитата Iska
Где можно почитать — что это за тип данных в Microsoft SQL Server? »

Когда я разбирался, читал все на MSDN.

Цитата:

Цитата Iska
Вы от этого решили уйти? Почему? »

Проверка вхождения точки в полигон, созданный типом geometry Sql Server занимает довольно долгое время. Притом, что было всего порядка 25-30 таких полигонов. С учетом, того, что сейчас необходимы полигоны не только такого количества групп, а намного больше, я думаю, время обработки намного увеличится. Кроме того, для создания этих полигонов, необходимо знать краевые точки всех этих географических объектов. Что так же добавляет трудности в создании таблицы с географическими объектами.

Iska 03-06-2013 14:48 2161425

Цитата:

Цитата LilLoco
Когда я разбирался, читал все на MSDN. »

Спасибо, ясно.

LilLoco, почему бы не делать привязку к нижнеуровневому объекту не в момент выборки, а в момент добавления строки с измерением в таблицу?

LilLoco 03-06-2013 15:31 2161448

Цитата:

Цитата Iska
а в момент добавления строки с измерением в таблицу? »

Процесс добавления - закрытый. Добавление происходит при помощи ПО, поставляемого вместе с измерительным комплексом. Получается, что при добавлении мы никак не можем повлиять на структуры таблиц.

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

Цитата:

Цитата Iska
привязку к нижнеуровневому объекту »

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

Iska 03-06-2013 16:28 2161478

Цитата:

Цитата LilLoco
Процесс добавления - закрытый. »

Ясно. Я думал, всё сугубо Ваше.

А как насчёт делать привязку в момент пересчёта? Есть же технологические перерывы какие-нибудь?

Цитата:

Цитата LilLoco
В любом случае необходим источник этих объектов. И вот в каком формате целесообразнее хранить эти объекты, на данный момент, является для меня все еще загадкой. »

Например: Измерения[Id Измерения, Координаты, Измерения, Принадлежность] ⇚ один ко многим → Объекты[Id, Наименование, Подчинение (ссылка на Id в этой же самой таблице)] ← один ко многим ⇛ Полигоны[Id, Id Объекта, координата точки полигона, порядковый номер точки].

Схема базы данных:



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

Так вот, в этой схеме поле «Принадлежность» (к объекту нижнего уровня) можно заполнять позже.

Пожалуй, таблицу Полигоны также стоит разбить на две подтаблицы: собственно Объект[Id, Наименование (что-то я забыл про это на схеме), Подчинение] и ТочкиПолигона[Id точки, координата точки полигона, порядковый номер точки, Id Полигона].

LilLoco 03-06-2013 16:54 2161490

Цитата:

Цитата Iska
А как насчёт делать привязку в момент пересчёта? Есть же технологические перерывы какие-нибудь? »

Да такой вариант вполне уместен. Перерывов предостаточно, в разумной степени естественно.

Iska, Спасибо большое за разъяснения. Буду пробовать.

Спасибо всем за помощь в этом, нелегком для меня, деле.

Тему пока отмечу решенной

Iska 03-06-2013 17:00 2161491

LilLoco, я сейчас ещё подумал (да, бывает и такое — я думаю ;)) — таблицу Полигоны, что на схеме, надо обязательно разбить на две таблицы: один объект может состоять из нескольких полигонов, тогда как раз логично держать отдельно сами полигоны (как сущность) и отдельно, так же — как сущность, точки конкретного полигона.


Время: 21:37.

Время: 21:37.
© OSzone.net 2001-