private void TestCommunes()
        {
            List <SqlGeometry> geom = new List <SqlGeometry>();

            SpatialTrace.Enable();
            SpatialTrace.TraceText("Open DB connection");
            SpatialTrace.Indent();

            using (SqlConnection con = new SqlConnection(@"Data Source=.;Initial Catalog=SampleSpatialData;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False"))
            {
                con.Open();

                using (SqlCommand com = new SqlCommand("SELECT geom, INSEE_COM + ' ' + NOM_COM FROM dbo.COMMUNE --WHERE geom2154.STNumInteriorRing() > 0", con))
                {
                    int i = 0;

                    using (SqlDataReader reader = com.ExecuteReader())
                    {
                        SpatialTrace.TraceText("Reading results DB\t\t connection");
                        SpatialTrace.Indent();
                        while (reader.Read())
                        {
                            i++;

                            // workaround https://msdn.microsoft.com/fr-fr/library/ms143179(v=sql.120).aspx
                            // In version 11.0 only
                            SqlGeometry curGeom = SqlGeometry.Deserialize(reader.GetSqlBytes(0));

                            //// In version 10.0 or 11.0
                            //curGeom = new SqlGeometry();
                            //curGeom.Read(new BinaryReader(reader.GetSqlBytes(0).Stream));


                            geom.Add(curGeom);

                            SpatialTrace.SetFillColor(GetRandomColor());
                            SpatialTrace.SetLineColor(GetRandomColor());
                            SpatialTrace.SetLineWidth(GetRandomStrokeWidth());
                            SpatialTrace.TraceGeometry(curGeom, reader[1].ToString());
                        }

                        SpatialTrace.Unindent();
                    }
                }
            }

            SpatialTrace.Unindent();

            ((ISpatialViewer)viewer).SetGeometry(SqlGeomStyledFactory.Create(geom, null, null, null, "Sample"));
        }
        public void Initialize(string traceFileName)
        {
            try
            {
                _traceFileName = traceFileName;
                _filePath      = System.IO.Path.GetDirectoryName(_traceFileName);

                _traceLines = new ObservableCollection <TraceLineDesign>();
                using (FileStream fs = new FileStream(_traceFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    using (StreamReader sr = new StreamReader(fs))
                    {
                        string lineText = sr.ReadLine();                         // skip header
                        lineText = sr.ReadLine();
                        while (lineText != null)
                        {
                            // Parse line
                            TraceLineDesign traceLine = TraceLineDesign.Parse(lineText);

                            // Create geometry
                            if (string.IsNullOrEmpty(traceLine.GeometryDataFile) == false)
                            {
                                if (traceLine.GeometryDataFile.EndsWith("list.dat"))
                                {
                                    _listGeometryStyles[traceLine.UniqueId] = SqlGeomStyledFactory.Create(SqlTypesExtensions.ReadList(System.IO.Path.Combine(_filePath, traceLine.GeometryDataFile)),
                                                                                                          traceLine.FillColor,
                                                                                                          traceLine.StrokeColor,
                                                                                                          traceLine.StrokeWidth,
                                                                                                          traceLine.Label,
                                                                                                          traceLine.IsChecked);
                                }
                                else
                                {
                                    _listGeometryStyles[traceLine.UniqueId] = new List <SqlGeometryStyled>()
                                    {
                                        SqlGeomStyledFactory.Create(SqlTypesExtensions.Read(System.IO.Path.Combine(_filePath, traceLine.GeometryDataFile)),
                                                                    traceLine.FillColor,
                                                                    traceLine.StrokeColor,
                                                                    traceLine.StrokeWidth,
                                                                    traceLine.Label,
                                                                    traceLine.IsChecked)
                                    };
                                }
                            }

                            // Add to collection
                            _traceLines.Add(traceLine);

                            // next value
                            lineText = sr.ReadLine();
                        }
                    }
                }



                // Set to view model
                _viewModel.Traces = _traceLines;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }