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) |
创建空间参考 |
|
IField |
Name,AliasName,DefaultValue |
字段属性 |
|
IFields |
AddField(IField ptrField) |
添加字段 |
|
IFeature |
SetValue(int nIndex, object field) |
设置字段值 |
|
IFeatureClass |
AddFeature(IFeature ptrFeature) |
添加要素 |
2.4示例代码
|
项目路径 |
百度云盘地址下/PIE示例程序/04数据操作/01.矢量数据的创建 |
|
视频路径 |
百度云盘地址下/PIE视频教程/04数据操作/01.矢量数据的创建.avi |
|
示例代码 |
|
![]() 1 //创建矢量要素数据集
2 //1创建路径
3 SaveFileDialog saveFileDialog = new SaveFileDialog();
4 saveFileDialog.Title = "待创建的矢量要素数据集";
5 saveFileDialog.Filter = "ShapeFile|*.shp";
6 if (saveFileDialog.ShowDialog() != DialogResult.OK) return;
7
8 //2设置字段
9 IField field1 = new Field("Name", FieldType.OFTString, 50, 1);
10 field1.Name = "Name";
11 field1.AliasName = "名称";
12
13 IField field2 = new Field("Level", FieldType.OFTInteger, 50, 1);
14 field2.Name = "Level";
15 field2.AliasName = "级别";
16
17 //3添加字段
18 IFields fields = new Fields();
19 fields.AddField(field1);
20 fields.AddField(field2);
21
22 string path = saveFileDialog.FileName;
23 //4创建空间参考信息
24 ISpatialReference spatialReference = SpatialReferenceFactory.CreateSpatialReference((int)PIE.Geometry.GeoCSType.GeoCSType_WGS1984);
25 //5创建矢量要素集
26 IFeatureDataset newFeatureDataset = DatasetFactory.CreateFeatureDataset(path, fields, GeometryType.GeometryPoint, spatialReference, "SHP");
27
28 #region 6添加point 信息
29 //A POINT
30 IFeature feature = newFeatureDataset.CreateNewFeature();
31 IPoint point = new PIE.Geometry.Point();
32 point.PutCoords(90, 45);
33 feature.Geometry = point as IGeometry;
34
35 feature.FID = 02;
36 feature.SetValue(0, "A");
37 feature.SetValue(1, 2);
38
39 //B POINT
40 IFeature feature2 =newFeatureDataset.CreateNewFeature();
41 IPoint point2 = new PIE.Geometry.Point();
42 point2.PutCoords(93, 40);
43 feature2.Geometry = point2 as IGeometry;
44
45 feature2.FID = 01;
46 feature2.SetValue(0, "B");
47 feature2.SetValue(1, 3);
48 #endregion
49 //将要素字段信息添加进矢量数据集里面
50 newFeatureDataset.AddFeature(feature);
51 newFeatureDataset.AddFeature(feature2);
52 //第一种方法:
53 IFeatureLayer featureLayer = new FeatureLayer();
54 IFeatureClass fClass = new FeatureClass(newFeatureDataset);
55 featureLayer.FeatureClass = fClass;
56
57 //第二种方法:
58 // IFeatureLayer featureLayer = LayerFactory.CreateDefaultFeatureLayer(newFeatureDataset);
59 //创建空间索引,为要素数据集创建空间索引
60 newFeatureDataset.CreateSpatialIndex(1);
61 //(featureLayer.FeatureClass as IFeatureDataset).CreateSpatialIndex(2);
62 m_mapControl.FocusMap.AddLayer(featureLayer as ILayer); m_mapControl.PartialRefresh(ViewDrawPhaseType.ViewAll);
|
|
2.5示例截图
生成的shape文件,格式如下:

来源:https://www.cnblogs.com/PIESat/p/10168304.html

