Sharpmap自定义数据源

来源:互联网 发布:谢道清 知乎 编辑:程序博客网 时间:2024/05/17 07:54

业务数据有位置信息,都可以在地图上显示。那问题就来了,在现实世界中,有各种各样的数据,怎样将这些数据上图呢?

Sharpmap为我们提供了数据源接口,来完成各种各样数据的接入。

类图:

核心方法:

        /// <summary>        ///返回查询到的数据集        /// </summary>        /// <param name="box">当前地图视野矩形</param>        /// <param name="ds">填充后的返回的数据集</param>        void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds);

     

FeatureDataSet是对DataSet的扩展,在行对象中,添加了Geometry属性。这样返回结果就可以包含业务数据和几何数据。

在使用FeatureDataSet之前,先定义表的数据接口。如下:

            this.data = new FeatureDataTable();            this.data.Columns.Add("Name", typeof(string));

数据查询:

    public void ExecuteIntersectionQuery(Envelope box, FeatureDataSet ds)        {            var dtb = this.data.Clone();            dtb.BeginLoadData();           //循环判断数据是否在地图视野范围之内            foreach (var section in dataList)            {                if (section.Geometry != null)                {   //对数据外界矩形进行相交判断。                    if (box.Intersects(section.Geometry.EnvelopeInternal))                    {//创建行数据                        var row = dtb.NewRow();                        row["Name"] = section.Name;//名称赋值                        row.Geometry = section.OutlineGeometry;//几何对象赋值                        dtb.Rows.Add(row);//添加到返回集                    }                }            }            dtb.EndLoadData();            dtb.AcceptChanges();            ds.Tables.Add(dtb);        }

通过上面的方法,不管是文件的,数据库的或网络中的数据,都可以采用以上的方法,获取数据,返回给sharpmap的layer类,来完成数据的上图显示。

总结:

sharpmap的显示流程:map调用Layer的Render()方法,Layer调用Provider的ExecuteIntersectionQuery()方法获取图层数据,Layer获取后,对数据进行绘制。这是sharpmap的核心,所有其它的类方法都是围绕上面的流程开展的。

提供以通用图层,如:VectorLayer、WmsLayer、LabelLayer。通用数据源:ShapeFile、GeometryProvider等。

在完成图层绘制时,提供通用的绘制方法类:VectorStyle、LabelStyle。


0 0
原创粉丝点击