/// <summary> /// Builds from the given provider. /// </summary> /// <param name="provider"> /// The base <see cref="SharpMap.Data.Providers.IProvider"/> /// from witch initialize the <see cref="NtsProvider"/> instance. /// </param> private void BuildFromProvider(IProvider provider) { // Features list initialization features = new List <Feature>(provider.GetFeatureCount()); try { // Load all features from the given provider provider.Open(); Collection <uint> ids = provider.GetObjectIDsInView(provider.GetExtents()); foreach (uint id in ids) { FeatureDataRow dataRow = provider.GetFeature(id); GisSharpBlog.NetTopologySuite.Geometries.Geometry geometry = GeometryConverter.ToNTSGeometry(dataRow.Geometry, geometryFactory); AttributesTable attributes = new AttributesTable(); foreach (DataColumn column in dataRow.Table.Columns) { if (dataRow[column] == null || dataRow[column].GetType() == typeof(DBNull)) { throw new ApplicationException("Null values not supported"); } attributes.AddAttribute(column.ColumnName, dataRow[column]); } features.Add(new Feature(geometry, attributes)); } } finally { if (provider.IsOpen) { provider.Close(); } } }
/// <summary> /// /// </summary> /// <param name="geom"></param> /// <param name="ds"></param> public void ExecuteIntersectionQuery(Geometry geom, FeatureDataSet ds) { GisSharpBlog.NetTopologySuite.Geometries.Geometry geometry = GeometryConverter.ToNTSGeometry(geom, geometryFactory); FeatureDataTable dataTable = CreateFeatureDataTable(); foreach (Feature feature in features) { if (feature.Geometry.Intersects(geometry)) { CreateNewRow(dataTable, feature); } } ds.Tables.Add(dataTable); }