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

  • 相关阅读:
    好玩的贪吃蛇小游戏,有趣极了!
    vue的多选框存储值操作
    vue和jquery嵌套实现异步ajax通信
    vue的组件学习———做一个简易机器人
    vue监听属性完成首字母大小写转换
    Vue多选框的绑定
    Vue.js的简介、属性
    MySQL数据库(5)
    DRF的json web token方式完成用户认证
    DRF跨域问题
  • 原文地址:https://www.cnblogs.com/PIESat/p/10168443.html
Copyright © 2020-2023  润新知