zoukankan      html  css  js  c++  java
  • DotSpatial 创建面状要素——含空洞

    private void toolStripButton23_Click(object sender, EventArgs e)
    {
    //选择图层
    FeatureSet fs = null;
    fs = (FeatureSet) map1.Layers[0].DataSet;

    //面层增加要素

    //定义坐标List
    List<Coordinate> polygonArray1 = new List<Coordinate>();
    polygonArray1.Add(new Coordinate(625105, 5050458));
    polygonArray1.Add(new Coordinate(627115, 5050486));
    polygonArray1.Add(new Coordinate(627103, 5048421));
    polygonArray1.Add(new Coordinate(625021, 5048466));
    polygonArray1.Add(new Coordinate(625105, 5050458));
    //创建外环
    var outerRing = new LinearRing(polygonArray1);

    //判断坐标数组是否为顺时针,否则数组反转
    if (CgAlgorithms.IsCounterClockwise(outerRing.Coordinates))
    {
    outerRing = new LinearRing(outerRing.Reverse());
    }
    //定义内环1——空洞1
    var hole1 = new LinearRing(new List<Coordinate>()
    {
    new Coordinate(626304, 5050188),
    new Coordinate(626721, 5050188),
    new Coordinate(626715, 5049777),
    new Coordinate(626394, 5049625),
    new Coordinate(626186, 5049743),
    new Coordinate(626208, 5050014),
    new Coordinate(626304, 5050188),
    });
    //是否为逆时针,否则反转,必须是逆时针的,否则创建的要素的图形异常
    if (!CgAlgorithms.IsCounterClockwise(hole1.Coordinates))
    {
    hole1 = new LinearRing(hole1.Reverse());
    }
    //定义内环2
    var hole2 = new LinearRing(new List<Coordinate>()
    {
    new Coordinate(625454, 5050228),
    new Coordinate(625876, 5050250),
    new Coordinate(625876, 5049710),
    new Coordinate(625426, 5049743),
    new Coordinate(625454, 5050228)
    });
    //是否为逆时针,否则反转,必须是逆时针的,否则创建的要素的图形异常
    if (!CgAlgorithms.IsCounterClockwise(hole2.Coordinates))
    {
    hole2 = new LinearRing(hole2.Reverse());
    }

    //——将hole1、hole2 添加到数组中,进行坐标翻转
    //LinearRing[] lr2 = { hole1,hole2 };

    ////make sure the holes are oriented counterclockwise
    //for (int i = 0; i < lr2.Length; i++)
    //{
    // if (!CgAlgorithms.IsCounterClockwise(lr2[i].Coordinates))
    // {
    // lr2[i] = new LinearRing(lr2[i].Reverse());
    // }
    //}

    //创建要素
    Polygon pP = new Polygon(outerRing, new ILinearRing[] {hole1, hole2});

    IFeature polygonFeature = fs.AddFeature(pP);
    polygonID = polygonID + 1;
    polygonFeature.DataRow["Text"] = polygonID;
    fs.InitializeVertices();
    fs.Save();
    map1.ResetBuffer();

    }

  • 相关阅读:
    手把手教会你如何通过C#创建Windows Service
    推荐几款软件界面模型设计工具
    visual studio 2010小技巧
    C# 枚举在属性中运用
    C# Stream 和 byte[] 之间的转换
    推荐一款DataGridView的打印解决方案
    VB提高专辑VB编写自定义类(下)
    vb 怎么把长整型转字符串
    Android NAND: nand_dev_load_disk_state, restore failed: size required (3546398242485400641) exceeds device limit (6920
    VB中各种类型的转换
  • 原文地址:https://www.cnblogs.com/kogame/p/5122538.html
Copyright © 2011-2022 走看看