【问题标题】:Sectors representing and intersections in shapely形状代表和交叉的部门
【发布时间】:2019-01-21 07:10:20
【问题描述】:

我正在尝试使用 shapely 来识别扇区和矩形之间交互的区域。 所以,我的问题分为两个部分:

  1. 如何定义(创建、表示)扇形为匀称的对象(三角形也足够),我的输入是坐标 x,y 、起始角、结束角、半径。

  2. 如何计算扇区列表和多边形(矩形)之间的交互面积

谢谢

【问题讨论】:

    标签: python polygon shapely


    【解决方案1】:

    您可以使用以下功能将扇区创建为形状对象:

    from shapely.geometry import Point, Polygon
    import math
    
    def sector(center, start_angle, end_angle, radius, steps=200):
        def polar_point(origin_point, angle,  distance):
            return [origin_point.x + math.sin(math.radians(angle)) * distance, origin_point.y + math.cos(math.radians(angle)) * distance]
    
        if start_angle > end_angle:
            start_angle = start_angle - 360
        else:
            pass
        step_angle_width = (end_angle-start_angle) / steps
        sector_width = (end_angle-start_angle) 
        segment_vertices = []
    
        segment_vertices.append(polar_point(center, 0,0))
        segment_vertices.append(polar_point(center, start_angle,radius))
    
        for z in range(1, steps):
            segment_vertices.append((polar_point(center, start_angle + z * step_angle_width,radius)))
        segment_vertices.append(polar_point(center, start_angle+sector_width,radius))
        segment_vertices.append(polar_point(center, 0,0))
        return Polygon(segment_vertices)
    

    中心是一个形状匀称的点对象,步长定义了曲线的分辨率。

    所以你可以这样创建一个扇区:

    center = Point(0,0)
    sect = sector(center, 10, 60, 20)
    

    要计算交叉点的面积,首先要计算交叉点的形状:

    square = Polygon([(0,0), (0,10),(10,10), (10,0)])
    

    intersection = sect.intersection(square)
    

    此时你以这种方式获得该区域:

    calculated_area = intersection.area
    

    扇区功能特意受到https://gis.stackexchange.com/questions/67478/how-to-create-a-circle-vector-layer-with-12-sectors-with-python-pyqgis的启发

    【讨论】:

      猜你喜欢
      • 2016-12-11
      • 1970-01-01
      • 2019-06-22
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 2011-08-03
      相关资源
      最近更新 更多