当前位置: 首页 > 知识库问答 >
问题:

从命名坐标的数据表构建二维多边形列表

养鸿运
2023-03-14

我有一个数据表zct(区域/多边形坐标表),其列定义为:

private void buildZoneDataTable()
        {
            // Add columns to the DataTable.
            zct.Columns.Add("Zone Name", System.Type.GetType("System.String"));
            zct.Columns.Add("X_Coordinate", System.Type.GetType("System.Double"));
            zct.Columns.Add("Y_Coordinate", System.Type.GetType("System.Double"));
            coordDGV.DataSource = zct;
            foreach (DataGridViewColumn dgvcol in coordDGV.Columns)
            {
                dgvcol.SortMode = DataGridViewColumnSortMode.NotSortable;
            }

zct的每一行都是我稍后将呈现的多边形顶点的坐标,但现在我的目标是拥有所有命名区域/多边形及其多边形坐标的嵌套列表。

到目前为止,我已经创建了一个polyzone:

        private void BuildZoneList()
        {
            //iterate through all rows of the zct
            for (int i = 0; i < zct.Rows.Count; i++)
            {
                //if first row, or row I has a different name start new zone
                if(i == 0 || zct.Rows[i][0] != zct.Rows[i-1][0])
                {
                //create new polyzone named by the first column 
                 PolyZone pZone = new PolyZone(zct.Rows[i][0].ToString());
                }           
            }
        }

下面是我的polyzone类的一个片段:

    public class PolyZone
    {

        public string polyZoneName;
        List<Point3D> pointList = new List<Point3D>(0);
        Point3D polyCenter = new Point3D(0,0,0);

        public PolyZone(string zoneName)
        {
            polyZoneName = zoneName;
        }

        public void add(Point3D point3D)
        {
            pointList.Append(point3D);

        }

共有1个答案

屠盛
2023-03-14

请尝试以下操作:

   class Program
    {
       static void Main(string[] args)
        {
           DataTable zct = new DataTable();
           zct.Columns.Add("Zone Name", System.Type.GetType("System.String"));
           zct.Columns.Add("X_Coordinate", System.Type.GetType("System.Double"));
           zct.Columns.Add("Y_Coordinate", System.Type.GetType("System.Double"));
           zct.Columns.Add("Z_Coordinate", System.Type.GetType("System.Double"));

           var zones = zct.AsEnumerable().GroupBy(x => x.Field<string>("Zone Name")).ToList();
           List<PolyZone> polyZones = new List<PolyZone>();
           foreach (var zone in zones)
           {
               PolyZone newZone = new PolyZone(zone.Key);
               polyZones.Add(newZone);

               foreach (DataRow row in zone)
               {
                   double x = double.Parse(row.Field<string>("X_Coordinate"));
                   double y = double.Parse(row.Field<string>("Y_Coordinate"));
                   double z = double.Parse(row.Field<string>("Z_Coordinate"));
                   newZone.add(new Point3D(x, y, z));
               }
           }


        }
 
    }
    public class PolyZone
    {

        public string polyZoneName;
        List<Point3D> pointList = new List<Point3D>(0);
        Point3D polyCenter = new Point3D(0, 0, 0);

        public PolyZone(string zoneName)
        {
            polyZoneName = zoneName;
        }

        public void add(Point3D point3D)
        {
            pointList.Add(point3D);

        }
    }
 类似资料:
  • 我试图从顶点位置创建一组多边形,保存在X,Y格式。 下面是我的数据的一个例子——每行代表一个多边形的顶点。多边形是正方形 我正在使用,因此我的数据需要在列表中。所以我创建了一个循环来尝试从矩阵中将我的数据转换为列表格式。 我创建了一个循环,遵循我在这个网站上的其他一些问题中找到的代码。我突破了每一步,试图理解为什么我只有一个多边形作为输出,即使我有2组点。 你能帮我理解我如何调整代码写出两个多边形

  • 我有一些关于点为双类型的多边形的问题...我要做的是,给定点,创建多边形,然后测试1个具体点是否在多边形内。 所以我知道在Java中有一个类,叫做多边形,用得像这样:(三角形) 但我的“多边形”必须是“双”类型,而不是“int”(简单示例) 在我的项目中,我真的不需要在小程序或类似物上绘制它,我只需要计算点是否在里面。 所以我的问题是: 有没有什么方法可以用双坐标来处理多边形,可以计算这个点(双坐

  • 我的geodataframe如下所示: 我可以在“几何体”列中看到点列表,但我想将这些点拉出并放入列表中。例如,在pandas中,您可以执行类似df['column']的操作。到列表()。但是,在尝试此操作时,我得到一个错误: 你知道我如何去掉“多边形”名称,直接得到组成该多边形的点的列表吗?说清楚,我不想要多边形的外部或边界,我想要边界内的所有点。

  • 我正在学习图的结构和算法。从概念上讲,我理解DFS、BFS,并且我可以通过一个图来实现它们,但是传统上图是如何组成的呢? 通常,我将它们看作是以边为指针的节点列表、与它们连接的节点的边列表,或者是一个2D矩阵,其中两个节点的交点arr[node_a][node_b]是边的权重。 当涉及到实际构建它的输入,我不知道从哪里开始。

  • 我有一个城市建筑物的框架。这些建筑有一个纬度和经度列,并分组到单独的管理位置。 我已经成功地创建了一个geopandas数据框,每个建筑都有一个“几何”列,其中包含形状优美的点,并在地图上用不同的颜色为每个管理位置绘制这些点。但是,是否有办法按管理位置对geodataframe进行分组,并将“几何体”列作为一个形状良好的多边形,包含每个管理位置内每个建筑对应的点? 我目前有: 但当我绘制它时: 它

  • 我使用以下方法从拉多边形中获取多边形: 但是,我正在尝试从多边形获取坐标,但我不能: poligon@polygons[1]类“Polygons”Slot“Polygon”的对象:[1]类“多边形”Slot”labpt“的对象:[1]-46.37327-23.91955 提前致谢