{"id":1084,"date":"2010-05-14T08:47:00","date_gmt":"2010-05-14T12:47:00","guid":{"rendered":""},"modified":"2013-11-17T12:29:05","modified_gmt":"2013-11-17T04:29:05","slug":"sql-server-2008%e7%a9%ba%e9%97%b4%e6%95%b0%e6%8d%ae%e5%ba%93-%e5%ba%94%e7%94%a8%e7%a8%8b%e5%ba%8f%e5%bc%80%e5%8f%91%e6%bc%94%e7%bb%83","status":"publish","type":"post","link":"https:\/\/kyle.ai\/blog\/1084.html","title":{"rendered":"SQL Server 2008\u7a7a\u95f4\u6570\u636e\u5e93 \u5e94\u7528\u7a0b\u5e8f\u5f00\u53d1\u6f14\u7ec3"},"content":{"rendered":"<p>\u6458\u8981 \uff1aSQL Server 2008\u5728\u7a7a\u95f4\u6570\u636e\u652f\u6301\u4e0a\u63d0\u4f9b\u4e86\u8bb8\u591a\u5f3a\u5927\u7684\u529f\u80fd\uff0c\u4f7f\u7528\u5176\u63d0\u4f9b\u7684\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u5bf9\u8c61\uff0c\u5229\u7528\u5f3a\u5927\u7684\u5f00\u53d1\u5de5\u5177Visual Studio\u5f00\u53d1\u5de5\u5177\u57fa\u4e8e.NET\u5e73\u53f0 ,\u4f7f\u7528 \u73b0\u4ee3\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00C\u53ef\u5feb\u901f\u7684\u5f00\u53d1\u51fa\u64cd\u63a7\u7a7a\u95f4\u6570\u636e\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u672c\u6587\u901a\u8fc7\u4f7f\u7528C#\u5f00\u53d1\u4e00\u4e2a\u57fa\u4e8eSQL Server2008\u521b\u5efa\u3001\u64cd\u63a7\u7a7a\u95f4\u6570\u636e\u7684GDI+\u56fe\u5f62\u5e94\u7528\u7a0b\u5e8f\uff0c\u4ecb\u7ecdSQL Server 2008\u7a7a\u95f4\u6570\u636e\u5e93\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1 \u3002 <\/p>\n<p>\u5173\u952e\u8bcd\uff1aSQL Server\u7a7a\u95f4\u6570\u636e\u5e93<\/p>\n<p>1.  \u5f15\u8a00 <\/p>\n<p>\u5730\u7406\u4fe1\u606f\u7cfb\u7edf(GIS)\u5177\u6709\u5f3a\u5927\u7684\u5730\u56fe\u5236\u56fe\u3001\u7a7a\u95f4\u5206\u6790\u529f\u80fd\uff0c\u5176\u76ee\u7684\u662f\u63d0\u4f9b\u4e00\u4e2a\u7a7a\u95f4\u6846\u67b6\uff0c\u4ee5\u652f\u6301\u5730\u7403\u8d44\u6e90\u7684\u5408\u7406\u5229\u7528\u51b3\u7b56\u548c\u7ba1\u7406\u4eba\u5de5\u73af\u5883\u3002\u968f\u7740\u6570\u636e\u5e93\u6280\u672f\u7684\u53d1\u5c55\uff0c\u5bf9\u4e8e\u6d77\u91cf\u7a7a\u95f4\u6570\u636e\u7684\u5b58\u50a8\u548c\u7ba1\u7406\uff0c\u90fd\u5df2\u7ecf\u4ea4\u7531\u6570\u636e\u5e93\u7cfb\u7edf\u6765\u5b8c\u6210\u3002 \u7531\u4e8e\u7a7a\u95f4\u6570\u636e\u5177\u6709\u7a7a\u95f4\u4f4d\u7f6e\u3001\u975e\u7ed3\u6784\u5316\u3001\u7a7a\u95f4\u5173\u7cfb\u3001\u5206\u7c7b\u7f16\u7801\u3001\u6d77\u91cf\u6570\u636e\u7b49\u7279\u5f81,\u4e00\u822c\u7684 \u5173\u7cfb \u6570\u636e\u5e93\u7ba1\u7406\u7cfb\u7edf\u96be\u4ee5\u6ee1\u8db3\u8981\u6c42\u3002 \u4e3a\u6ee1\u8db3\u7a7a\u95f4\u6d77\u91cf\u6570\u636e\u5b58\u50a8\u3001\u7ba1\u7406\u7684\u9700\u6c42,\u5404\u5927 \u6570\u636e\u5e93\u5382\u5546\u501f\u9274\u9762\u5411\u5bf9\u8c61\u6280\u672f,\u53d1\u5c55\u4e86\u5bf9\u8c61\u5173\u7cfb\u578b\u6570\u636e\u5e93\u7ba1\u7406\u7cfb\u7edf \uff0c \u589e\u52a0\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u53ca\u76f8\u5173\u51fd\u6570,\u4ece\u800c\u5c06\u7a7a\u95f4\u6570\u636e \u7684\u5b58\u50a8\u3001\u67e5\u8be2\u548c\u7d22\u5f15 \u4ece \u4f20\u7edfGIS\u8f6f\u4ef6\u5382\u5546\u7684 \u7a7a\u95f4\u6570\u636e\u5f15\u64ce\u4e2d\u95f4\u4ef6\u8f6c\u79fb\u5230\u4e86\u6570\u636e\u5e93\u7ba1\u7406\u7cfb\u7edf\u4e2d, \u8ba9\u7528 \u6237 \u53ef\u4ee5 \u4f7f\u7528 \u6269\u5145\u7684 \u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u548c\u51fd\u6570\u7684\u6807\u51c6\u6269\u5c55\u578bSQL\u8bed\u8a00\u6765\u64cd\u4f5c\u7a7a\u95f4\u6570\u636e\u3002 <\/p>\n<p>SQL Server 2008\u4f5c\u4e3a\u5fae\u8f6f\u516c\u53f8\u7684\u65b0\u4e00\u4ee3\u667a\u80fd\u5316\u6570\u636e\u5b58\u50a8\u5e73\u53f0\uff0c\u63d0\u4f9b\u4e86\u5bf9\u7a7a\u95f4\u6570\u636e\u5b58\u50a8\u3001\u67e5\u8be2\u3001\u7d22\u5f15\u7684\u539f\u751f\u652f\u6301\uff0c\u5728\u5176\u5f3a\u5927\u7684.NET\u5e73\u53f0\u652f\u6301\u4e0b\uff0c\u53ef\u4ee5\u5f88\u5bb9\u6613\u7684\u5f00\u53d1\u64cd\u63a7\u7a7a\u95f4\u6570\u636e\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u800c\u514d\u8d39\u7684\u7684SQL Server 2008 Express\u4e2d\u4f9d\u7136\u63d0\u4f9b\u4e86\u7a7a\u95f4\u6570\u636e\u6269\u5c55\u652f\u6301\uff0c\u8fd9\u5f88\u5927\u7a0b\u5ea6\u4e0a\u65b9\u4fbf\u4e86\u57fa\u4e8eWindows\u5e73\u53f0\u684c\u9762\u7a7a\u95f4\u6570\u636e\u5e94\u7528\u7a0b\u5e8f\u7684\u5f00\u53d1\u3002\u4ee5\u4e0b\u7b14\u8005\u5c06\u4e00\u6b65\u4e00\u6b65\u4f7f\u7528C#\u548cSQL Server 2008 CTP\u7248\uff08\u793e\u533a\u6280\u672f\u7248)\u5f00\u53d1\u4e00\u4e2a\u7b80\u5355\u7684\u64cd\u63a7\u7a7a\u95f4\u6570\u636e\u7684\u5e94\u7528\u7a0b\u5e8f\u3002 <\/p>\n<p>2.  \u7a0b\u5e8f\u529f\u80fd\u63cf\u8ff0 <\/p>\n<p>\u7a0b\u5e8f\u76ee\u6807\u529f\u80fd\u4e3b\u8981\u5206\u4e3a\u4e09\u90e8\u5206\uff1a <\/p>\n<p>(1) \u521b\u5efa\u4e09\u4e2a\u5b58\u50a8\u70b9\u3001\u7ebf\u3001\u9762\u7684\u6570\u636e\u5e93\u8868\u5e76\u5728\u76f8\u5e94\u7684\u8868\u4e2d\u6dfb\u52a0\u7a7a\u95f4\u6570\u636e\uff1b <\/p>\n<p>(2) \u7ed8\u5236\u6570\u636e\u5e93\u4e2d\u6240\u6709\u56fe\u5f62\uff1b <\/p>\n<p>(3) \u7ed8\u5236\u6307\u5b9a\u77e9\u5f62\u8303\u56f4\u5185\u7684\u56fe\u5f62\u3002 <\/p>\n<p>3.  \u521b\u5efa\u9879\u76ee\u5e76\u5b9e\u73b0\u7528\u6237\u754c\u9762 <\/p>\n<p>\u9996\u5148\uff0c\u4f7f\u7528SQL Server 2008\u521b\u5efa\u4e00\u4e2a\u540d\u4e3aSQLSpatial\u7684\u6570\u636e\u5e93\uff0c\u7528Visual C2005\u521b\u5efa\u4e00\u4e2a\u540d\u4e3aSQLSpatial\u7684Windows\u7a97\u4f53\u5e94\u7528\u7a0b\u5e8f\u9879\u76ee\u3002\u5c06Form1\u7684\u7a97\u4f53\u6807\u9898\u6539\u4e3a\u201cSQL Server 2008\u7a7a\u95f4\u6570\u636e\u5e93\u793a\u4f8b\u201d\uff0c\u4fee\u6539\u7a97\u4f53\u80cc\u666f\u8272\u4e3a\u767d\u8272\uff0c\u5e76\u4e3a\u5176\u6dfb\u52a0\u83dc\u5355\u3002\u5b8c\u6210\u540e\u7684\u7528\u6237\u754c\u9762\u5982\u56fe1\u6240\u793a\u3002<br \/>\n<img decoding=\"async\" src=\".\/wp-content\/uploads\/hibaidu\/71007ecef800de07f9dc6124.jpg\" alt=\"\" border=\"0\" \/><\/p>\n<p>4.  \u7f16\u5199\u4ee3\u7801 <\/p>\n<p>(1)  \u5728Visual Studio\u7684\u89e3\u51b3\u65b9\u6848\u7ba1\u7406\u5668\u4e2d\u53f3\u51fbSQLSpatial\u9879\u76ee\u6dfb\u52a0\u7a0b\u5e8f\u96c6 Microsoft.SqlServer.Types.dll \u7684\u5f15\u7528\uff0c\u8fd9\u662f\u5bf9\u7a7a\u95f4\u6570\u636e\u7c7b\u578bgeometry\u548cgeography\u7684\u652f\u6301\u5e93\u3002\u7a0b\u5e8f\u96c6\u4f4d\u4e8eSQL Server 2008\u5b89\u88c5\u5b9e\u4f8b\u7684MSSQL\\Binn\u76ee\u5f55\u4e0b\uff0c\u4f8b\u5982\u7b14\u8005\u7684\u76ee\u5f55\u4e3aC:\\Program Files\\Microsoft SQL Server\\MSSQL10.MSSQLSERVER2008\\MSSQL\\Binn\u3002 <\/p>\n<p>(2)  \u5728\u7a0b\u5e8fForm1\u7a97\u4f53\u7c7b\u7684\u4ee3\u7801\u4e2d\u52a0\u5165\u4ee5\u4e0b\u547d\u540d\u7a7a\u95f4\u7684\u5f15\u7528\u3002<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nusing  System.Data.SqlClient;       \/\/\u4f7f\u7528SQL Server .NET\u63d0\u4f9b\u8005\u547d\u540d\u7a7a\u95f4 \r\n\r\nusing  Microsoft.SqlServer.Types;     \/\/\u5f15\u7528\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u5bf9\u8c61\u547d\u540d\u7a7a\u95f4 \r\n\r\nusing  System.Drawing.Drawing2D;    \/\/\u5f15\u7528GDI+\u7ed8\u56fe\u7c7b\u547d\u540d\u7a7a\u95f4 \r\n<\/pre>\n<p>(3)  \u53cc\u51fb\u5404\u4e2a\u83dc\u5355\u6dfb\u52a0\u6d88\u606f\u54cd\u5e94\u51fd\u6570\u5e76\u8f93\u5165\u4ee3\u7801\u3002 <\/p>\n<p>A\u3001 \u521b\u5efaPointTable\u8868\u5e76\u6dfb\u52a0\u70b9\u6570\u636e\u7684\u51fd\u6570\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n     \/\/\u521b\u5efa\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32 \r\n\r\n             SqlConnectionStringBuilder  conBuilder =  new   SqlConnectionStringBuilder (); \r\n\r\n            conBuilder.DataSource =  @&quot;KFB-AS\\SQLSERVER2008&quot; ;       \/\/ \u5ba2\u6237\u670d\u52a1\u5668\u540d\u79f0 \r\n\r\n            conBuilder.InitialCatalog =  &quot;SQLSpatial&quot; ;             \/\/ \u6570\u636e\u5e93\u540d\u79f0 \r\n\r\n            conBuilder.IntegratedSecurity =  true ; \r\n\r\n             try \r\n\r\n            {     using  ( SqlConnection  con =  new   SqlConnection (conBuilder.ConnectionString)) \r\n\r\n                 {    \/\/\u521b\u5efaPointTable\u8868 \r\n\r\n                     string  cmdStr =  &quot;IF OBJECT_ID ('dbo.PointTable','U') IS NOT NULL DROP TABLE dbo.PointTable&quot; ; \r\n\r\n                     SqlCommand  cmd =  new   SqlCommand (cmdStr, con); \r\n\r\n                    con.Open(); \r\n\r\n                    cmd.ExecuteNonQuery(); \r\n\r\n                    cmd.CommandText  =  &quot;CREATE TABLE PointTable(ID int IDENTITY(1,1), Geometry geometry)&quot; ; \r\n\r\n                    cmd.ExecuteNonQuery(); \r\n\r\n                     \/\/\u6dfb\u52a0\u70b9\u6570\u636e \r\n\r\n                     SqlDataAdapter  adapter =  new   SqlDataAdapter ( &quot;SELECT * FROM PointTable&quot; , con); \r\n\r\n                     SqlCommandBuilder  cmdBuilder =  new   SqlCommandBuilder (adapter); \r\n\r\n                     DataSet  ds =  new   DataSet (); \r\n\r\n                    adapter.Fill(ds,  &quot;PointTable&quot; ); \r\n\r\n                     for  ( int  i = 0; i &lt; 1000; i += 10) \r\n\r\n                     {    string  wkt =  String .Format( &quot;POINT({0} {1})&quot; , i + 100, i + 20); \r\n\r\n                         SqlGeometry  g =  new   SqlGeometry (); \r\n\r\n                        g =  SqlGeometry .Parse(wkt); \r\n\r\n                         DataRow  drow = ds.Tables&#x5B; &quot;PointTable&quot; ].NewRow(); \r\n\r\n                        drow&#x5B; &quot;Geometry&quot; ] = g; \r\n\r\n                        ds.Tables&#x5B; &quot;PointTable&quot; ].Rows.Add(drow); \r\n\r\n                    } \r\n\r\n                    adapter.Update(ds,  &quot;PointTable&quot; ); \r\n\r\n                } \r\n\r\n                 MessageBox .Show( &quot;\u6570\u636e\u5e93PointTable\u4e2d\u5df2\u7ecf\u6210\u529f\u6dfb\u52a0\u70b9\u6570\u636e!&quot; ); \r\n\r\n            } \r\n\r\n             catch  ( Exception  ex) \r\n\r\n            {   MessageBox .Show(ex.Message); \r\n\r\n    } \r\n<\/pre>\n<p>B\u3001 \u521b\u5efaLineTable\u8868\u5e76\u6dfb\u52a0\u7ebf\u6570\u636e\u7684\u4e3b\u8981\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n      \/\/\u521b\u5efaLineTable\u8868 \r\n\r\n                     string  cmdStr =  &quot;IF OBJECT_ID ('dbo.LineTable','U') IS NOT NULL DROP TABLE dbo.LineTable&quot; ; \r\n\r\n                     SqlCommand  cmd =  new   SqlCommand (cmdStr, con); \r\n\r\n                    con.Open(); \r\n\r\n                    cmd.ExecuteNonQuery(); \r\n\r\n                    cmd.CommandText =  &quot;CREATE TABLE LineTable(ID int IDENTITY(1,1), Geometry geometry)&quot; ; \r\n\r\n                    cmd.ExecuteNonQuery(); \r\n\r\n                     \/\/\u6dfb\u52a0\u7ebf\u6570\u636e \r\n\r\n                     SqlDataAdapter  adapter =  new   SqlDataAdapter ( &quot;SELECT * FROM LineTable&quot; , con); \r\n\r\n                     SqlCommandBuilder  cmdBuilder =  new   SqlCommandBuilder (adapter); \r\n\r\n                     DataSet  ds =  new   DataSet (); \r\n\r\n                    adapter.Fill(ds,  &quot;LineTable&quot; ); \r\n\r\n                     for  ( int  i = 0; i &lt; 1000; i += 50) \r\n\r\n                     {   string  wkt =  String .Format( &quot;LINESTRING({0} {1},{2} {3})&quot; , 20, i, 300, i); \r\n\r\n                         SqlGeometry  g =  new   SqlGeometry (); \r\n\r\n                        g =  SqlGeometry .Parse(wkt); \r\n\r\n                         DataRow  drow = ds.Tables&#x5B; &quot;LineTable&quot; ].NewRow(); \r\n\r\n                        drow&#x5B; &quot;Geometry&quot; ] = g; \r\n\r\n                        ds.Tables&#x5B; &quot;LineTable&quot; ].Rows.Add(drow); \r\n\r\n                    } \r\n\r\n                    adapter.Update(ds,  &quot;LineTable&quot; );     \r\n<\/pre>\n<p>C\u3001 \u521b\u5efaPolygonTable\u8868\u5e76\u6dfb\u52a0\u591a\u8fb9\u5f62\u6570\u636e\u7684\u4e3b\u8981\u4ee3\u7801\u5982\u4e0b\uff1a<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\n            string  cmdStr = &quot;IF OBJECT_ID ('dbo.PolygonTable','U') IS NOT NULL DROP TABLE dbo.PolygonTable&quot; ; \r\n\r\n                     SqlCommand  cmd =  new   SqlCommand (cmdStr, con); \r\n\r\n                    con.Open(); \r\n\r\n                    cmd.ExecuteNonQuery(); \r\n\r\n                    cmd.CommandText =  &quot;CREATE TABLE PolygonTable(ID int IDENTITY(1,1), Geometry geometry)&quot; ; \r\n\r\n                    cmd.ExecuteNonQuery(); \r\n\r\n                     \/\/\u6dfb\u52a0\u591a\u8fb9\u5f62\u6570\u636e \r\n\r\n                     SqlDataAdapter  adapter =  new   SqlDataAdapter ( &quot;SELECT * FROM PolygonTable&quot; , con); \r\n\r\n                     SqlCommandBuilder  cmdBuilder =  new   SqlCommandBuilder (adapter); \r\n\r\n                     DataSet  ds =  new   DataSet (); \r\n\r\n                    adapter.Fill(ds,  &quot;PolygonTable&quot; ); \r\n\r\n                     for  ( int  i = 0; i &lt; 1000; i += 60) \r\n\r\n                     {   string  wkt =  String .Format( &quot;POLYGON(({0} {1},{2} {3},{4} {5},{6} {7},{8} {9}))&quot; , i, i, i + 50, i, i + 50, i + 50, i, i + 50, i, i); \r\n\r\n                         SqlGeometry  g =  new   SqlGeometry (); \r\n\r\n                        g =  SqlGeometry .Parse(wkt); \r\n\r\n                         DataRow  drow = ds.Tables&#x5B; &quot;PolygonTable&quot; ].NewRow(); \r\n\r\n                        drow&#x5B; &quot;Geometry&quot; ] = g; \r\n\r\n                        ds.Tables&#x5B; &quot;PolygonTable&quot; ].Rows.Add(drow); \r\n\r\n                    } \r\n\r\n                    adapter.Update(ds,  &quot;PolygonTable&quot; ) ;    \r\n<\/pre>\n<p>\uff084\uff09 \u4e3aForm1\u7a97\u4f53\u7c7b\u6dfb\u52a0\u4e24\u4e2a\u79c1\u6709\u7ed8\u56fe\u51fd\u6570\u7528\u4e8e\u4f7f\u7528GDI+\u5728\u7a97\u54c1\u4e2d\u7ed8\u5236\u56fe\u5f62\uff1b<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\">\r\nprivate   void  DrawAllFeature( Graphics  gdi) \r\n\r\n           {       \r\n\r\n          \/\/ \u4ee3\u7801\u4e3aDrawSelect(Graphics gid)\u51fd\u6570\u4e2d\u53bb\u6389\u5e26\u4e0b\u5212\u7ebf\u90e8\u5206\u7684\u4ee3\u7801 \r\n\r\n               } \r\n\r\n          private   void  DrawSelect( Graphics  gdi) \r\n\r\n           {   \/\/\u521b\u5efa\u6570\u636e\u5e93\u8fde\u63a5\u5b57\u7b26\u4e32 \r\n\r\n             SqlConnectionStringBuilder  conBuilder =  new   SqlConnectionStringBuilder (); \r\n\r\n            conBuilder.DataSource =  @&quot;KFB-AS\\SQLSERVER2008&quot; ;         \/\/ \u5ba2\u6237\u670d\u52a1\u5668\u540d\u79f0 \r\n\r\n            conBuilder.InitialCatalog =  &quot;SQLSpatial&quot; ;               \/\/ \u6570\u636e\u5e93\u540d\u79f0 \r\n\r\n            conBuilder.IntegratedSecurity =  true ; \r\n\r\n             \/\/\u521b\u5efa\u7ed8\u56fe\u533a\u57df\u5bf9\u8c61 \r\n\r\n              string  wkt =  &quot;POLYGON((60 60,200 60,200 200,60 200,60 60))&quot; ; \r\n\r\n             SqlGeometry  gRect =  SqlGeometry .Parse(wkt); \r\n\r\n             try \r\n\r\n            {   using  ( SqlConnection  con =  new   SqlConnection (conBuilder.ConnectionString)) \r\n\r\n                 {     con.Open(); \r\n\r\n                     \/\/\u7ed8\u591a\u8fb9\u5f62\u6570\u636e \r\n\r\n                   SqlDataAdapter  adPolygon =  new   SqlDataAdapter ( &quot;SELECT * FROM PolygonTable&quot; , con); \r\n\r\n                     SqlCommandBuilder  cmdBuilderPolygon =  new   SqlCommandBuilder (adPolygon); \r\n\r\n                     DataSet  ds =  new   DataSet (); \r\n\r\n                    adPolygon.Fill(ds,  &quot;PolygonTable&quot; ); \r\n\r\n                     foreach  ( DataRow  row  in  ds.Tables&#x5B; &quot;PolygonTable&quot; ].Rows) \r\n\r\n                    {   SqlGeometry  g = ( SqlGeometry )row&#x5B; &quot;Geometry&quot; ]; \r\n\r\n                         \/\/\u5982\u679c\u88ab\u7ed8\u56fe\u533a\u57df\u5305\u542b\u6216\u4e0e\u7ed8\u56fe\u533a\u57df\u76f8\u4ea4\u5219\u7ed8\u56fe\u5f62 \r\n\r\n                         if  (gRect.STIntersects(g) || gRect.STContains(g)) \r\n\r\n                        {   int  pointSum = ( int )g.STNumPoints(); \r\n\r\n                             PointF &#x5B;] points =  new   PointF &#x5B;pointSum]; \r\n\r\n                             byte &#x5B;] pointTypes =  new   byte &#x5B;pointSum]; \r\n\r\n                             for  ( int  i = 0; i &lt; pointSum; i++) \r\n\r\n                            {   points&#x5B;i].X = ( float )g.STPointN(i + 1).STX; \r\n\r\n                                points&#x5B;i].Y = ( float )g.STPointN(i + 1).STY; \r\n\r\n                                pointTypes&#x5B;i] = ( byte ) PathPointType .Line; \r\n\r\n                            } \r\n\r\n                             GraphicsPath  path =  new   GraphicsPath (points, pointTypes); \r\n\r\n                            gdi.FillPath( Brushes .Red, path); \r\n\r\n                        } \r\n\r\n                    } \r\n\r\n                     \/\/\u7ed8\u7ebf\u6570\u636e \r\n\r\n                     SqlDataAdapter  adLine =  new   SqlDataAdapter ( &quot;SELECT * FROM LineTable&quot; , con); \r\n\r\n                     SqlCommandBuilder  cmdBuilderLine =  new   SqlCommandBuilder (adLine); \r\n\r\n                    adLine.Fill(ds,  &quot;LineTable&quot; ); \r\n\r\n                     using  ( Pen  bluePen =  new   Pen ( Color .Blue, 2)) \r\n\r\n                    {   foreach  ( DataRow  row  in  ds.Tables&#x5B; &quot;LineTable&quot; ].Rows) \r\n\r\n                        {   SqlGeometry  g = ( SqlGeometry )row&#x5B; &quot;Geometry&quot; ]; \r\n\r\n                             \/\/\u5982\u679c\u88ab\u7ed8\u56fe\u533a\u57df\u5305\u542b\u6216\u4e0e\u7ed8\u56fe\u533a\u57df\u76f8\u4ea4\u5219\u7ed8\u56fe\u5f62 \r\n\r\n                             if  (gRect.STIntersects(g) || gRect.STContains(g)) \r\n\r\n                            {gdi.DrawLine(bluePen,  new   PointF (( float )g.STPointN(1).STX,   ( float )g.STPointN(1).STY),   new   PointF (( float )g.STPointN(2).STX,    ( float )g.STPointN(2).STY)); \r\n\r\n                            } \r\n\r\n                        } \r\n\r\n                    } \r\n\r\n                     \/\/\u7ed8\u70b9\u6570\u636e \r\n\r\n                     SqlDataAdapter  adPoint =  new   SqlDataAdapter ( &quot;SELECT * FROM PointTable&quot; , con); \r\n\r\n                    adPoint.Fill(ds,  &quot;PointTable&quot; ); \r\n\r\n                     using  ( Pen  greenPen =  new   Pen ( Color .Green, 2)) \r\n\r\n                    {   foreach  ( DataRow  row  in  ds.Tables&#x5B; &quot;PointTable&quot; ].Rows) \r\n\r\n                        {   SqlGeometry  g = ( SqlGeometry )row&#x5B; &quot;Geometry&quot; ]; \r\n\r\n                             if  (gRect.STIntersects(g) || gRect.STContains(g)) \r\n\r\n                            {   \/\/ \u7ed8\u4e00\u4e2a\u534a\u5f84\u4e3a1\u7684\u5706\u8868\u793a\u70b9 \r\n\r\n        gdi.DrawEllipse(greenPen, ( float )g.STPointN(1).STX - 1, ( float )g.STPointN(1).STY - 1, 2, 2); \r\n\r\n                            } \r\n\r\n                        } \r\n\r\n                    } \r\n\r\n                } \r\n\r\n            } \r\n\r\n             catch  ( Exception  e) \r\n\r\n             {   essageBox .Show(e.Message);   } \r\n\r\n  } \r\n<\/pre>\n<p>(5) \u6dfb\u52a0\u7ed8\u56fe\u6d88\u606f\u54cd\u5e94\u4ee3\u7801 <\/p>\n<p>A\u3001 \u4e3aForm1\u6dfb\u52a0\u4e00\u4e2a\u79c1\u6709\u5b57\u6bb5\u7528\u4e8e\u63a7\u5236\u7ed8\u5236\u6240\u6709\u56fe\u5f62\u8fd8\u662f\u7ed8\u5236\u77e9\u5f62\u8303\u56f4\u56fe\u5f62;<\/p>\n<p>private   int  drwType=-1; <\/p>\n<p>B\u3001\u4e3aForm1\u6dfb\u52a0OnPaint\u6d88\u606f\u54cd\u5e94\u51fd\u6570\u5e76\u6dfb\u52a0\u4e0b\u5217\u4ee3\u7801<\/p>\n<pre class=\"brush: csharp; title: ; notranslate\" title=\"\"> \r\n  if (drwType==1) DrawAllFeature(e.Graphics); \r\n\r\n    else   if (drwType==2) \r\n\r\n    DrawSelect(e.Graphics); \r\n\r\n<\/pre>\n<p>C\u3001\u5728\u83dc\u5355\u201c\u7ed8\u6570\u636e\u5e93\u4e2d\u6240\u6709\u56fe\u5f62\u201d\u7684\u6d88\u606f\u54cd\u5e94\u51fd\u6570\u4e2d\u6dfb\u52a0\u5982\u4e0b\u4ee3\u7801\uff1a <\/p>\n<p>drwType=1;       <\/p>\n<p>this .Invalidate(); <\/p>\n<p>D\u3001\u5728\u83dc\u5355\u201c\u7ed860,60 200,200\u77e9\u5f62\u8303\u56f4\u5185\u7684\u56fe\u5f62\u201d\u7684\u6d88\u606f\u54cd\u5e94\u51fd\u6570\u4e2d\u6dfb\u52a0\u5982\u4e0b\u4ee3\u7801\uff1a <\/p>\n<p>drwType = 2 ;       <\/p>\n<p>this .Invalidate(); <\/p>\n<p>5. \u7a0b\u5e8f\u8fd0\u884c\u7ed3\u679c <\/p>\n<p>\u4f9d\u6b21\u70b9\u51fb\u83dc\u5355\u521b\u5efa\u70b9\u3001\u7ebf\u3001\u9762\u6570\u636e\uff0c\u7136\u540e\u6267\u884c\u201c \u7ed8\u6570\u636e\u5e93\u4e2d\u6240\u6709\u56fe\u5f62\u201d\u83dc\u5355\u540e\u7684\u8fd0\u884c\u7ed3\u679c\u5982\u56fe2\u6240\u793a\u3002\u6267\u884c\u201c\u7ed860,60 200,200\u77e9\u5f62\u8303\u56f4\u5185\u7684\u56fe\u5f62\u201d\u5c06\u7ed8\u5236\u5728\u77e9\u5f62(60,60 200,200)\u8303\u56f4\u5185\u7684\u56fe\u5f62\u6216\u4e0e\u8be5\u77e9\u5f62\u76f8\u4ea4\u7684\u56fe\u5f62\uff0c\u8fd0\u884c\u7ed3\u679c\u5982\u56fe3\u6240\u793a\u3002<\/p>\n<p><img decoding=\"async\" src=\".\/wp-content\/uploads\/hibaidu\/689f02f544658ad57709d725.jpg\" alt=\"\" border=\"0\" \/><br \/>\n\u56fe2.\u7ed8\u5236\u6240\u6709\u7684\u56fe\u5f62\u6570\u636e<\/p>\n<p><img decoding=\"async\" src=\".\/wp-content\/uploads\/hibaidu\/17fe7730f79df223eac4af26.jpg\" alt=\"\" border=\"0\" \/><br \/>\n\u56fe3. \u7ed8\u5236\u6307\u5b9a\u77e9\u5f62\u8303\u56f4\u7684\u56fe\u5f62\u6570\u636e <\/p>\n<p>6.\u5c0f\u7ed3 <\/p>\n<p>\u7a0b\u5e8f\u901a\u8fc7\u5f15\u5165 Microsoft.SqlServer.Types.dll \u7a0b\u5e8f\u96c6\uff0c\u4f7f\u7528geometry\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u7684\u5c01\u88c5\u7c7bSqlGeometry\u7684\u65b9\u6cd5\u6765\u5b8c\u6210\u7a7a\u95f4\u5bf9\u8c61\u7684\u521b\u5efa\u5e76\u5b58\u5165\u6570\u636e\u5e93\u4e2d\uff0c\u5728\u5224\u65ad\u56fe\u5f62\u662f\u5426\u7ed8\u5236\u65f6\u4f7f\u7528\u4e86SqlGeometry\u7c7b\u7684\u65b9\u6cd5\u5f88\u5bb9\u6613\u7684\u5b8c\u6210\uff0c\u6700\u540e\u5c06\u6570\u636e\u5e93\u4e2d\u7684\u56fe\u5f62\u8bfb\u51fa\u5e76\u4f7f\u7528GDI+\u5b8c\u6210\u56fe\u5f62\u7ed8\u5236\u3002SQL Server 2008\u5728\u7a7a\u95f4\u6570\u636e\u652f\u6301\u4e0a\u63d0\u4f9b\u4e86\u8bb8\u591a\u5f3a\u5927\u7684\u529f\u80fd\uff0c\u4f7f\u7528SQL Server 2008\u63d0\u4f9b\u7684\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u5bf9\u8c61\uff0c\u5229\u7528\u5f3a\u5927\u7684\u5f00\u53d1\u5de5\u5177Visual Studio\u5f00\u53d1\u5de5\u5177\u57fa\u4e8e.NET\u5e73\u53f0\u53ca\u73b0\u4ee3\u7684\u9762\u5411\u5bf9\u8c61\u7f16\u7a0b\u8bed\u8a00C#\u53ef\u5feb\u901f\u7684\u5f00\u53d1\u51fa\u64cd\u63a7\u7a7a\u95f4\u6570\u636e\u7684\u5e94\u7528\u7a0b\u5e8f\u3002\u672c\u6587\u610f\u5728\u629b\u7816\u5f15\u7389\uff0c\u6b20\u59a5\u4e4b\u5904\uff0c\u656c\u8bf7\u6307\u6b63\u3002 <\/p>\n<p>\u53c2\u8003\u6587\u732e\uff1a <\/p>\n<p>[1]Visual C#2005\u6587\u4ef6IO\u4e0e\u6570\u636e\u5b58\u53d6\u79d8\u8bc0\u2014\u2014\u7ae0\u7acb\u6c11\u7814\u7a76\u5ba4 \u8457 <\/p>\n<p>[2]SQL Server 2005\u6570\u636e\u5e93\u5f00\u53d1\u5b9e\u6218\u2014\u2014\u7ae0\u7acb\u6c11\u7814\u7a76\u5ba4\u8457 <\/p>\n<p>[3]GDI+\u56fe\u5f62\u7a0b\u5e8f\u8bbe\u8ba1\u2014\u2014Mahesh Chand \u8457 <\/p>\n<p>[4]\u4e3a\u6211\u4eec\u7684\u4e16\u754c\u5efa\u6a21-ESRI\u5730\u7406\u6570\u636e\u5e93\u8bbe\u8ba1\u6307\u5357\u2014\u2014Michael Zeiler\u8457<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6458\u8981 \uff1aSQL Server 2008\u5728\u7a7a\u95f4\u6570\u636e\u652f\u6301\u4e0a\u63d0\u4f9b\u4e86\u8bb8\u591a\u5f3a\u5927\u7684\u529f\u80fd\uff0c\u4f7f\u7528\u5176\u63d0\u4f9b\u7684\u7a7a\u95f4\u6570\u636e\u7c7b\u578b\u5bf9\u8c61\uff0c\u5229\u7528 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-1084","post","type-post","status-publish","format-standard","hentry","category-code_related"],"_links":{"self":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/1084","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/comments?post=1084"}],"version-history":[{"count":2,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/1084\/revisions"}],"predecessor-version":[{"id":4584,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/posts\/1084\/revisions\/4584"}],"wp:attachment":[{"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/media?parent=1084"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/categories?post=1084"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kyle.ai\/blog\/wp-json\/wp\/v2\/tags?post=1084"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}