我的问题是:如何确定已拆分的旋转矩形几何体的侧边
和侧边
是拆分该几何体的任意线串
的“左”和“右”边?
对于这个问题,"左"和"右"被定义为从节点到节点"行走"时,按顺序的LineString
拆分器的左边和右边。
我创建了此函数,用于将任意shapely
几何体(非集合)拆分为两个面——“左”和“右”:
import shapely.geometry as geo
import shapely.ops as ops
def splitLR(geom, splitter):
"""Split a geometry into a 'left' and 'right' side using the shapely API"""
if not isinstance(splitter, geo.LineString):
raise TypeError("The splitter must be a LineString")
if not splitter.is_simple:
raise ValueError("Only simple splitter objects allowed")
if hasattr(geom, "__iter__"):
raise ValueError("Geometry collections not allowed")
geom_extents = geo.GeometryCollection([geom, splitter]).minimum_rotated_rectangle
sides = ops.split(geom_extents, splitter)
try:
Aside, Bside = sides
except TypeError:
# only 1 result - rotated rectangle wasn't split
if len(ops.split(geom,splitter)) == 1:
# geom isn't split by splitter
raise ValueError("the splitter does not appear to split the geometry")
else:
# splitter too small for algorithm
raise ValueError("the splitter must extend beyond minimum_rotated_rectangle "
"of the combined geometry")
# determine which is Lside and Rside here
Lside,Rside = get_LRsides(Aside, Bside, splitter)
return tuple(side.intersection(geom) for side in (Lside, Rside))
上面的想法在此处链接的笔记本中进行了说明(与上面的链接相同):
http://nbviewer.jupyter.org/urls/dl.dropbox.com/s/ll3mchnx0jwzjnf/determine左右分开。ipynb
总结:A面和B面是围绕geom
几何体和拆分器
线串的最小旋转矩形
的两侧。当侧。执行交点(geom)
,结果是该侧包含的原始给定几何体的部分。
注意事项:
ops.split
),因为ops.split
函数只返回一个“包”的拆分对象,并且没有办法确定是哪个他们在(我知道的)一边目前我对get_LRsides
的调用只是执行这个函数,显然是没有价值的:
def get_LRsides(Aside, Bside, splitter):
"""Determine the 'left' and 'right' sides of an already split geometry"""
return Aside,Bside
我如何才能成功地将甲和乙标为“左”和“右”?
我不是工具箱中最清晰的地理信息系统工具,我正努力想办法在公认的答案中“在旁边添加一个点”到线性环中。这是我能找到的黑客。
我将相交分离器LineString的两点投射到第一个多边形的外部,这为我提供了一个沿着外部线串的距离。如果距离正在增加,那么第一个多边形是分裂的“右侧”。
下面是一个示例代码:
from shapely.ops import split
from shapely.geometry import Polygon, LineString, Point
def rhs_split(poly, splitter):
intersect_splitter = splitter.intersection(poly)
geomcollect = split(poly, splitter)
polya, polyb = geomcollect.geoms[0], geomcollect.geoms[1]
# Test directionality
pt0 = Point(intersect_splitter.coords[0])
pt1 = Point(intersect_splitter.coords[1])
start_dist = polya.exterior.project(pt0)
end_dist = polya.exterior.project(pt1)
return polya if end_dist > start_dist else polyb
print(
rhs_split(
Polygon([(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]),
LineString([(0.5, -0.1), (0.5, 1.1)]),
)
)
# POLYGON ((0.5 1, 1 1, 1 0, 0.5 0, 0.5 1))
print(
rhs_split(
Polygon([(0, 0), (0, 1), (1, 1), (1, 0), (0, 0)]),
LineString([(0.5, 1.1), (0.5, -0.1)]),
)
)
# POLYGON ((0 0, 0 1, 0.5 1, 0.5 0, 0 0))
这可能会起作用:
Linearring
object.is_ccw
True
,则Aside位于拆分器的左侧。https://shapely.readthedocs.io/en/stable/manual.html#object.is_ccw
问题内容: 以任何方式在左侧和右侧(水平?)上获得盒子阴影,而没有骇客或图像。我在用: 但它给周围的阴影。 我周围没有边界。 问题答案: 注意: 我建议在下面查看@Hamish的答案;它不涉及此处所述解决方案中不完善的“掩盖”。 您可以使用多个框阴影来接近;每一侧一个 编辑 在顶部和底部的顶部再添加2个阴影,以掩盖流血的阴影。
我需要从条形图中删除右侧图例。 这是我的密码。 谢谢
问题内容: 我想在的标题上添加一个小图标。因此,我设置了一个空标题并添加了一个包含a 和as的图形。这样,图标显示在文本结尾附近。我希望它始终显示在的右侧边框旁边。我怎样才能做到这一点?我也尝试使用a 并将其添加到中间,在右侧添加,但是没有获得TitledPane的最大大小。所以我试图将MaxWidth设置为Max- Value,但这没有帮助 有人知道该怎么办吗? 编辑:我创建的“自定义”控件将在
我有一个geopandas df和一列形状优美的点对象。我想从shapely point对象中提取坐标(lat/lon),以生成纬度和经度列。一定有一个简单的方法可以做到这一点,但我想不出来。 我知道你可以像这样提取单个坐标: 我可以为整个df创建一个函数,但我认为有一种更高效、更优雅的方法。
虽然这一形状的名字叫立方体(CubeGeometry),但它其实是长方体,也就是长宽高可以设置为不同的值。其构造函数是: THREE.CubeGeometry(width, height, depth, widthSegments, heightSegments, depthSegments) 这里,width是x方向上的长度;height是y方向上的长度;depth是z方向上的长度;后三个参数
在创建物体时,需要传入两个参数,一个是几何形状(Geometry),另一个是材质(Material)。本章将介绍几何形状的创建,第4章介绍材质,第5章介绍如何使用这两者创建网格。 几何形状(Geometry)最主要的功能是储存了一个物体的顶点信息。WebGL需要程序员指定每个顶点的位置,而在Three.js中,可以通过指定一些特征来创建几何形状,例如使用半径创建一个球体,从而省去程序员一个个指定顶