• 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文件,格式如下:

      

  • 相关阅读:
    实战DeviceIoControl 之中的一个:通过API訪问设备驱动程序
    hibernate官方新手教程 (转载)
    C++ 清空消息队列
    java中接口的定义与实现
    Scrum 学习笔记
    Ubuntu中全然卸载Nginx
    ScrollView 在嵌套 ViewPager 时出现的问题
    Java的递归算法
    Android GPS获取当前经纬度坐标
    【数据结构】——排序算法——1.1、直接插入排序
  • 原文地址:https://www.cnblogs.com/PIESat/p/10168304.html
Copyright © 2020-2023  润新知