1. Point,LineStrings
共有的变量和方法
- object.area
Returns the area (float) of the object.
- object.bounds
返回对象的(minx,miny,maxx,maxy)元组(float类型)
- object.length
返回对象的长度
- object.geom_type
返回对象类型
- object.distance(other)
返回本对象和另一个对象的距离
- object.representative_point()
Returns a cheaply computed point that is guaranteed to be within the geometric object.
import math from shapely.geometry import Point from shapely.geometry import LineString point = Point(0,0) point_2 = Point((0,0)) point_3 = Point(point) print(point.area) # 0 print(point.length) # 0 print(point.coords) print(list(point.coords)) #
# [(0.0, 0.0)] print(Point(0,0).distance(Point(0,1))) # 1.0 # h*w-h2*w2/ line = LineString([(0,0),(1,1),(1,2)]) print(line.area) # 0.0 print(line.coords) print(list(line.coords)) #
# [(0.0, 0.0), (1.0, 1.0), (1.0, 2.0)] print(line.bounds) # (0.0, 0.0, 1.0, 2.0) print(line.length) # 2.3095=sqrt(2)+1 print(math.sqrt(2)) # 1.30951 print(line.geom_type) # LineString
2. 多边形

import numpy as np import shapely from shapely.geometry import Polygon, MultiPoint # 多边形 line1 = [2, 0, 2, 2, 0, 0, 0, 2] # 四边形四个点坐标的一维数组表示,[x,y,x,y....] a = np.array(line1).reshape(4, 2) # 四边形二维坐标表示 poly1 = Polygon(a).convex_hull # python四边形对象,会自动计算四个点,最后四个点顺序为: 左下 左上 右上 右下 左下 print(Polygon(a).convex_hull) # 可以打印看看是不是这样子 line2 = [1, 1, 4, 1, 4, 4, 1, 4] b = np.array(line2).reshape(4, 2) poly2 = Polygon(b).convex_hull print(poly2.convex_hull) union_poly = np.concatenate((a, b)) # 合并两个box坐标,变为8*2 print(union_poly) print(MultiPoint(union_poly).convex_hull) # 包含两四边形最小的多边形点 if not poly1.intersects(poly2): # 如果两四边形不相交 iou = 0 else: try: inter_area = poly1.intersection(poly2).area # 相交面积 print(inter_area) union_area_2 = poly1.area + poly2.area - inter_area print('union_area_2', union_area_2) # 12.0 union_area = MultiPoint(union_poly).convex_hull.area print('union_area', union_area) # 14.0 if union_area == 0: iou = 0 iou_1 = float(inter_area) / (union_area-inter_area) #错了 iou_2 = float(inter_area) / union_area iou_3=float(inter_area) /(poly1.area+poly2.area-inter_area) print(iou_1, iou_2, iou_3) # 0.007693 0.057142 0.033333 # 源码中给出了两种IOU计算方式,第一种计算的是: 交集部分/包含两个四边形最小多边形的面积 # 第二种: 交集 / 并集(常见矩形框IOU计算方式) iou = iou_3 except shapely.geos.TopologicalError: print('shapely.geos.TopologicalError occured, iou set to 0') iou = 0 print(a) print(iou)
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/203192.html原文链接:https://javaforall.net
