Определить расстояние от списка Широта и Долгота - PullRequest
0 голосов
/ 23 мая 2011

В настоящее время у меня есть таблица, которая выглядит примерно так

_ID    DeviceID   Timestamp          Latitude Longitude
4      13         1.1.2011 10:00:13  30.234   24.953
5      13         1.1.2011 10:00:17  30.235   24.953
6      13         1.1.2011 10:00:20  30.235   24.954
7      14         1.1.2011 10:00:21  54.532   13.256
8      13         1.1.2011 10:00:22  30.235   24.955
9      13         1.1.2011 10:00:24  30.234   24.954
  • _ID
    • Первичный ключ
    • int
  • DeviceID
    • int
    • не нуль
  • метка времени
    • дата / время
    • не ноль
  • Широта
    • реальная
    • не нулевая
  • Долгота
    • реальная
    • not null

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

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

Может кто-нибудь сказать мне, как создать геометрию из списка lat / lng?

Обновить

Хорошо, в моем вопросе до сих пор я упустил одну вещь:

У меня есть лот точек для расчета одного расстояния (обычно где-то между 1000 и 20 000но один или два раза до 40000 баллов).

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

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

Чтобы ответить на комментарий Криса: Да, соединение с 4 - 5 - 6 - 8 - 9 (определяется меткой времени).В таблице указаны значения различных устройств (например, 7), но их можно легко отсортировать с помощью предложения where.Расстояние, которое я хотел бы получить, - это длина линии, которую вы получите, если соедините точки из приведенного выше списка.

1 Ответ

2 голосов
/ 23 мая 2011

Вот скрипт, который создает базовую таблицу с указанными вами данными, превращает ее в допустимую строку LINESTRING, а затем вычисляет длину по ней:

declare @yourTable table (latitude decimal(10,7), longitude decimal(10,7))
insert into @yourTable select 30.234, 24.953
insert into @yourTable select 30.235, 24.953
insert into @yourTable select 30.235, 24.954
insert into @yourTable select 54.532, 13.256
insert into @yourTable select 30.235, 24.955
insert into @yourTable select 30.234, 24.954

DECLARE @LINE VARCHAR(MAX) = 'LINESTRING (';    
SELECT @LINE = @LINE+ convert(varchar(20),latitude) + ' ' + convert(varchar(20),longitude) + ','
FROM @yourTable

select @LINE = LEFT(@LINE,LEN(@LINE)-1)+')'

DECLARE @g geography;
SET @g = geography::STGeomFromText(@LINE, 4326);
SELECT @g.STLength();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...