各ジオメトリを扱うサンプルコード
Point
ポイントのプロパティを確認してみます。
from shapely.geometry import Point
point = Point(1.0, 2.0)
print point.area
print point.bounds
print point.length
print point.geom_type
point
当たり前ですが、ポイントなので面積と長さは0ですね。
バッファ
バッファをとってみます。
from shapely.geometry import Point
point = Point(0.0, 0.0)
polygon = point.buffer(10.0)
print polygon.area
print polygon.bounds
print polygon.length
print polygon.geom_type
polygon
ある地点に配置したポイントのバッファをとるとポリゴンを作ることができます。
距離
ジオメトリ間の距離を測ってみます。
from shapely.geometry import Point
point1 = Point(0.0, 0.0)
point2 = Point(1.0, 1.0)
point1.distance(point2)
LineString
ラインですね。ポイントの配列がラインを形成します。
from shapely.geometry import LineString
line = LineString([(0, 0), (1, 1),(1,0),(2,1)])
line
LinearRing
ラインリングは面白い考えですね。出発点に最終点のLinsStringを含みます。それぞれのLinearRingは交差または触れることができません。以下のbはポイントが交差しているので不正なラインリングですね。
from shapely.geometry.polygon import LinearRing
ring = LinearRing([(0, 0), (1, 1), (1, 0)])
ring
三点しか指定していないのにリングになりました。これがラインリングの考えですね。
Polygon
ポリゴンは通常のポリゴンと以下のように穴の開いたポリゴンも作ることができます。ただし、以下のb,c,dは不正なポリゴンと認識されます。
from shapely.geometry import Polygon
polygon = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon
from shapely.geometry import Polygon
ext = [(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)]
int = [(1, 0), (0.5, 0.5), (1, 1), (1.5, 0.5), (1, 0)][::-1]
polygon = Polygon(ext, [int])
polygon
こんな感じで穴の開いたポリゴンを作ることができます。
GeometryCollection
コレクションは、Point, Lines, LinearRing, Polygonを組み合わせたcollectionを表します。
from shapely.geometry import LineString
a = LineString([(0, 0), (1, 1), (1,2), (2,2)])
b = LineString([(0, 0), (1, 1), (2,1), (2,2)])
x = a.intersection(b)
x
二つのラインリングが交差する箇所を抽出しました。これがコレクションですね。
MultiPoint
ポイントのコレクションですね。
from shapely.geometry import MultiPoint
points = MultiPoint([(0.0, 0.0), (1.0, 1.0)])
points
MultiLineString
ラインのコレクションですね
from shapely.geometry import MultiLineString
coords = [((0, 0), (1, 1)), ((-1, 0), (1, 0))]
lines = MultiLineString(coords)
lines
MultiPolygon
ポリゴンのコレクションですね。以下のbのようなマルチポリゴンは不正なものとして扱われます。
from shapely.geometry import MultiPolygon
coords = [((0, 0), (0, 1), (1, 1), (1, 0),(, 2), (0, 3), (3, 3), (3, 2))]
polygons= MultiLineString(coords)
polygons
以上です。今回紹介したものはShapelyの基本的な考え方だけですが、いかがでしたでしょうか。個人的にはすごく便利で使い勝手のいいライブラリだと思います。興味のある方はぜひ使ってみてください。