⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntsprovider.cs

📁 C# 的地图开发例子(sharp map)
💻 CS
📖 第 1 页 / 共 2 页
字号:
			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 + -