📄 ntsprovider.cs
字号:
throw new NotImplementedException("QueryFeatures is obsolete. Use ExecuteIntersectionQuery.");
}
/// <summary>
/// Creates a new row in the given <see cref="SharpMap.Data.FeatureDataTable"/> <paramref name="dataTable"/>
/// using data in <see cref="GisSharpBlog.NetTopologySuite.Features.Feature"/> <paramref name="feature"/>.
/// </summary>
/// <param name="dataTable">The <see cref="SharpMap.Data.FeatureDataTable"/> to fill.</param>
/// <param name="feature">Data to insert in the <see cref="SharpMap.Data.FeatureDataTable"/>.</param>
private void CreateNewRow(SharpMap.Data.FeatureDataTable dataTable, GisSharpBlog.NetTopologySuite.Features.Feature feature)
{
SharpMap.Data.FeatureDataRow dataRow = dataTable.NewRow();
dataRow.Geometry = GeometryConverter.ToSharpMapGeometry(feature.Geometry);
foreach (string columnName in feature.Attributes.GetNames())
dataRow[columnName] = feature.Attributes[columnName];
dataTable.AddRow(dataRow);
}
/// <summary>
/// Creates a <see cref="SharpMap.Data.FeatureDataTable"/> using a stub feature (feature[0]).
/// </summary>
/// <returns><see cref="SharpMap.Data.FeatureDataTable"/></returns>
private SharpMap.Data.FeatureDataTable CreateFeatureDataTable()
{
SharpMap.Data.FeatureDataTable dataTable = new SharpMap.Data.FeatureDataTable();
foreach (string columnName in features[0].Attributes.GetNames())
dataTable.Columns.Add(new DataColumn(columnName, features[0].Attributes.GetType(columnName)));
return dataTable;
}
/// <summary>
/// Gets the connection ID.
/// </summary>
/// <value>The connection ID.</value>
[Obsolete("Does nothing at all")]
public string ConnectionID
{
get
{
return String.Empty;
}
}
/// <summary>
/// Gets the features in view.
/// </summary>
/// <param name="bbox">The bbox.</param>
/// <param name="ds">The ds.</param>
public void GetFeaturesInView(SharpMap.Geometries.BoundingBox bbox, SharpMap.Data.FeatureDataSet ds)
{
ExecuteIntersectionQuery(bbox, ds);
}
/// <summary>
/// Returns the BoundingBox of the dataset.
/// </summary>
/// <returns>BoundingBox</returns>
public SharpMap.Geometries.BoundingBox GetExtents()
{
GisSharpBlog.NetTopologySuite.Geometries.Envelope envelope = new GisSharpBlog.NetTopologySuite.Geometries.Envelope();
foreach (GisSharpBlog.NetTopologySuite.Features.Feature feature in features)
envelope.ExpandToInclude(feature.Geometry.EnvelopeInternal);
return GeometryConverter.ToSharpMapBoundingBox(envelope);
}
/// <summary>
/// Gets the feature identified from the given <paramref name="rowID" />.
/// </summary>
/// <param name="rowID">The row ID.</param>
/// <returns></returns>
public SharpMap.Data.FeatureDataRow GetFeature(uint rowID)
{
GisSharpBlog.NetTopologySuite.Features.Feature feature = features[Convert.ToInt32(rowID)];
SharpMap.Data.FeatureDataTable dataTable = new SharpMap.Data.FeatureDataTable();
foreach (string columnName in feature.Attributes.GetNames())
dataTable.Columns.Add(new DataColumn(columnName, feature.Attributes.GetType(columnName)));
SharpMap.Data.FeatureDataRow dataRow = dataTable.NewRow();
dataRow.Geometry = GeometryConverter.ToSharpMapGeometry(feature.Geometry);
foreach (string columnName in feature.Attributes.GetNames())
dataRow[columnName] = feature.Attributes[columnName];
return dataRow;
}
/// <summary>
/// Returns the number of features in the dataset.
/// </summary>
/// <returns>number of features</returns>
public int GetFeatureCount()
{
return features.Count;
}
/// <summary>
/// Returns features within the specified bounding box.
/// </summary>
/// <param name="bbox"></param>
/// <returns></returns>
public Collection<SharpMap.Geometries.Geometry> GetGeometriesInView(SharpMap.Geometries.BoundingBox bbox)
{
// Identifies all the features within the given BoundingBox
GisSharpBlog.NetTopologySuite.Geometries.Envelope envelope = GeometryConverter.ToNTSEnvelope(bbox);
Collection<SharpMap.Geometries.Geometry> geoms = new Collection<SharpMap.Geometries.Geometry>();
foreach (GisSharpBlog.NetTopologySuite.Features.Feature feature in features)
if (envelope.Intersects(feature.Geometry.EnvelopeInternal))
geoms.Add(GeometryConverter.ToSharpMapGeometry(feature.Geometry));
return geoms;
}
/// <summary>
///
/// </summary>
/// <param name="box"></param>
/// <param name="ds"></param>
public void ExecuteIntersectionQuery(SharpMap.Geometries.BoundingBox box, FeatureDataSet ds)
{
// Identifies all the features within the given BoundingBox
GisSharpBlog.NetTopologySuite.Geometries.Envelope envelope = GeometryConverter.ToNTSEnvelope(box);
List<GisSharpBlog.NetTopologySuite.Features.Feature> results = new List<GisSharpBlog.NetTopologySuite.Features.Feature>(features.Count);
foreach (GisSharpBlog.NetTopologySuite.Features.Feature feature in features)
if (envelope.Intersects(feature.Geometry.EnvelopeInternal))
results.Add(feature);
// Fill DataSet
SharpMap.Data.FeatureDataTable dataTable = CreateFeatureDataTable();
foreach (GisSharpBlog.NetTopologySuite.Features.Feature feature in results)
CreateNewRow(dataTable, feature);
ds.Tables.Add(dataTable);
}
/// <summary>
///
/// </summary>
/// <param name="geom"></param>
/// <param name="ds"></param>
public void ExecuteIntersectionQuery(SharpMap.Geometries.Geometry geom, FeatureDataSet ds)
{
GisSharpBlog.NetTopologySuite.Geometries.Geometry geometry = GeometryConverter.ToNTSGeometry(geom, geometryFactory);
SharpMap.Data.FeatureDataTable dataTable = CreateFeatureDataTable();
foreach (GisSharpBlog.NetTopologySuite.Features.Feature feature in features)
if (feature.Geometry.Intersects(geometry))
CreateNewRow(dataTable, feature);
ds.Tables.Add(dataTable);
}
/// <summary>
/// Gets the geometry by ID.
/// </summary>
/// <param name="oid">The oid.</param>
/// <returns></returns>
public SharpMap.Geometries.Geometry GetGeometryByID(uint oid)
{
GisSharpBlog.NetTopologySuite.Features.Feature feature = features[Convert.ToInt32(oid)];
return GeometryConverter.ToSharpMapGeometry(feature.Geometry);
}
/// <summary>
/// Gets the object IDs in the view.
/// </summary>
/// <param name="bbox">The bbox.</param>
/// <returns></returns>
public Collection<uint> GetObjectIDsInView(SharpMap.Geometries.BoundingBox bbox)
{
// Identifies all the features within the given BoundingBox
GisSharpBlog.NetTopologySuite.Geometries.Envelope envelope = GeometryConverter.ToNTSEnvelope(bbox);
Collection<uint> geoms = new Collection<uint>();
for(int i = 0; i < features.Count; i++)
if (envelope.Intersects(features[i].Geometry.EnvelopeInternal))
geoms.Add(Convert.ToUInt32(i));
return geoms;
}
/// <summary>
/// Opens this instance.
/// </summary>
[Obsolete("Does nothing at all")]
public void Open() { }
/// <summary>
/// Gets a value indicating whether this instance is open.
/// </summary>
/// <value><c>true</c> if this instance is open; otherwise, <c>false</c>.</value>
public bool IsOpen
{
get
{
return features.Count > 0;
}
}
/// <summary>
/// Closes this instance.
/// </summary>
[Obsolete("Does nothing at all")]
public void Close() { }
private int _SRID = -1;
/// <summary>
/// The spatial reference ID (CRS)
/// </summary>
public int SRID
{
get { return _SRID; }
set { _SRID = value; }
}
#endregion
#region IDisposable Members
/// <summary>
/// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
/// </summary>
public void Dispose() { }
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -