部门代表和交叉相交

时间:2019-01-21 07:10:21

标签: python polygon shapely

我正试图用形状来识别在扇形和矩形之间相互作用的区域。 因此,我的问题分为两部分:

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

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

谢谢

1 个答案:

答案 0 :(得分:2)

您可以使用以下功能将扇形创建为匀称的对象:

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)

enter image description here

要首先计算交叉点的面积,请按照以下方式计算交叉点的形状:

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

enter image description here

intersection = sect.intersection(square)

enter image description here

此时,您可以通过以下方式获取区域:

calculated_area = intersection.area

部门功能是受https://gis.stackexchange.com/questions/67478/how-to-create-a-circle-vector-layer-with-12-sectors-with-python-pyqgis启发的