PIE SDK矢量数据的创建

Posted piesat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

创建空间参考

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);
View Code

2.5示例截图

技术分享图片 

生成的shape文件,格式如下:

  技术分享图片

以上是关于PIE SDK矢量数据的创建的主要内容,如果未能解决你的问题,请参考以下文章

PIE SDK打开自定义矢量数据

PIE SDK矢量数据项查看

PIE SDK的矢量裁剪矢量文件的Algo

PIE SDK矢量自定义渲染

PIE SDK矢量透明度标注控制

PIE-Basic 矢量创建