python:shapely模組
技術標籤:第三方模組
目錄
一、幾何物件
1、點(Point)
from shapely.geometry import Point
point = Point(0.0, 0.0)
屬性 | 說明 |
---|---|
area | 點的面積(面積為0) |
length | 點的周長(周長為0) |
coords | 點的座標值(通過list方法轉為[(0.0, 0.0)]) |
x | 點的x座標值 |
y | 點的y座標值 |
z | 點的z座標值 |
2、線(LineString)
from shapely.geometry import LineString
line = LineString([(0, 0), (1, 1)])
屬性 | 說明 |
---|---|
area | 線的面積(面積為0) |
length | 線的周長) |
interpolate(distance, normalized=False) | 返回指定距離處的點,normalized=True, 則距離是幾何物件長度的一部分 |
project(other, normalized=False) | 返回該幾何物件到最接近另一個物件的點的距離,normalized=True, 歸一化為物件長度的距離 |
3、閉合線(LinearRing)
通過在第一個索引和最後一個索引中傳遞相同的值,可以顯式關閉該序列。 否則,通過將第一個元組複製到最後一個索引來隱式關閉序列
4、多邊形(Polygon)
from shapely.geometry import Polygon
polygon = Polygon([(0, 0), (1, 1), (1, 0)])
屬性 | 說明 |
---|---|
exterior.coords | 外部輪廓的點 |
interiors.coords | 內部輪廓的點 |
構建矩形多邊形
from shapely.geometry import box
# box(minx, miny, maxx, maxy, ccw=True), 預設情況下右下角作為第一個點,為逆時針順序
b = box(0.0, 0.0, 1.0, 1.0)
list(b.exterior.coords)
# [(1.0, 0.0), (1.0, 1.0), (0.0, 1.0), (0.0, 0.0), (1.0, 0.0)]
獲取已知方向的多邊形
from shapely.geometry import Polygon
from shapely.geometry import polygon
p1 = Polygon([(0, 0), (1, 1), (1, 0)])
p = polygon.orient(p1, sign=1.0)
# sign=1:外環逆時針,內環順時針,sign=-1:外環順時針,內環逆時針
list(p.exterior.coords)
# [(0.0, 0.0), (1.0, 0.0), (1.0, 1.0), (0.0, 0.0)]
5、集合(Collections)
多個幾何物件可以通過 geoms 或者
in
/list()
, 進行迭代獲取GeometryCollection的成員
6、多個點(MultiPoint)
建構函式還接受另一個MultiPoint例項或Point例項的無序序列,從而進行復制
7、多條線(MultiLineString)
建構函式還接受MultiLineString的另一個例項或LineString例項的無序序列,從而進行復制
8、多個多邊形(MultiPolygon)
MultiPolygon建構函式採用一系列外部環和孔列表元組:[((a1, …, aM), [(b1, …, bN), …]), …]
建構函式還接受無序的Polygon例項序列,從而進行復制
二、屬性和方法
性質 | 說明 |
---|---|
area | 面積 |
bounds | 邊界元組(Xmin, Ymin, Xmax, Ymax) |
length | 周長 |
minimum_clearance | 最小間隙,返回可以移動節點以產生無效幾何的最小距離,不存在最小間隙,則將返回math.infinity |
geom_type | 返回幾何物件的型別 |
distance(obj) | 到另一個幾何物件的最小距離 |
hausdorff_distance(obj) | 到另一個幾何物件的Hausdorff距離(到另一個幾何物件最近點的最大距離) |
representative_point() | 返回保證在幾何物件內的廉價計算點 |
has_z | 是否有z座標 |
is_ccw | LinearRing物件是否逆時針 |
is_empty | 是否為空 |
is_ring | 是否為封閉且簡單的LineString |
is_simple | 是否交叉 |
is_valid | 是否有效,有效的LinearRing不能在一個點上交叉或接觸到自己,有效的Polygon不能擁有任何重疊的外環或內環,有效的MultiPolygon不能包含任何重疊的多邊形 |
_eq_(obj) | 兩個物件幾何型別相同且座標精確匹配,返回True |
equals(obj) | 兩個物件集合理論上的邊界,內部和外部一致,返回True |
almost_equals(obj, decimal=6) | 兩個物件在指定點的小數點精度上的所有點都近似相等,則返回True |
contains(obj) | 另一個物件沒有點在物件外部,並且至少有一個點在物件(a包含b),返回True |
within(obj) | 物件的邊界和內部僅與另一個的內部(而不是其邊界或外部)相交(a被包含於b)返回True |
crosses(obj) | 物件的內部與另一個的內部相交但不包含該物件,並且交集的尺寸小於一個或另一個的尺寸(a,b相交),則返回True |
disjoint(obj) | 物件的邊界和內部與其他物件都不相交(a,b不相交),則返回True |
intersects(obj) | 如果物件的邊界或內部以任何方式相交與另一個物件(a,b相交),則返回True(intersects 是 disjoint 的逆函式) |
overlaps(obj) | 如果兩個物件相交intersects 但互相都不包含(a,b重疊),則返回True |
touches(obj) | 如果兩個物件至少有一個公共點,並且它們的內部不與另一個的任何部分相交(a,b相切),則返回True |
relate(obj) | 返回物件內部,邊界,外部與另一個幾何物件的DE-9IM關係矩陣的字串表示 |
relate_pattern(obj, pattern) | 如果幾何之間的關係的DE-9IM字串滿足該模式,則返回True |
boundary | 返回表示物件的集合論邊界的低維物件 |
centroid | 返回物件的幾何質心 |
difference(obj) | 返回組成該幾何物件的點的表示,這些點不組成另一個物件,a - (a,b相交的部分) 即 a - (a∩b) |
intersection(obj) | 返回此物件與另一個幾何物件的交集的表示形式,a,b相交的部分 即 a∩b |
symmetric_difference(obj) | 返回此物件中不在另一個幾何物件中的點以及另一個不在此幾何物件中的點的表示,a,b的並集-a,b的交集 即 (a∪b) - (a∩b) |
union(obj) | 返回此物件和另一個幾何物件的點並集的表示形式,a,b的並集 即 a∪b,更高效的方法: shapely.ops.unary_union() |
shapely.ops.unary_union(geoms) | 返回給定幾何物件的並集表示,重疊的多邊形將被合併.線會溶解並結點, 重複的點將被合併,比union() 更有效,可用於嘗試修復無效的MultiPolygons, 面積可能會不一樣 |
convex_hull | 返回包含物件中所有點的最小凸多邊形的表示形式,除非物件中的點數少於三個。對於兩點,返回LineString;對於一點,返回本身 |
envelope | 返回包含物件的點或最小矩形多邊形(邊與座標軸平行)的表示形式 |
minimum_rotated_rectangle | 返回包含物件的最小矩形多邊形(不一定平行於座標軸),線或點, 返回本身 |
- object.buffer(distance, resolution=16, cap_style=1, join_style=1,
mitre_limit=5.0)
返回此幾何物件給定距離內所有點的近似表示
distance: 為正 擴張,為負侵蝕
resolution: 近似於圍繞一個點的四分之一圓的線段數 預設值16近似於圓形.面積的99.8%
cap_style:集合樣式 1 round 圓形, 2 flat 扁平, 3 square 正方形
join_style:線條相交處的樣式 1 round 圓角 2 mitre 方角 3 bevel 切掉頂角
- object.parallel_offset(distance, side, resolution=16, join_style=1,
mitre_limit=5.0)
僅適用於 LineString或LineRing,返回距物件左側或右側一定距離的LineString或MultiLineString
distance:必須是浮點數, 平行偏移量
side: 根據LineString的給定幾何點的方向來確定的方向(左右),left:與LineString或LineRing 同向,right: 與LineString或LineRing 反向
resolution:近似於圍繞一個點的四分之一圓的線段數 預設值16
join_style: 線條相交處的樣式 1 round 圓角 2 mitre 方角 3 bevel 切掉頂角
mitre_limit: 平行線的距離與指定距離的比 就是斜角比, 超過,邊角會變成倒角
- object.simplify(tolerance, preserve_topology=True)
返回幾何物件的簡化表示,簡化後的物件中的所有點將在原始幾何體的公差距離內
preserve_topology:預設為True, 使用較慢的演算法保留拓撲結構,False, 使用更快的Douglas-Peucker 演算法保留拓撲結構
三、仿射變換
- shapely.affinity.affine_transform(geom, matrix)
返回經過仿射變換後的矩陣 係數矩陣以2D或3D轉換的列表或元組形式分別提供6或12個項
2D仿射變換, 矩陣為6個引數 [a, b, d, e, xoff, yoff]
3D仿射變換, 矩陣為12個引數 [a, b, c, d, e, f, g, h, i, xoff, yoff, zoff]
- shapely.affinity.rotate(geom, angle, origin=‘center’, use_radians=False)
返回二維平面上的旋轉幾何
>> from shapely import affinity
>>> line = LineString([(1, 3), (1, 1), (4, 1)])
>>> rotated_a = affinity.rotate(line, 90)
>>> rotated_b = affinity.rotate(line, 90, origin='centroid')
- shapely.affinity.scale(geom, xfact=1.0, yfact=1.0, zfact=1.0,
origin=‘center’)
返回沿每個維度按比例縮放的幾何圖形
origin: 縮放的原點,預設是center 即 2D幾何物件的邊界框中心centerid, 也可以是單個點物件 或者 座標元組
xfact / yfact / zfact: 縮放比例. 設縮放原點為(X0,Y0, Z0 ) ,正值, 直接縮放,負值, 縮放後再沿著x=X0 / y=Y0 / z=Z0 對稱
>>> triangle = Polygon([(1, 1), (2, 3), (3, 1)])
>>> triangle_a = affinity.scale(triangle, xfact=1.5, yfact=-1)
>>> triangle_a.exterior.coords[:]
[(0.5, 3.0), (2.0, 1.0), (3.5, 3.0), (0.5, 3.0)]
>>> triangle_b = affinity.scale(triangle, xfact=2, origin=(1,1))
>>> triangle_b.exterior.coords[:]
[(1.0, 1.0), (3.0, 3.0), (5.0, 1.0), (1.0, 1.0)]
- shapely.affinity.skew(geom,xs=0.0, ys=0.0, origin=‘center’,
use_radians=False)
返回傾斜的幾何體,沿x和y維度剪下角度。
use_radians=True, 以度或者弧度指定裁切角
origin: 預設是邊界框中心(幾何質心centerid),也可以是Point物件 或者座標元組
- shapely.affinity.translate(geom,xs=0.0, ys=0.0, origin=‘center’,
use_radians=False)
返回沿每個方向偏移量的平移幾何體
四、地圖投影和轉換
- shapely.ops.transform(func, geom)
將func應用於geom的所有座標,並從轉換後的座標中返回相同型別的新幾何