Mit Räumliche Funktionen SQL2008: Wie kann ich erzeugen ein Polygon die Ergebnisse einer aggreation enthalten

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

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)

War es hilfreich?

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 .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top