我有一张桌子(TEST),其中包含一些事件,活动日期和此次活动的人数。
Dat | Event | Qty
2012-30-08 SomeEvent1 5
2012-09-06 SomeEvent2 10
2012-09-18 SomeEvent3 7
2012-09-29 SomeEvent4 1
2012-10-03 SomeEvent5 2
我已经构建了该表内容的图形表示。在X轴上,我显示了我的时间轴 - 从第一个日期到最后一个日期。 X轴上的圆圈表示当前事件的人数(圆的半径=人的数量)。 这是我的查询和空间结果:
DECLARE @FIRST_DATE DATE
DECLARE @LAST_DATE DATE
SET @FIRST_DATE = (SELECT MAX([Date]) FROM [DATABSE_TEST].dbo.TEST)
SET @LAST_DATE = (SELECT MIN([Date]) FROM [DATABSE_TEST].dbo.TEST)
--TIMELINE Build my timeline
DECLARE @SQL_TIMELINE VARCHAR(MAX)
SET @SQL_TIMELINE = 'SELECT geometry::STPolyFromText(''POLYGON((0 -0.1, 0 0.1,' + CAST(DATEDIFF(DD, @LAST_DATE, @FIRST_DATE) AS VARCHAR) + ' 0.1, ' + CAST(DATEDIFF(DD, @LAST_DATE, @FIRST_DATE) AS VARCHAR) + ' -0.1, 0 -0.1))'', 0) AS DRAWING'
--CIRCLES
DECLARE @SQL_CIRCLES VARCHAR(MAX) = ''
--POINTS Array of points
DECLARE @POINTS VARCHAR(MAX)
--DATE Date of current event
DECLARE @DATE DATE
--RADIUS = qty of peoples
DECLARE @RADIUS FLOAT
--X,Y coordinates of current circle
DECLARE @X_COORD FLOAT
DECLARE @Y_COORD FLOAT
DECLARE @DEGREE INT = 0
DECLARE CUR CURSOR LOCAL FOR SELECT [Date], Qty FROM [DATABSE_TEST].dbo.TEST
OPEN CUR
FETCH NEXT FROM CUR INTO @DATE, @RADIUS
WHILE @@FETCH_STATUS = 0
BEGIN
SET @POINTS = ''
SET @DEGREE = 0
WHILE (@DEGREE <= 360)
BEGIN
--Find circle coordinates
SET @X_COORD = DATEDIFF(DD, @LAST_DATE, @DATE) + @RADIUS * COS(@DEGREE*PI()/180)
SET @Y_COORD = 0 + @RADIUS * SIN(@DEGREE*PI()/180)
--Build poinrs array
SET @POINTS = @POINTS + CAST(@X_COORD AS VARCHAR) + ' ' + CAST(@Y_COORD AS VARCHAR) + ', '
SET @DEGREE = @DEGREE + 10
END
--Build query: points coordinates + last point SUBSTRING(@POINTS, 0, CHARINDEX(',', @POINTS)) - tha same as first point in @POINTS to close POLYGON
SET @SQL_CIRCLES = @SQL_CIRCLES + ' UNION ALL SELECT geometry::STPolyFromText(''POLYGON((' + @POINTS + SUBSTRING(@POINTS, 0, CHARINDEX(',', @POINTS)) + '))'',0) AS DRAWING'
FETCH NEXT FROM CUR INTO @DATE, @RADIUS
END
CLOSE CUR
DEALLOCATE CUR
--Execute query
EXEC(@SQL_TIMELINE + @SQL_CIRCLES)
如何将空间结果传递给C#应用程序?我想在我的应用程序中显示此图像,但不确定如何正确传输它。
答案 0 :(得分:3)
如果您使用的是.Net framework 4.5,那么它的类型DbGeometry和DbGeography可用于保存空间数据。这些课程可在System.Data.Spatial Namespace下找到。
但是如果您正在使用.Net框架的早期版本,那么您可以从SQL服务器AS_Text
获取几何,这将返回对象的WKT,可以在您的代码中使用。