Avec les fonctions spatiales SQL2008, comment puis-je générer un polygone contenant les résultats d'une agrégation

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

Question

J'ai un tableau de points, chacun avec un nom, une latitude, une longitude et un indicatif régional. Ce que j'aimerais faire, c'est effectuer une agrégation (c'est-à-dire une clause "group by by") et renvoyer un polygone contenant tous les points d'un indicatif régional particulier.

J'ai du mal à trouver même s'il existe des agrégations intégrées pour les types de données géographiques, et encore moins à me donner le polygone englobant

Par souci d'argumentation, supposons que j'ai un tableau qui ressemble un peu à:

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

(En réalité, la plus petite surface compte 57 points et la plus grande 626)

Était-ce utile?

La solution

Bien qu’il n’existe pas de méthode intégrée, des agrégats sont disponibles dans les Outils spatiaux SQL. package CodePlex. En fonction de ce que vous voulez, vous voudrez peut-être utiliser l’agrégat Bounding Box ou l’agrégat Union, suivi d’un appel à ConvexHull pour obtenir le polygone minimum au lieu d’un encadré.

Autres conseils

Pour le bénéfice de tous ceux qui sont arrivés ici et veulent voir le code que vous obtenez avec (le génial) Sql Outils spatiaux :

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

Vous pouvez afficher le résultat dans GeoQuery2008 .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top