应用线来剪切多边形

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from matplotlib import pyplot
from descartes import PolygonPatch
from shapely.ops import polygonize
from shapely.geometry import Polygon, LineString, Point

from utils import SIZE, BLUE
from utils import plot_coords_line
from utils import plot_line
from utils import set_plot_bounds

# setup matplotlib figure that will display the results
fig = pyplot.figure(1, figsize=SIZE, dpi=90, facecolor="white")

# add a little more space around subplots
fig.subplots_adjust(hspace=.5)

# ###################################
# first plot
# display sample line and circle
# ###################################

# first figure upper left drawing
# 121 represents the number_rows, num_cols, subplot number
ax = fig.add_subplot(121)

# our demonstration geometries to see the details
line = LineString([(0, 1), (3, 1), (0, 0)])
polygon = Polygon(Point(1.5, 1).buffer(1))

# use of descartes to create polygon in matplotlib
patch1 = PolygonPatch(polygon, fc=BLUE,
                      ec=BLUE, alpha=0.5, zorder=1)

# add circle to axis in figure
ax.add_patch(patch1)

# add line using our function above
plot_line(ax, line)

# draw the line nodes using our function
plot_coords_line(ax, line)

# subplot title text
ax.set_title(‘Input line and circle‘)

# define axis ranges as list [x-min, x-max]
# added 1.5 units around object so not touching the sides
x_range = [polygon.bounds[0] - 1.5, polygon.bounds[2] + 1.5]

# y-range [y-min, y-max]
y_range = [polygon.bounds[1] - 1.0, polygon.bounds[3] + 1.0]

# set the x and y axis limits
ax.set_xlim(x_range)
ax.set_ylim(y_range)

# assing the aspect ratio
ax.set_aspect(1)

#####################################
#             second plot
#  display sample intersection
# ###################################

ax = fig.add_subplot(122)

# convert circle polygon to linestring of circle boundary
cirle_as_line = polygon.boundary

# combine new boundary lines with the input set of lines
result_union_lines = cirle_as_line.union(line)

# re-create polygons from unioned lines
new_polygons = polygonize(result_union_lines)

# stores the final split up polygons
new_cut_ply = []

# identify which new polygon we want to keep
for poly in new_polygons:
    # check if new poly is inside original otherwise ignore it
    if poly.centroid.within(polygon):
        # center_pt = poly.centroid
        # ax.plot(center_pt.x, center_pt.y, ‘o‘, color=‘#999999‘)
        print("creating new split polygon")
        patch3 = PolygonPatch(poly, fc=‘purple‘, alpha=0.5, zorder=2)
        ax.add_patch(patch3)
        # add only polygons that overlap original for export
        new_cut_ply.append(poly)
    else:
        # draw centroid of new polygon NOT inside original polygon
        # center_pt = poly.centroid
        # ax.plot(center_pt.x, center_pt.y, ‘o‘, color=‘#FF1813‘)
        print("This polygon is outside of the input features")

# write title of second plot
ax.set_title(‘Line intersects circle‘)

# define the area that plot will fit into
x_range = set_plot_bounds(polygon, 1.5)[‘xrange‘]
y_range = set_plot_bounds(polygon, 1)[‘yrange‘]

ax.set_xlim(*x_range)
ax.set_ylim(*y_range)
ax.set_aspect(1)

pyplot.show()

时间: 2024-10-07 12:08:49

应用线来剪切多边形的相关文章

java应用线上CPU过高问题排查

1.top 命令,查看占用CPU最高的PID.ps aux|grep PID 进一步确定tomcat进程出现问题.2.ps -mp pid -o THREAD,tid,time显示线程列表3.printf "%x\n" tid 线程ID转换为16进制格式.4.jstack pid | grep tid -A 30 打印线程的堆栈信息5.pstack 查看某个进程的当前线程栈运行情况

微服务应用线上性能分析

每天线程数在16:12增加,后通过jmx监控程序为,微服务业务线程增加,因为多个业务几乎每个业务统一时间16:12线程数 增加后,tp99狂飙1000倍,在系统工程师支持下查到为线上16:12执行磁盘清理文件,停止后系统线程数正常,tp99正常. 其中的一个应用平时线程数也会超过400个平时为80/90后观察到和fullgc强相关,后续需要调整gc算法避免暂停时间 过长导致线程数增加. 总结应用请求数越多,外部比如fullgc.外部程序执行比如清理磁盘程序对程序的影响越大,这时候需要尽量避免在业

Java应用线上问题排查的常用工具和方法

在长期排查线上问题的过程中,总结了一些工具的用法和排查问题的思路,这里跟大家分享一下,在遇到类似的问题时,希望能给予一些帮助. 首先讲讲工具, jvm 自带的一些工具是必须熟练掌握的,例如jstack, jmap, jstat等,它们可以帮我们去深入了解JVM正在做的事情,主要的适用领域有这些: 1.jstack jstack可以告诉你当前所有JVM线程正在做什么,包括用户线程和虚拟机线程,你可以用它来查看线程栈,并且结合Lock信息来检测是否发生了死锁和死锁的线程. 没事儿jstack一下,知

架构、职责、数据一致性

SOA架构设计经验分享—架构.职责.数据一致性 阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DDD+GRASP进行分析和设计(防止主观的判断导致错误的假设) 5.SOA分布式下的数据一致性 5.1.分布式事务(基于DTC的分布式事务) 5.2.事务补偿(提供正向或反向的操作来让数据在业务上是一致的) 5.3.异步EDA(基于异步事件流来实现柔性的

SOA架构设计经验分享—架构、职责、数据一致性

阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DDD+GRASP进行分析和设计(防止主观的判断导致错误的假设) 5.SOA分布式下的数据一致性 5.1.分布式事务(基于DTC的分布式事务) 5.2.事务补偿(提供正向或反向的操作来让数据在业务上是一致的) 5.3.异步EDA(基于异步事件流来实现柔性的分布式事务) 6.总结 1.背景介绍 最近一段时

马化腾为何建议茅台防伪使用区块链?

在5月28日的贵阳数博会上,就茅台酒的防伪打假问题,腾讯CEO马化腾表示,未来基于云端的.融合了区块链技术的联网防伪方式,要远比依靠防伪商标的传统防伪方式更为有效.区块链技术是一个中性的存在.它像是一个账本,可以记录所有的交易数据,可以用于验证信息的真伪. 其一,区块链不同于常见的中心化信息存储机构,去中心化的特性决定了区块链由众多节点共同维护数据的开放性和平等性. 其二,验证过的信息添加至区块链将会被永久储存,单个节点将无法实现对数据的修改,所以区块链的数据稳定性更高,并具有不可篡改性和不可抵

涅盘而生后的区块链正在如何影响金融,甚至全社会

互联网金融经历了野蛮生长之后也迎来了跑路.倒闭现象潮,同时人工智能.大数据.区块链等新科技正在引领互联网金融新的发展方向.尤其是区块链,这个从比特币中涅盘而生的创新技术,正在被人们认为可以重塑整个金融.与此同时,区块链也受到了风投与创业者的共同追逐,2015年,区块链成为了美国创投中获得融资最高的板块,突破10亿美元,投资比特币及区块链领域初创项目的风险投资公司已近200家. 在国内,"区块链"2016年底首度写入<"十三五"国家信息化规划>:2017年

[转]SOA架构设计经验分享&mdash;架构、职责、数据一致性

阅读目录: 1.背景介绍 2.SOA的架构层次 2.1.应用服务(原子服务) 2.2.组合服务 2.3.业务服务(编排服务) 3.SOA化的重构 3.1.保留服务空间,为了将来服务的组合 4.运用DDD+GRASP进行分析和设计(防止主观的判断导致错误的假设) 5.SOA分布式下的数据一致性 5.1.分布式事务(基于DTC的分布式事务) 5.2.事务补偿(提供正向或反向的操作来让数据在业务上是一致的) 5.3.异步EDA(基于异步事件流来实现柔性的分布式事务) 6.总结 1.背景介绍 最近一段时

微信支付四大支付模式分别有哪些区别?

微信支付是集成在微信客户端的支付功能,用户可以通过手机完成快速的支付流程.微信支付已为百货.餐厅.便利店.酒店.快递.景区.医院.售货机等提供了支付与营销的全方位支持. 目前微信支付已实现刷卡支付.扫码支付.公众号支付.APP支付,并提供企业红包.代金券.立减优惠等营销新工具,满足用户及商户的不同支付场景. 那么这四大支付模式分别有哪些区别呢? 1.刷卡支付 刷卡支付是用户展示微信钱包内的"刷卡条码/二维码"给商户系统扫描后直接完成支付的模式. 主要应用线下面对面收银的场景. 2.扫码