С помощью пространственных функций SQL2008, как я могу создать полигон, содержащий результаты агрегации - PullRequest
1 голос
/ 31 июля 2009

У меня есть таблица точек, каждая с именем, широтой, долготой и кодом города. То, что я хотел бы сделать, это выполнить агрегирование (то есть предложение «group by») и вернуть многоугольник, содержащий все точки для определенного кода области.

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

Ради аргумента предположим, что у меня есть таблица, которая выглядит примерно так:

+---------+------+---------+---------+
| Name    | Area | Lat     | Long    |
+---------+------+---------+---------+
| Ipswich | A    | 52.053  |  1.156  |
| Luton   | A    | 51.8717 | -0.4246 |
| Melton  | A    | 52.1064 |  1.3322 |
| Didcot  | B    | 51.6024 | -1.2321 |
| Oxford  | B    | 51.7486 | -1.265  |
+---------+------+---------+---------+

(На самом деле самая маленькая область имеет 57 баллов, а самая большая 626)

Ответы [ 2 ]

2 голосов
/ 12 октября 2009

Для тех, кто приехал сюда и хочет увидеть код, который вы получаете (удивительный)

DECLARE @points TABLE
(
 Name VARCHAR(50),
 Area CHAR(1),
 Point GEOGRAPHY
)

INSERT INTO @points VALUES ('Ipswich', 'A', geography::STGeomFromText('POINT( 1.156  52.053  )', 4326))
INSERT INTO @points VALUES ('Luton', 'A', geography::STGeomFromText('POINT(  -0.4246 51.8717 )', 4326))
INSERT INTO @points VALUES ('Melton', 'A', geography::STGeomFromText('POINT( 1.3322  52.1064 )', 4326))

INSERT INTO @points VALUES ('Didcot', 'B', geography::STGeomFromText('POINT( -1.2321 51.6024 )', 4326))
INSERT INTO @points VALUES ('Oxford', 'B', geography::STGeomFromText('POINT( -1.265  51.7486 )', 4326))

SELECT  dbo.ConvexHullGeography(dbo.GeographyUnionAggregate(point)), 'red' as color, 1 as thickness
FROM @points
GROUP BY Area

Вы можете просмотреть результат в GeoQuery2008 .

2 голосов
/ 03 августа 2009

Хотя встроенного способа сделать это нет, агрегаты доступны как часть пакета Пространственные инструменты *1002* CodePlex. В зависимости от того, что именно вы хотите, вас может заинтересовать использование агрегата ограничивающего прямоугольника или агрегата объединения с последующим вызовом ConvexHull для получения минимального полигона вместо прямоугольника.

...