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)

创建空间参考

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示例截图

技术分享图片

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

PIE SDK矢量数据的创建

PIE SDK矢量数据项查看

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

PIE SDK矢量自定义渲染

PIE SDK矢量透明度标注控制

PIE-Basic 矢量创建