Con le funzioni spaziali SQL2008, come posso generare un poligono contenente i risultati di un'aggregazione

StackOverflow https://stackoverflow.com/questions/1212297

Domanda

Ho una tabella di punti, ognuno con un nome, latitudine, longitudine e un prefisso. Quello che mi piacerebbe fare è eseguire un'aggregazione (ovvero una clausola "raggruppa per") e restituire un poligono contenente tutti i punti per un particolare prefisso.

Faccio fatica anche a scoprire se esistono aggregazioni integrate per i tipi di dati geografici, figuriamoci per darmi il poligono di delimitazione

Per ragioni di argomento, supponiamo che io abbia una tabella che assomigli un po 'a:

+---------+------+---------+---------+
| 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  |
+---------+------+---------+---------+

(In realtà, l'area più piccola ha 57 punti e la più grande 626)

È stato utile?

Soluzione

Anche se non esiste un modo integrato per farlo, ci sono aggregati disponibili come parte degli Sql Spatial Tools pacchetto CodePlex. A seconda esattamente di ciò che desideri, potresti essere interessato a utilizzare Bounding Box Aggregate o Union Aggregate seguito da una chiamata a ConvexHull per ottenere il poligono minimo anziché una casella.

Altri suggerimenti

Per i vantaggi di chiunque sia arrivato qui e voglia vedere il codice che ottieni (il fantastico) Sql Strumenti spaziali :

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

Puoi visualizzare il risultato in GeoQuery2008 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top