Mit Räumliche Funktionen SQL2008: Wie kann ich erzeugen ein Polygon die Ergebnisse einer aggreation enthalten
-
06-07-2019 - |
Frage
Ich habe eine Tabelle der Punkte, die jeweils mit einem Namen, Breite, Länge, und einem Bereich Code. Was ich möchte, zu tun ist, eine Aggregation durchzuführen (das heißt eine „Gruppe von“ -Klausel) und zurück ein Polygon alle Punkte für einen bestimmten Bereich Code enthält.
Ich bin zu kämpfen, ein wenig auch zu finden, wenn es ein wenn auch in Aggregationen für die Geographie-Datentypen aufgebaut ist, allein lassen Sie mir das Begrenzungs Polygon geben
Aus Gründen der Argumentation, nehme ich habe eine 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)
Lösung
Zwar gibt es keine integrierte Möglichkeit, dies zu tun, gibt es Aggregate als Teil der Sql Spatial Werkzeuge CodePlex-Paket. Je nach genau das, was Sie wollen, können Sie sich mit der entweder die Bounding Box Aggregate oder die Union Aggregate durch einen Aufruf Konvexe Hülle gefolgt interessiert sein, das Minimum Polygon zu erhalten statt einer Box.
Andere Tipps
Für die Vorteile eines jeden, der hier angekommen und will den Code, den Sie mit (ehrfürchtigen) bekommen, um zu sehen Sql räumliche Werkzeuge :
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 können das Ergebnis in GeoQuery2008 .