I've got a table of points, each with a name, latitude, longitude, and an area code. What I'd like to do is perform an aggregation (ie a "group by" clause) and return a polygon containing all the points for a particular area code.
I'm struggling a little to even find if there are any built in aggregations for the geography data types though, let alone to give me the bounding polygon
For the sake of argument, assume I've a table that looks a little like:
+---------+------+---------+---------+ | 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 reality, the smallest area has 57 points, and the largest 626)
While there is no built-in way to do this, there are Aggregates available as part of the Sql Spatial Tools CodePlex package. Depending on exactly what you want, you may be interested in using either the Bounding Box Aggregate or the Union Aggregate followed by a call to ConvexHull to get the minimum polygon instead of a box.
For the benefits of anyone who has arrived here and wants to see the code you get with (the awesome) 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
You can view the result in GeoQuery2008 .
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.