Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » [решено] Оптимальное решение для привязки координат к географическим объектам на MS SQL Server

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

В Поисках Истины


Сообщения: 802
Благодарности: 135


Конфигурация

Профиль | Отправить PM | Цитировать


Добрый день.

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

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

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

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

Спасибо.

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 16:04, 31-05-2013

 

В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

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

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 12:41, 03-06-2013 | #21



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

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


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

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

Цитата LilLoco:
и использовался тип данных - geometry. »
Где можно почитать — что это за тип данных в Microsoft SQL Server?

Отправлено: 13:13, 03-06-2013 | #22


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


Цитата Iska:
Где можно почитать — что это за тип данных в Microsoft SQL Server? »
Когда я разбирался, читал все на MSDN.

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

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 13:51, 03-06-2013 | #23


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 14:48, 03-06-2013 | #24


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

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

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

-------
foreach(short w in new short[] {73,3,79,83,90,79,78,69}){
Console.Write((char)w);
}


Отправлено: 15:31, 03-06-2013 | #25


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата LilLoco:
Процесс добавления - закрытый. »
Ясно. Я думал, всё сугубо Ваше.

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

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

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



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

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

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

Отправлено: 16:28, 03-06-2013 | #26


В Поисках Истины


Сообщения: 802
Благодарности: 135

Профиль | Отправить PM | Цитировать


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

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

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

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

Отправлено: 16:54, 03-06-2013 | #27


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:00, 03-06-2013 | #28



Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » [решено] Оптимальное решение для привязки координат к географическим объектам на MS SQL Server

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2008 R2 - Обновление SP4 для внутренней базы MS SQL Server 2005 (kb2463332) El Scorpio Windows Server 2008/2008 R2 1 05-03-2017 02:24
MSFT SQL Server - Есть ли способ перейти с MS SQL 2005 на MS SQL 2000 elec Программирование и базы данных 10 18-04-2013 12:35
2008 R2 - Оптимальное решение для перемещения пользователя Ruldik Windows Server 2008/2008 R2 9 28-09-2012 16:52
Использование - MS SQL server cal 2005 для доступа к SQL SRV 2008 xaustov Лицензирование продуктов Microsoft 1 20-01-2012 17:55
Подбор - MS Win 2003 Server + MS SQL 2005 на кластер PetrK Лицензирование продуктов Microsoft 0 22-02-2008 14:12




 
Переход