<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblogcasts.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Simons SQL Blog : c#, Ink</title><link>http://sqlblogcasts.com/blogs/simons/archive/tags/c_2300_/Ink/default.aspx</link><description>Tags: c#, Ink</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>SQL Server 2008 Spatial - Converting from Ink Strokes to geometries</title><link>http://sqlblogcasts.com/blogs/simons/archive/2008/01/04/SQL-Server-2008-Spatial---Converting-from-Ink-Strokes-to-geometries.aspx</link><pubDate>Fri, 04 Jan 2008 17:34:14 GMT</pubDate><guid isPermaLink="false">fa8c4e8e-46a3-4193-8264-2c1a9cb3475d:5979</guid><dc:creator>simonsabin</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://sqlblogcasts.com/blogs/simons/rsscomments.aspx?PostID=5979</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://sqlblogcasts.com/blogs/simons/commentapi.aspx?PostID=5979</wfw:comment><comments>http://sqlblogcasts.com/blogs/simons/archive/2008/01/04/SQL-Server-2008-Spatial---Converting-from-Ink-Strokes-to-geometries.aspx#comments</comments><description>
&lt;p&gt;The following snippet will convert an strok collected 
using an Ink Canvas in WPF to a LINSTRING geometry.&lt;/p&gt;
&lt;p&gt;The first uses the Well Known Text format WKT.&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;//Text representation of a line is LINESTRING (x1 y1,x2 y2 x3 
y3....)&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;//create an string array to store the points&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;string&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;[] 
pnts = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;[e.Stroke.StylusPoints.Count];&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;for&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt; 
(&lt;span style="COLOR:blue;"&gt;int&lt;/span&gt; i = 0; i &amp;lt; e.Stroke.StylusPoints.Count; 
i++)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;{&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="COLOR:#2b91af;"&gt;StylusPoint&lt;/span&gt; p = 
e.Stroke.StylusPoints[i];&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;pnts[i] = &lt;span style="COLOR:blue;"&gt;string&lt;/span&gt;.Format(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;{0} 
{1}&amp;quot;&lt;/span&gt;, p.X, p.Y);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;string&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt; 
geomText = &lt;span style="COLOR:#2b91af;"&gt;String&lt;/span&gt;.Format(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;LINESTRING({0})&amp;quot;&lt;/span&gt;, &lt;span style="COLOR:#2b91af;"&gt;String&lt;/span&gt;.Join(&lt;span style="COLOR:#a31515;"&gt;&amp;quot;,&amp;quot;&lt;/span&gt;, pnts));&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:#2b91af;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;SqlGeometry&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt; 
strk = &lt;span style="COLOR:#2b91af;"&gt;SqlGeometry&lt;/span&gt;.Parse(geomText);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;And this uses the Well Known Binary format WKB&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:#2b91af;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;MemoryStream&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt; 
ms = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;MemoryStream&lt;/span&gt; ();&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:#2b91af;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;BinaryWriter&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt; 
bw = &lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;BinaryWriter&lt;/span&gt;(ms);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;//we need to write some geometry information before the 
points.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="COLOR:green;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;//the byte order, the geometry type and the number of 
points.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;bw.Write((&lt;span style="COLOR:#2b91af;"&gt;Byte&lt;/span&gt;)1);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;bw.Write((&lt;span style="COLOR:#2b91af;"&gt;UInt32&lt;/span&gt;)2);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;bw.Write((&lt;span style="COLOR:#2b91af;"&gt;UInt32&lt;/span&gt;)e.Stroke.StylusPoints.Count);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:blue;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;foreach&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt; 
(&lt;span style="COLOR:#2b91af;"&gt;StylusPoint&lt;/span&gt; p &lt;span style="COLOR:blue;"&gt;in&lt;/span&gt; 
e.Stroke.StylusPoints)&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;bw.Write((&lt;span style="COLOR:blue;"&gt;double&lt;/span&gt;)p.X);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;bw.Write((&lt;span style="COLOR:blue;"&gt;double&lt;/span&gt;)p.Y);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 
&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;font size="2"&gt;&lt;span style="COLOR:#2b91af;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;SqlGeometry&lt;/span&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt; 
strk = &lt;span style="COLOR:#2b91af;"&gt;SqlGeometry&lt;/span&gt;.STGeomFromWKB (&lt;span style="COLOR:blue;"&gt;new&lt;/span&gt; &lt;span style="COLOR:#2b91af;"&gt;SqlBytes&lt;/span&gt;(ms),0);&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="MARGIN:0cm 0cm 0pt;mso-layout-grid-align:none;"&gt;&lt;span style="FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-bidi-font-size:10.0pt;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;"&gt;&lt;font size="2"&gt;bw.Close();&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE:10pt;FONT-FAMILY:&amp;#39;Courier New&amp;#39;;mso-ansi-language:EN-GB;mso-fareast-language:EN-GB;mso-no-proof:yes;mso-fareast-font-family:&amp;#39;Times New Roman&amp;#39;;mso-bidi-language:AR-SA;"&gt;ms.Close();&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;script type="text/javascript" src="http://sqlblogcasts.com/sitefiles/1000/Social_Buttons.js"&gt;&lt;/script&gt;
&lt;hr /&gt;
-
&lt;script type="text/javascript" src="http://sqlblogcasts.com/sitefiles/1000/google_rss.js"&gt;
&lt;/script&gt;
&lt;script type="text/javascript"&gt;var height=90;var width=720;&lt;/script&gt;
&lt;script src="http://www.sqlknowhow.com/scripts/Banner.js" type="text/javascript"&gt;
&lt;/script&gt;
 &lt;img src="http://sqlblogcasts.com/aggbug.aspx?PostID=5979" width="1" height="1"&gt;</description><category domain="http://sqlblogcasts.com/blogs/simons/archive/tags/Tips+and+Tricks/default.aspx">Tips and Tricks</category><category domain="http://sqlblogcasts.com/blogs/simons/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://sqlblogcasts.com/blogs/simons/archive/tags/Spatial/default.aspx">Spatial</category><category domain="http://sqlblogcasts.com/blogs/simons/archive/tags/c_2300_/default.aspx">c#</category><category domain="http://sqlblogcasts.com/blogs/simons/archive/tags/WPF/default.aspx">WPF</category><category domain="http://sqlblogcasts.com/blogs/simons/archive/tags/Ink/default.aspx">Ink</category></item></channel></rss>