PIE SDK内存矢量数据的创建

  

1.功能简介

    GIS将地理空间数据表示为矢量数据和栅格数据。矢量数据模型使用点、线和多边形来表示具有清晰空间位置和边界的空间要素,如控制点、河流和宗地等,每个要素被赋予一个ID,以便与其属性相关联。栅格数据模型使用一个格网和格网元胞(像元)代表空间要素,元胞值表示该元胞位置的空间要素属性。栅格数据模型适用于表示连续的要素,如海拔和降水量。

      

  [矢量数据模型]                                                        [栅格数据模型]

    PIE支持多种矢量数据的创建,下面对矢量数据格式的内存矢量数据创建功能进行介绍。

2.功能实现说明

2.1. Shape数据介绍

    Shapefile是由ESRI开发后被广泛应用的数据格式,它采用文件的方式分开存储数据的控件信息和属性信息,但其不能存储拓扑关系,具有简单、快速显示的优点。一个Shape数据的文件结构如下所示:

 

[Shape数据文件结构]

编号

后缀

文件说明

1

.shp

基本文件,存储地理要素的几何图形信息;

2

.dbf

基本文件,存储地理要素的属性信息;

3

.shx

基本文件,存储图形要素与属性信息的索引;

4

.prj

可选文件,存储数据的空间参考信息;

5

.sbn/.sbx

可选文件,存储数据的空间索引信息(ESRI创建的空间索引);

6

.qix

可选文件,存储数据的空间索引信息(PIE创建的空间索引);

[Shape数据文件结构说明]

2.2. 实现思路及原理说明

第一步

创建字段信息并添加值,创建空间参考,保存等

第二步

创建矢量要素数据集

2.3. 核心接口与方法

接口/类

方法/属性

说明

DataSource.DatasetFactory

CreateFeatureDataset(…)

创建要素数据集

Carto.LayerFactory

CreateDefaultFeatureLayer(…)

创建矢量图层

Geometry.SpatialReferenceFactory

CreateSpatialReference(string strWkt)

创建空间参考

IFeatureDataset

CreateNewFeature()

创建新要素

IField

Name,AliasName,DefaultValue

字段属性

IFields

AddField(IField ptrField)

添加字段

IFeature

SetValue(int nIndex, object field)

设置字段值

IFeatureClass

AddFeature(IFeature ptrFeature)

添加要素

2.4. 示例代码

项目路径

百度云盘地址下/PIE示例程序/04数据操作/02.内存矢量数据的创建

视频路径

百度云盘地址下/PIE视频教程/04数据操作/02.内存矢量数据的创建.avi

示例代码

 1     /// <summary>
 2         /// 创建内存矢量数据
 3         /// </summary>
 4         /// <param name="sender"></param>
 5         /// <param name="e"></param>
 6         private void toolStripButton_CreateMemShpData_Click(object sender, EventArgs e)
 7         { //1设置字段
 8             IField field1 = new Field("Name", FieldType.OFTString, 50, 1);
 9             field1.Name = "Name";
10             field1.AliasName = "名称";
11 
12             IField field2 = new Field("Level", FieldType.OFTInteger, 50, 1);
13             field2.Name = "Level";
14             field2.AliasName = "级别";
15 
16             //2添加字段
17             IFields fields = new Fields();
18             fields.AddField(field1);
19             fields.AddField(field2);
20 
21             //3创建空间参考信息
22             ISpatialReference spatialReference = SpatialReferenceFactory.CreateSpatialReference((int)PIE.Geometry.GeoCSType.GeoCSType_WGS1984);
23             //4创建矢量要素集
24             IFeatureDataset newFeatureDataset = DatasetFactory.CreateFeatureDataset("", fields, GeometryType.GeometryPoint, spatialReference, "MEM");
25 
26             #region 5添加point 信息
27             //A POINT
28             IFeature feature = newFeatureDataset.CreateNewFeature();
29             IPoint point = new PIE.Geometry.Point();
30             point.PutCoords(90, 45);
31             feature.Geometry = point as IGeometry;
32 
33             feature.FID = 02;
34             feature.SetValue(0, "A");
35             feature.SetValue(1, 2);
36 
37             //B POINT
38             IFeature feature2 = newFeatureDataset.CreateNewFeature();
39             IPoint point2 = new PIE.Geometry.Point();
40             point2.PutCoords(93, 40);
41             feature2.Geometry = point2 as IGeometry;
42 
43             feature2.FID = 01;
44             feature2.SetValue(0, "B");
45             feature2.SetValue(1, 3);
46             #endregion
47 
48             newFeatureDataset.Name = "LayerA";//设置图层的名称
49             //第一种方法
50    //IFeatureLayer featureLayer = LayerFactory.CreateDefaultFeatureLayer(newFeatureDataset);
51             //第二种方法
52             IFeatureLayer featureLayer = new FeatureLayer();
53            // IFeatureClass fClass = new FeatureClass(newFeatureDataset);
54             featureLayer.FeatureClass = new FeatureClass(newFeatureDataset);
55             featureLayer.FeatureClass.AddFeature(feature);
56             featureLayer.FeatureClass.AddFeature(feature2);
57 
58             mapControlMain.FocusMap.AddLayer(featureLayer as ILayer);          mapControlMain.PartialRefresh(ViewDrawPhaseType.ViewAll);
59         }
View Code

2.5. 示例截图

posted @ 2018-12-24 14:31  PIESAT  阅读(708)  评论(1编辑  收藏  举报