2009-07-31 5 views
1

Ich habe eine Tabelle mit Punkten, jeweils mit einem Namen, Breite, Länge und einer Ortskennzahl. Was ich tun möchte, ist eine Aggregation durchzuführen (d. H. Eine "Gruppierung nach" -Klausel) und ein Polygon zurückzugeben, das alle Punkte für eine bestimmte Ortskennzahl enthält.Mit SQL2008 Spatial Funktionen, Wie kann ich ein Polygon mit den Ergebnissen einer Aggregation generieren

ich ein wenig bin kämpfen zu finden, auch wenn es, obwohl jede gebaut in Aggregationen für die Geographie-Datentypen sind, allein lassen Sie mich den Begrenzungs Polygon

Aus Gründen der Argumentation zu geben, gehe ich davon eine habe Tabelle, die ein wenig wie folgt aussieht:

 
+---------+------+---------+---------+ 
| 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 Wirklichkeit hat die kleinste Fläche 57 Punkte, und die größten 626)

Antwort

2

Zwar gibt es keine integrierte Möglichkeit, dies zu tun, gibt es Aggregate verfügbar als Teil des CodePlex-Pakets Sql Spatial Tools Alter. Je nachdem, was genau Sie möchten, können Sie entweder das Begrenzungsrahmen-Aggregat oder das Union-Aggregat verwenden, gefolgt von einem Aufruf von ConvexHull, um das Minimum-Polygon anstelle einer Box zu erhalten.

2

Für die Vorteile eines jeden, der hier angekommen und will den Code, den Sie mit (ehrfürchtigen) zu sehen bekommen Sql Spatial Tools:

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 

Sie das Ergebnis in GeoQuery2008 anzeigen können.

+0

Ich musste das Bild von Ihrem Beitrag entfernen, da ImageShack es gelöscht und durch Werbung ersetzt hat. Weitere Informationen finden Sie unter http://meta.stackexchange.com/q/263771/215468. Wenn es Ihnen möglich ist, sollten Sie sie erneut hochladen. Vielen Dank! – Undo

Verwandte Themen