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); |
2.5示例截图
生成的shape文件,格式如下:
以上是关于PIE SDK矢量数据的创建的主要内容,如果未能解决你的问题,请参考以下文章