扇形表示的交点和形状相交

问题描述 投票:1回答:1

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

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

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

谢谢

python polygon shapely
1个回答
0
投票

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

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, steps=200)

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故意启发的

© www.soinside.com 2019 - 2024. All rights reserved.