مع وظائف المكانية SQL2008، كيف يمكنني توليد مضلع تحتوي على نتائج لaggreation
-
06-07-2019 - |
سؤال
ولقد حصلت على الجدول من النقاط، ولكل منها اسما، وخطوط العرض والطول، ورمز المنطقة. ما أود القيام به هو إجراء التجميع (أي "مجموعة من" شرط) والعودة مضلع تحتوي على جميع النقاط لرمز المنطقة بشكل خاص.
وأنا أعاني قليلا لتجد حتى إذا كان هناك أي بني في تجمعات لأنواع البيانات الجغرافية الرغم من ذلك، ناهيك عن أن تعطيني المضلع المحيط
لجدلا، افترض لقد جدول الذي يبدو قليلا مثل:
+---------+------+---------+---------+ | 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 | +---------+------+---------+---------+
و(في الواقع، وأصغر مساحة له 57 نقطة، وأكبر 626)
المحلول
وبينما لا توجد وسيلة المدمج في القيام بذلك، وهناك المجاميع المتاحة كجزء من SQL المكانية حزمة كود بلاكس. اعتمادا على ما تريده بالضبط، قد تكون مهتمة في استخدام أي من المربع المحيط الحصى أو الحصى الاتحاد تليها دعوة للانغلاق محدب للحصول على الحد الأدنى للمضلع بدلا من مربع.
نصائح أخرى
لفوائد لمن وصلت هنا ويريد أن يرى رمز تحصل مع (رهيبة) SQL أدوات المكانية :
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
ويمكنك عرض النتيجة في GeoQuery2008 .