• PIE SDK打开自定义矢量数据


     

    1. 数据介绍

        信息提取和解译的过程中,经常会生成一部分中间临时矢量数据,这些数据在执行完对应操作后就失去了存在的价值,针对这种情况,PIE增加了内存矢量数据集,来协助用户完成对自定义矢量数据的读取和显示。

        下面以Micaps1类数据为例介绍自定义矢量数据的构建和显示。

    2. 实现思路及原理说明

    第一步

    构建数据的字段、空间参考等信息;

    第二步

    根据字段和空间参考信息创建内存矢量数据集;

    第三步

    在内存矢量数据集中逐条添加数据记录(包括几何图形和属性);

    第四步

    通过内存数据集创建矢量图层;

    第五步

    添加第四步中的图层到地图,并刷新;

    3. 核心接口与方法

    接口/类

    方法

    说明

    IField

    构造函数

    构造字段

    IFields

    AddField ()

    添加字段

    DatasetFactory

    CreateFeatureDataset

    创建数据集

    IFeatureDataset

    CreateNewFeature()

    创建要素

    AddFeature()

    添加要素

    IFeature

    SetValue()

    属性赋值

    4. 示例代码

    项目名称

    百度云盘地址下/PIE示例程序/03.数据加载/10.打开自定义矢量数据

    数据位置

    百度云盘地址下/PIE示例数据/矢量数据/Micaps/micaps1下数据

    视频位置

    百度云盘地址下/PIE视频教程/03.数据加载/10.打开自定义矢量数据.avi

    示例代码

     1 方法(一)打开自定义矢量数据
     2 //以解析Micaps1数据为例
     3     OpenFileDialog openFileDialog = new OpenFileDialog();
     4     openFileDialog.Filter = "Micaps文件(*.000)|*.000";
     5     if (openFileDialog.ShowDialog() == DialogResult.OK)
     6     {
     7         IFeatureLayer defineLayer = OpenDefineShp(openFileDialog.FileName);
     8         if (defineLayer != null)
     9         {
    10 (defineLayer as ILayer).Name = "自定义矢量图层";
    11             mapControlMain.FocusMap.AddLayer(defineLayer as ILayer);
    12             mapControlMain.ActiveView.PartialRefresh(ViewDrawPhaseType.ViewAll);
    13         }
    14 }
    15 /// <summary>
    16 /// 解析自定义数据,生成矢量
    17 /// 以解析Micaps1数据为例,字段只添加站号、经度、纬度、海拔高度
    18 /// </summary>
    19 /// <param name="filePath">输出SHP文件路径</param>
    20 /// <returns></returns>
    21   private IFeatureLayer OpenDefineShp(string filePath)
    22 {
    23     IFeatureLayer featureLayer = null;
    24     int count = 0;//记录读取数据的行数
    25 string[] lineValues = null;//每一行的数据值
    26     //字段声明
    27         IField field_id = new Field("PointID", FieldType.OFTInteger, 20, 4);
    28         field_id.AliasName = "站号";
    29 
    30         IField field_x = new Field("lon", FieldType.OFTInteger, 20, 4);
    31         field_x.AliasName = "经度";
    32 
    33         IField field_y = new Field("lat", FieldType.OFTInteger, 20, 4);
    34         field_y.AliasName = "纬度";
    35 
    36         IField field_h = new Field("height", FieldType.OFTInteger, 20, 4);
    37         field_h.AliasName = "海拔高度";
    38 
    39         IFields fields = new Fields();
    40         fields.AddField(field_id);
    41         fields.AddField(field_x);
    42         fields.AddField(field_y);
    43         fields.AddField(field_h);
    44         //建立内存数据集
    45         IFeatureDataset pDataset = PIE.DataSource.DatasetFactory.CreateFeatureDataset("", fields, GeometryType.GeometryPoint, null, "MEM");
    46         //解析数据文件,写入数据集中
    47         string[] valueLines = System.IO.File.ReadAllLines(filePath);
    48         char[] charSeperate = { ' ' };
    49         for (int j = 0; j < valueLines.Length; j++)
    50         {
    51             string str = valueLines[j];
    52             if (count == 0 || count == 1)
    53             {
    54                 count = count + 1;
    55                 continue;
    56             }
    57             //解析字符串,生成Feature
    58             IFeature newFeature = pDataset.CreateNewFeature();
    59             lineValues = str.Split(charSeperate, StringSplitOptions.RemoveEmptyEntries);
    60             //字段赋值
    61             newFeature.SetValue(0, Convert.ToInt32(lineValues[0]));
    62             newFeature.SetValue(1, Convert.ToDouble(lineValues[1]));
    63             newFeature.SetValue(2, Convert.ToDouble(lineValues[2]));
    64             newFeature.SetValue(3, Convert.ToDouble(lineValues[3]));
    65 
    66             //生成Geometry
    67             IPoint point = new PIE.Geometry.Point();
    68             point.PutCoords(Convert.ToDouble(lineValues[1]), Convert.ToDouble(lineValues[2]));
    69             newFeature.Geometry = point as IGeometry;
    70             pDataset.AddFeature(newFeature);
    71             count = count + 1;
    72       (newFeature as IDisposable).Dispose();
    73         }
    74         featureLayer = PIE.Carto.LayerFactory.CreateDefaultFeatureLayer(pDataset);   
    75     return featureLayer;
    76 }
    View Code

    5. 示例截图

     

  • 相关阅读:
    内网或无域名服务器集成微信公众号接口
    记录一次重新学习SetInternal和SetTimeout
    SQLServer日志过大导致还原失败的解决方案
    批量修改SQLServer数据库表字段属性
    收缩SQLServer数据库解决日志占用空间过大(2008R2以上版本)
    SAP GUI安装出现ocx错误提示的解决办法
    .NetCore自动转换枚举类显示自定义中文名称
    EFCore-脚手架Scaffold发生Build Failed问题的终极解决
    .NetCore自定义WebAPI返回Json的格式大小写的三种方式
    存储过程模糊搜索,按匹配率排序初探
  • 原文地址:https://www.cnblogs.com/PIESat/p/10145048.html
Copyright © 2020-2023  润新知