public void CreateMultiPointShapeFile()
        {
            var fdt = CreateMultiPointFeatureDataTable(_geometryFactory);
            using (var sfp = ShapeFileProvider.Create(".", "MultiPoint", ShapeType.MultiPoint, fdt, _geometryFactory, new GeometryServices().CoordinateSystemFactory))
            {
                sfp.Open(WriteAccess.ReadWrite);
                foreach (FeatureDataRow row in fdt.Rows)
                    sfp.Insert(row);
            }


            int number = 0;
            var gs = new GeometryServices();
            using (var sfp = new ShapeFileProvider("MultiPoint.shp", gs.DefaultGeometryFactory, gs.CoordinateSystemFactory))
            {
                sfp.IsSpatiallyIndexed = false;
                sfp.Open(WriteAccess.ReadOnly);
                using (var p = sfp.ExecuteFeatureQuery(FeatureQueryExpression.Intersects(sfp.GetExtents())))
                {
                    while (p.Read())
                    {
                        Assert.True(((FeatureDataRow)fdt.Rows[number]).Geometry.Equals(p.Geometry));
                        number++;
                        Console.WriteLine(string.Format("{0}; {1}; {2}", p.GetOid(), p.Geometry.GeometryTypeName, p.Geometry));
                    }
                }
            }
            Assert.True(number == 100);
        }
        private static void setupShapefile(HttpContext context, Map m)
        {
            GeometryServices geometryServices = new GeometryServices();

            string[] layernames = new[]
                                      {
                                          "Countries",
                                          "Rivers"/*,
                                          "Cities"*/
                                      };

            foreach (string s in layernames)
            {
                ShapeFileProvider shapeFile =
               new ShapeFileProvider(context.Server.MapPath(string.Format("~/App_Data/Shapefiles/{0}.shp", s)),
                                     geometryServices.DefaultGeometryFactory,
                                     geometryServices.CoordinateSystemFactory, false);
                shapeFile.IsSpatiallyIndexed = false;

                AppStateMonitoringFeatureProvider provider = new AppStateMonitoringFeatureProvider(shapeFile);

                GeoJsonGeometryStyle style = RandomStyle.RandomGeometryStyle();
                /* include GeoJson styles */
                style.IncludeAttributes = false;
                style.IncludeBBox = true;
                style.PreProcessGeometries = false;
                style.CoordinateNumberFormatString = "{0:F}";

                GeometryLayer geometryLayer = new GeometryLayer(s, style, provider);
                geometryLayer.Features.IsSpatiallyIndexed = false;
                m.AddLayer(geometryLayer);
                provider.Open();
            }

        }
Esempio n. 3
0
 public IFeatureProvider GetProvider()
 {
     IGeometryServices svc = new GeometryServices();
     if (File.Exists(tbPath.Text))
     {
         return new ShapeFileProvider(tbPath.Text, svc.DefaultGeometryFactory, svc.CoordinateSystemFactory, false)
                    {
                        IsSpatiallyIndexed = false,
                        ForceCoordinateOptions = (ForceCoordinateOptions)cbForceCoordinate.SelectedItem,
                        ReadStrictness = (ShapeFileReadStrictness)cbStrictness.SelectedItem
                    };
     }
     return null;
 }
Esempio n. 4
0
        public override IFeatureProvider GetProvider()
        {
            if (!EnsureTables())
                return null;

            string oidColumn, oidType, geometryColumn, schema, tableName;

            string[] prts = ((string) cbTable.SelectedItem).Split('|');
            oidColumn = prts[3];
            oidType = prts[2];
            geometryColumn = prts[1];
            prts = prts[0].Split('.');
            schema = prts[0];
            tableName = prts[1];
            IGeometryFactory f = new GeometryServices().DefaultGeometryFactory;

            SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(this.ServerConnectionString);
            sb.InitialCatalog = cbDataBases.SelectedItem.ToString();
            string conn = sb.ToString();

            switch (oidType)
            {
                case "bigint":
                    return new MsSqlServer2008Provider<long>(f, conn, schema, tableName, oidColumn, geometryColumn);
                case "decimal":
                    return new MsSqlServer2008Provider<decimal>(f, conn, schema, tableName, oidColumn, geometryColumn);
                case "int":
                case "smallint":
                    return new MsSqlServer2008Provider<int>(f, conn, schema, tableName, oidColumn, geometryColumn);
                case "float":
                case "numeric":
                case "real":
                    return new MsSqlServer2008Provider<double>(f, conn, schema, tableName, oidColumn, geometryColumn);
                case "tinyint":
                    return new MsSqlServer2008Provider<byte>(f, conn, schema, tableName, oidColumn, geometryColumn);
                case "uniqueidentifier":
                    return new MsSqlServer2008Provider<Guid>(f, conn, schema, tableName, oidColumn, geometryColumn);
                case "nvarchar":
                case "varchar":
                    return new MsSqlServer2008Provider<string>(f, conn, schema, tableName, oidColumn, geometryColumn);
            }
            return null;
        }
Esempio n. 5
0
        public void TestSqlServer2008()
        {
            GeometryServices services = new GeometryServices();

            MsSqlServer2008Provider<long> search = new MsSqlServer2008Provider<long>(services.DefaultGeometryFactory,
                                                                                     ConfigurationManager.
                                                                                         ConnectionStrings["sql2008"].
                                                                                         ConnectionString,
                                                                                     "dbo",
                                                                                     "vw_iMARS_BRANCH", "ACSId", "Geom")
                                                       {
                                                           DefaultProviderProperties
                                                               = new ProviderPropertiesExpression(
                                                               new ProviderPropertyExpression[]
                                                                   {
                                                                       new WithNoLockExpression(true),
                                                                       new ForceIndexExpression(true)
                                                                   })
                                                       };

            CollectionBinaryExpression binaryExpression =
                new CollectionBinaryExpression(new PropertyNameExpression("PostCode"), CollectionOperator.In,
                                               new CollectionExpression(new[] { 3, 4, 5, 6 }));

            ProviderPropertiesExpression providerProps =
                new ProviderPropertiesExpression(
                    new ProviderPropertyExpression[]
                        {
                            new WithNoLockExpression(true),
                            //new OrderByCollectionExpression(new[] {"PostCode"}),
                            new ForceIndexExpression(true),
                            new IndexNamesExpression(new[] {"Index1", "Index2"})
                        });


            ProviderQueryExpression prov = new ProviderQueryExpression(providerProps, new AllAttributesExpression(),
                                                                       binaryExpression);

            object obj = search.ExecuteQuery(prov);

            Assert.IsNotNull(obj);
        }
        public void CreateLinealShapeFileZ()
        {
            var fdt = CreateLinealFeatureDataTableZ(_geometryFactory);
            using (var sfp = ShapeFileProvider.Create(".", "LinealZ", ShapeType.PolyLineZ, fdt, _geometryFactory, new GeometryServices().CoordinateSystemFactory))
            {
                sfp.Open(WriteAccess.ReadWrite);
                foreach (FeatureDataRow row in fdt.Rows)
                    sfp.Insert(row);
            }


            int number = 0;
            var gs = new GeometryServices();
            using (var sfp = new ShapeFileProvider("LinealZ.shp", gs.DefaultGeometryFactory, gs.CoordinateSystemFactory))
            {
                sfp.IsSpatiallyIndexed = false;
                sfp.Open(WriteAccess.ReadOnly);
                using (var p = sfp.ExecuteFeatureQuery(FeatureQueryExpression.Intersects(sfp.GetExtents())))
                {
                    while (p.Read())
                    {
                        var geom = ((FeatureDataRow)fdt.Rows[number]).Geometry;
                        Assert.True(geom.AsText().Equals(p.Geometry.AsText()),
                                    string.Format("\n{0}\nis not equal to\n{1}", geom.AsText(), p.Geometry.AsText()));
                        number++;
                        Assert.True(p.Geometry.Coordinates[0].ContainsOrdinate(Ordinates.Z), "Geometry's coordinates should have Z values");
                        Assert.True(p.Geometry.Coordinates[0].ContainsOrdinate(Ordinates.M), "Geometry's coordinates should have M values");
                        Assert.False(p.Geometry.Coordinates[0].ContainsOrdinate(Ordinates.W), "Geometry's coordinates should not have W values");
                        Console.WriteLine(string.Format("{0}; {1}; {2}", p.GetOid(), p.Geometry.GeometryTypeName, p.Geometry));
                    }
                }
            }
            Assert.True(number == 100);
        }
Esempio n. 7
0
        public void TestMsSqlServer2008OrderBy()
        {
            GeometryServices services = new GeometryServices();

            MsSqlServer2008Provider<long> search = new MsSqlServer2008Provider<long>(services.DefaultGeometryFactory,
                                                                                     ConfigurationManager.
                                                                                         ConnectionStrings["sql2008"].
                                                                                         ConnectionString,
                                                                                     "dbo",
                                                                                     "vwGeoCustomers", "OID", "Geom")
            {
                DefaultProviderProperties
                    = new ProviderPropertiesExpression(
                    new ProviderPropertyExpression[]
                                                                   {
                                                                       new WithNoLockExpression(true),
                                                                       new ForceIndexExpression(true)
                                                                   })
            };

            //var binaryExpression =
            //    new CollectionBinaryExpression(new PropertyNameExpression("PostCode"), CollectionOperator.In, new CollectionExpression(new[] { 3, 4, 5, 6 }));


            AttributeBinaryStringExpression binaryExpression = new AttributeBinaryStringExpression("PostCode",
                                                                                                   BinaryStringOperator.
                                                                                                       StartsWith, "W");


            IGeometry testPoint = new GeometryServices()["EPSG:27700"].CreatePoint2D(500000, 180000);
            ProviderPropertiesExpression providerProps =
                new ProviderPropertiesExpression(
                    new ProviderPropertyExpression[]
                        {
                            new WithNoLockExpression(true),
                            //new OrderByCollectionExpression(
                            //    new []
                            //        {
                            //            new OrderByExpression(
                            //                new SpatialAnalysisDistanceExpression(new GeometryExpression(null),new GeometryExpression(testPoint) ),SortOrder.Ascending),
                            //        }),
                           
                            new DataPageSizeExpression(10),
                            new DataPageNumberExpression(0)
                        });


            ProviderQueryExpression prov = new ProviderQueryExpression(providerProps, new AllAttributesExpression(),
                                                                       binaryExpression,
                                                                       new SortExpressionCollectionExpression(
                                                                           new[]{new SortExpression( 
                                                                               new SpatialAnalysisDistanceExpression(
                                                                                   new GeometryExpression(null),
                                                                                   new GeometryExpression(testPoint)),SortOrder.Ascending)}));

            object obj = search.ExecuteQuery(prov);

            Assert.IsNotNull(obj);
        }
Esempio n. 8
0
        public void TestTOWGS84Conversion()
        {
            string fromWkt =
                "PROJCS[\"LGD2006 / UTM zone 32N\",GEOGCS[\"LGD2006\",DATUM[\"Libyan_Geodetic_Datum_2006\",SPHEROID[\"International 1924\",6378388,297,AUTHORITY[\"EPSG\",\"7022\"]],TOWGS84[-87,-98,-121,0,0,0,0],AUTHORITY[\"EPSG\",\"6754\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4754\"]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"latitude_of_origin\",0],PARAMETER[\"central_meridian\",9],PARAMETER[\"scale_factor\",0.9996],PARAMETER[\"false_easting\",500000],PARAMETER[\"false_northing\",-4000000],UNIT[\"metre\",1,AUTHORITY[\"EPSG\",\"9001\"]],AUTHORITY[\"EPSG\",\"3199\"]]";
            string toWkt =
                "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS 84\",6378137,298.257223563,AUTHORITY[\"EPSG\",\"7030\"]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY[\"EPSG\",\"6326\"]],PRIMEM[\"Greenwich\",0,AUTHORITY[\"EPSG\",\"8901\"]],UNIT[\"degree\",0.01745329251994328,AUTHORITY[\"EPSG\",\"9122\"]],AUTHORITY[\"EPSG\",\"4326\"]]";

            GeometryServices gs = new GeometryServices();
            ICoordinateSystem srs = gs.CoordinateSystemFactory.CreateFromWkt(fromWkt);
            ICoordinateSystem dst = gs.CoordinateSystemFactory.CreateFromWkt(toWkt); //WGS84
            ICoordinateTransformation ics = gs.CoordinateTransformationFactory.CreateFromCoordinateSystems(srs, dst);
            Assert.IsNotNull(ics);
        }
Esempio n. 9
0
        public void TestGeometryProvider()
        {
            string wkt;
            GeometryServices g = new GeometryServices();
            GeometryProvider prov;

            IGeometry geom = g.DefaultGeometryFactory.WktReader.Read(File.ReadAllText("D:\\geometries.txt"));

            prov = new GeometryProvider(new[] { geom });


            using (IFeatureDataReader fdr =
                prov.ExecuteFeatureQuery(new FeatureQueryExpression(geom.Extents, SpatialOperation.Intersects)))
            {
                while (fdr.Read())
                {
                    Debug.WriteLine(fdr.Geometry.AsText());
                }
            }
        }
Esempio n. 10
0
        public void TestGetFeatureByOid()
        {
            GeometryServices services = new GeometryServices();

            MsSqlServer2008Provider<long> search = new MsSqlServer2008Provider<long>(services.DefaultGeometryFactory,
                                                                                     ConfigurationManager.
                                                                                         ConnectionStrings["sql2008"].
                                                                                         ConnectionString,
                                                                                     "dbo",
                                                                                     "vw_iMARS_BRANCH", "ACSId", "Geom")
                                                       {
                                                           DefaultProviderProperties
                                                               = new ProviderPropertiesExpression(
                                                               new ProviderPropertyExpression[]
                                                                   {
                                                                       new WithNoLockExpression(true),
                                                                       new ForceIndexExpression(true)
                                                                   })
                                                       };


            IFeatureDataRecord record = search.GetFeatureByOid(1);
            Assert.IsNotNull(record);
        }
Esempio n. 11
0
        public void TestSqLite()
        {
            GeometryServices services = new GeometryServices();

            SpatiaLite2Provider search = new SpatiaLite2Provider(services.DefaultGeometryFactory,
                                                                 ConfigurationManager.ConnectionStrings["sqLite"].
                                                                     ConnectionString,
                                                                 "main",
                                                                 "regions", "OID", "XGeometryX");
            search.SpatiaLiteIndexType = SpatiaLite2IndexType.MBRCache;

            BinaryExpression binaryExpression =
                new BinaryExpression(new PropertyNameExpression("VHG5"),
                                     BinaryOperator.GreaterThan, new LiteralExpression<int>(6));

            ProviderPropertiesExpression providerProps =
                new ProviderPropertiesExpression(
                    new ProviderPropertyExpression[] { });


            ProviderQueryExpression prov = new ProviderQueryExpression(providerProps, new AllAttributesExpression(),
                                                                       binaryExpression);

            object obj = search.ExecuteQuery(prov);

            Assert.IsNotNull(obj);
        }
Esempio n. 12
0
        public void TestMsSqlSpatialPaged()
        {
            GeometryServices services = new GeometryServices();

            MsSqlSpatialProvider search = new MsSqlSpatialProvider(services.DefaultGeometryFactory,
                                                                   ConfigurationManager.ConnectionStrings["mssqlspatial"
                                                                       ].
                                                                       ConnectionString,
                                                                   "ST",
                                                                   "dbo",
                                                                   "BRoads", "OID", "the_geom")
                                              {
                                                  DefaultProviderProperties
                                                      = new ProviderPropertiesExpression(
                                                      new ProviderPropertyExpression[]
                                                          {
                                                              new WithNoLockExpression(true),
                                                              new ForceIndexExpression(true)
                                                          })
                                              };

            //var binaryExpression =
            //    new CollectionBinaryExpression(new PropertyNameExpression("PostCode"), CollectionOperator.In, new CollectionExpression(new[] { 3, 4, 5, 6 }));


            AttributeBinaryStringExpression binaryExpression = new AttributeBinaryStringExpression("NAME",
                                                                                                   BinaryStringOperator.
                                                                                                       StartsWith, "W");


            ProviderPropertiesExpression providerProps =
                new ProviderPropertiesExpression(
                    new ProviderPropertyExpression[]
                        {
                            new WithNoLockExpression(true),
                            //new OrderByCollectionExpression(new[] {"NAME"}),
                            new ForceIndexExpression(true),
                            new IndexNamesExpression(new[] {"Index1", "Index2"}),
                            new DataPageSizeExpression(10),
                            new DataPageNumberExpression(5)
                        });


            ProviderQueryExpression prov = new ProviderQueryExpression(providerProps, new AllAttributesExpression(),
                                                                       binaryExpression);

            object obj = search.ExecuteQuery(prov);

            Assert.IsNotNull(obj);
        }
Esempio n. 13
0
        public void TestSqlServer2008Distance()
        {
            GeometryServices services = new GeometryServices();

            MsSqlServer2008Provider<long> search = new MsSqlServer2008Provider<long>(services.DefaultGeometryFactory,
                                                                                     ConfigurationManager.
                                                                                         ConnectionStrings["sql2008"].
                                                                                         ConnectionString,
                                                                                     "dbo",
                                                                                     "GeoPlaces", "OId", "Geom")
                                                       {
                                                           DefaultProviderProperties
                                                               = new ProviderPropertiesExpression(
                                                               new ProviderPropertyExpression[]
                                                                   {
                                                                       new WithNoLockExpression(true),
                                                                       new ForceIndexExpression(true)
                                                                   })
                                                       };

            IGeometry point = services["EPSG:27700"].CreatePoint2D(500000, 180000);

            SpatialAnalysisExpression analysisExpresssion =
                new SpatialAnalysisDistanceExpression(new GeometryExpression(null),
                                                      new GeometryExpression(point));


            BinaryExpression expression = new BinaryExpression(analysisExpresssion, BinaryOperator.LessThanOrEqualTo,
                                                               new LiteralExpression<double>(2000.00));
            ProviderPropertiesExpression providerProps =
                new ProviderPropertiesExpression(
                    new ProviderPropertyExpression[]
                        {
                            new WithNoLockExpression(true),
                            new ForceIndexExpression(true)
                        });


            ProviderQueryExpression prov = new ProviderQueryExpression(providerProps, new AllAttributesExpression(),
                                                                       expression);

            object obj = search.ExecuteQuery(prov);

            Assert.IsNotNull(obj);
        }
Esempio n. 14
0
        public IFeatureProvider GetProvider()
        {
            if (EnsureTables())
            {
                string conn = ServerConnectionString;

                conn += string.Format("Database={0};", cbDataBases.SelectedItem);
                conn += "Enlist=true;";

                DataRowView drv = (DataRowView) cbTables.SelectedItem;
                string schema = (string) drv["Schema"];
                string tableName = (string) drv["TableName"];
                ;
                string geomColumn = (string) drv["GeometryColumn"];
                int coordDimension = (int) drv["Dimension"];
                string srid = (string) drv["SRID"]; //((int)).ToString();

                GeometryServices gs = new GeometryServices();
                IGeometryFactory gf = gs[srid]; //, coordDimension];
                //if (!string.IsNullOrEmpty(spatialReference))
                //    gf.SpatialReference = gs.CoordinateSystemFactory.CreateFromWkt(spatialReference);

                string oidColumnName = (String) dgvColumns.Rows[oidcolumn].Cells["ColumnName"].Value;

                List<String> columns = new List<string>();
                //List<OrderByExpression> orderby = new List<OrderByExpression>();
                foreach (DataGridViewRow dgvr in dgvColumns.Rows)
                {
                    if ((bool) dgvr.Cells["Include"].Value) columns.Add((String) dgvr.Cells["ColumnName"].Value);
                    //if (dgvr.Cells["SortOrder"].Value != null)
                    //    orderby.Add(new OrderByExpression((String) dgvr.Cells[1].Value,
                    //                                      (SortOrder) dgvr.Cells["SortOrder"].Value));
                }

                if (!columns.Contains(oidColumnName))
                    columns.Insert(0, oidColumnName);

                columns.Add(geomColumn);

                ProviderPropertiesExpression ppe = null;

                //if (orderby.Count == 0)
                //{
                //    ppe = new ProviderPropertiesExpression(
                //        new ProviderPropertyExpression[]
                //            {
                //                new AttributesCollectionExpression(columns)
                //            });
                //}
                //else
                //{
                    ppe = new ProviderPropertiesExpression(
                        new ProviderPropertyExpression[]
                            {
                                //new OrderByCollectionExpression(orderby),
                                new AttributesCollectionExpression(columns)
                            });
                //}

                IFeatureProvider prov = null;

                switch ((String) dgvColumns.Rows[oidcolumn].Cells["DataType"].Value)
                {
                    case "bigint":
                        prov = new PostGisProvider<long>(gf, conn, schema, tableName, oidColumnName, geomColumn,
                                                         gs.CoordinateTransformationFactory)
                                   {DefaultProviderProperties = ppe};
                        break;
                    case "integer":
                        prov = new PostGisProvider<int>(gf, conn, schema, tableName, oidColumnName, geomColumn,
                                                        gs.CoordinateTransformationFactory)
                                   {DefaultProviderProperties = ppe};
                        break;
                    case "character varying":
                    case "text":
                        prov = new PostGisProvider<string>(gf, conn, schema, tableName, oidColumnName, geomColumn,
                                                           gs.CoordinateTransformationFactory)
                                   {DefaultProviderProperties = ppe};
                        break;
                    case "uuid":
                        prov = new PostGisProvider<Guid>(gf, conn, schema, tableName, oidColumnName, geomColumn,
                                                         gs.CoordinateTransformationFactory)
                                   {DefaultProviderProperties = ppe};
                        break;
                    default:
                        return null;
                }

                //jd commented temporarily to get a build
                //((ISpatialDbProvider)prov).DefinitionQuery =
                //    new ProviderQueryExpression(ppe, ape, null);

                return prov;
            }
            return null;
        }
        private ICoordinateTransformation SetCoordinateTransfromation(ICoordinateSystem spatialReference)
        {
            if (spatialReference != null)
            {
                string lastTargetCS = string.IsNullOrEmpty(Settings.Default.TargetSrid)
                                          ?
                                              "(e.g. 'EPSG:4326'). Otherwise just press Enter."
                                          :
                                              string.Format(
                                                  "(Last time you used: '{0}'). Only press Enter to do again or \n'{1}' to omit coordinat transformation.",
                                                  Settings.Default.TargetSrid, spatialReference.AuthorityCode);

                Console.WriteLine(string.Format(
                                      "\nThe Srid Authority Code of the sources' coordinate system is '{0}'.\n" +
                                      "If you wish to apply a coordinate transformation supply Srid Authority Code.\n" +
                                      "{1}.",
                                      spatialReference.AuthorityCode));

                string targetCS = Console.ReadLine();
                if (string.IsNullOrEmpty(targetCS)) targetCS = Settings.Default.TargetSrid;
                if (string.Equals(targetCS, spatialReference.AuthorityCode)) targetCS = "";

                if (!string.IsNullOrEmpty(targetCS))
                {
                    ICoordinateSystem csTo = SridMap.DefaultInstance.Process(targetCS, (ICoordinateSystem) null);
                    if (csTo != null)
                    {
                        ICoordinateTransformation ct = new GeometryServices().CoordinateTransformationFactory
                            .CreateFromCoordinateSystems(spatialReference, csTo);

                        return ct;
                    }
                    else
                    {
                        Console.WriteLine(string.Format("Cannot access the following coordinate system: {0}", targetCS));
                    }
                }
            }
            return null;
        }
Esempio n. 16
0
        public IFeatureProvider GetProvider()
        {
            if (EnsureTables())
            {
                string conn = ServerConnectionString;

                DataRowView drv = (DataRowView) cbTables.SelectedItem;
                string schema = (string) drv["Schema"];
                string tableName = (string) drv["TableName"];
                ;
                string geomColumn = (string) drv["GeometryColumn"];
                int coordDimension = (int) (long) drv["Dimension"];
                string srid = drv["SRID"].ToString();
                string spatialReference = drv["SpatialReference"] == DBNull.Value
                                              ?
                                                  ""
                                              :
                                                  (string) drv["SpatialReference"];

                GeometryServices gs = new GeometryServices();
                IGeometryFactory gf = gs[srid]; //, coordDimension];
                //if (!string.IsNullOrEmpty(spatialReference))
                //    gf.SpatialReference = gs.CoordinateSystemFactory.CreateFromWkt(spatialReference);

                string oidColumnName = (String) dgvColumns.Rows[oidcolumn].Cells[2].Value;

                List<String> columns = new List<string>();
                //List<OrderByExpression> orderby = new List<OrderByExpression>();
                foreach (DataGridViewRow dgvr in dgvColumns.Rows)
                {
                    if ((bool) dgvr.Cells["Include"].Value) columns.Add((String) dgvr.Cells[2].Value);
                    //if (dgvr.Cells["SortOrder"].Value != null)
                    //    orderby.Add(new OrderByExpression((String) dgvr.Cells[1].Value,
                    //                                      (SortOrder) dgvr.Cells["SortOrder"].Value));
                }

                if (!columns.Contains(oidColumnName))
                    columns.Insert(0, oidColumnName);
                columns.Insert(1, geomColumn);

                ProviderPropertiesExpression ppe = null;

                //if (orderby.Count == 0)
                //{
                //    ppe = new ProviderPropertiesExpression(
                //        new ProviderPropertyExpression[]
                //            {
                //                new AttributesCollectionExpression(columns)
                //            });
                //}
                //else
                //{
                    ppe = new ProviderPropertiesExpression(
                        new ProviderPropertyExpression[]
                            {
                                //new OrderByCollectionExpression(orderby),
                                new AttributesCollectionExpression(columns)
                            });
                //}

                IFeatureProvider prov =
                    new SpatiaLite2Provider(gf, conn, schema, tableName, oidColumnName, geomColumn,
                                            gs.CoordinateTransformationFactory) {DefaultProviderProperties = ppe};

                //jd commented temporarily to get a build
                //((ISpatialDbProvider)prov).DefinitionQuery =
                //    new ProviderQueryExpression(ppe, ape, null);

                return prov;
            }
            return null;
        }