GIS奮闘記

元GISエンジニアの技術紹介ブログ。主にPythonを使用。

スポンサーリンク

PythonでGISデータを扱う際に便利なライブラリのまとめ

本日は PythonでGISデータを扱う際に便利なライブラリについてまとめてみようと思います。ほとんどが過去のエントリーで紹介しているものですが、これからGISデータを扱おうと思っている方やたくさんライブラリがある中でどういったものを選択していいのか迷っている方はぜひ参考にしてみてください。

メジャーなライブラリ

まずはこれを使っておけば間違いないというライブラリを紹介します。

GDAL

PythonのGIS系ライブラリと言えばまずGDALを思い浮かべるくらいメジャーなライブラリです。ベクターからラスター、また、データの読み込みから書き込みまで基本的なことは何でもできると考えて大丈夫です。過去のエントリーでもGDALに関していくつかの機能を紹介しています。

www.gis-py.com

www.gis-py.com

www.gis-py.com

www.gis-py.com

GeoPandas

上記で紹介したGDALも素晴らしいライブラリなのですが、最近はGeoPandasの方が人気かもしれません。こちらも基本的なことは何でもできますし、ますます機能が強化されていくと思います。もしかしたら将来はGeoPandasが超メジャーなGIS系のライブラリになるかもしれません。

www.gis-py.com

www.gis-py.com

www.gis-py.com

pyproj

座標変換用ライブラリです。座標変換をするならこれ以外に考えられません。

www.gis-py.com

geopy

ジオコーディング用ライブラリです。

www.gis-py.com

piexif

画像にジオタグを追加したり、画像に付与されているジオタグを抽出するためのライブラリです。

www.gis-py.com

Arcpy

ArcGISに限定されてしまうのですが、ArcGISを使っている方はぜひ使ってみてください。こちらは商用のエンジンに付随するライブラリですので、他のライブラリよりも機能は強力だと思います。以下のエントリー以外もArcpyに関しては本ブログで色々紹介していますので、ぜひ読んでみてください。

www.gis-py.com

www.gis-py.com

www.gis-py.com

玄人向けなライブラリ

少しマニアックなのですが、使いこなせると便利なライブラリです。

Fiona

データの読み書きに特化したシンプルなライブラリです。GeoPandasは一部機能をFionaに依存しています。Fionaを深く知ることによってGeoPandasについても深く知ることができるかと思います。

www.gis-py.com

Shapely

地理空間データを計算するためのライブラリです。こちらもFionaと同じでGeoPandasは一部機能をShapelyに依存しています。

www.gis-py.com

Folium

WEBマップを作成するためのライブラリです。WEBサイトにインタラクティブなマップを組み込みたいという場合はかなり使えると思います。

www.gis-py.com

Rasterio

本ブログでは未紹介なのですが、ラスタを扱うためのライブラリです。GDALでもラスタを扱うことはできますが、Rasterioはラスタに特化したライブラリなので、機能はこちらの方が充実しているかもしれません。

pypi.org


ざっと紹介しましたが、ほとんどのことはGeoPandas、pyproj、geopyあたりで事足りるような気がします。GIS系ライブラリについて勉強したいけど、何から手を付けていいかわからないという方はこの辺から始めるのがいいかもしれません。

また、ライブラリではないのですが、GISについて色々勉強してみたいという方は以下エントリーを参考にしてみてください。

www.gis-py.com

geopandasの使い方をマスターしよう ~Shapeファイルの読込・作成、GeoDataFrameの扱い方まで~

本日はgeopandasについて書いてみようと思います。geopandasについては以下のエントリーでも紹介しているのですが、今回はShapeファイルの読込・作成、GeoDataFrameの扱い方まで、一通りの使い方を紹介できればと思っています。

www.gis-py.com

www.gis-py.com

geopandasとは

geopandasはpandasの拡張で、地理データを含むデータをpandasのように表形式で扱うことができるGIS系のPythonライブラリです。

pandasについては以下エントリーでも紹介していますので、ぜひ読んでみてください。

www.gis-py.com

環境

Windows10
Python2.7.4
Jupyter notebook

サンプルデータ

以下エントリーで使用した日本地図を使用します。
www.gis-py.com

サンプルコード

Shapeファイル読込

import geopandas as gpd

fp = r"D:\gis-py\library\geopandas\data\japan_ver80.shp"
data = gpd.read_file(fp)

これでOKです。それでは”data”のデータタイプを確認してみようと思います。

type(data)


f:id:sanvarie:20181101153703p:plain

GeoDataFrameというデータタイプですね。pandasにDataFrame というデータタイプがあるのですが、それプラス地理データが格納されているものをGeoDataFrameと認識していただいて大丈夫だと思います。

.head()を使用することでGeoDataFrameの最初の5行を取得することができます。

data.head()


f:id:sanvarie:20181101153955p:plain

こんな風にやっても同じ結果になります。

data[0:5]

また、カラム指定してデータを取得することもできます。

data['geometry'].head()


f:id:sanvarie:20181101155250p:plain

.plot() を使用することで読み込んだShapeを視覚化することができます。

data.plot();

f:id:sanvarie:20181101154134p:plain

.crsを使用することで読み込んだShapeの座標系などを確認することができます。

data.crs


f:id:sanvarie:20181101154306p:plain

Shapeファイル作成

.to_file()でShapeファイルの作成ができます。

out = r"D:\gis-py\library\geopandas\data\japan_ver80_2.shp"
selection = data[0:50]
selection.to_file(out)

日本地図の最初の50レコードを別のShapeファイルとして作成しました。

fp_50 = r"D:\gis-py\library\geopandas\data\japan_ver80_2.shp"
data_50 = gpd.read_file(fp_50)
data_50.plot();


f:id:sanvarie:20181101154844p:plain

GeoDataFrameの扱い方

GeoDataFrameをループさせる場合はこのようにします。最初の5行を抽出して、それをループさせてみました。

selection = data[0:5]
for index, row in selection.iterrows():
    poly_area = row['geometry'].area
    print("Polygon area at index {0} is: {1:.3f}".format(index, poly_area))


f:id:sanvarie:20181101155712p:plain

新しいカラムを追加場合はこのようにします。

data['area'] = None


5行目までを確認してみました。
f:id:sanvarie:20181101155918p:plain

新しく作ったカラムにデータを格納します。geometryカラムのareaの値をareaカラムに格納します。

for index, row in data.iterrows():
    data.loc[index, 'area'] = row['geometry'].area


f:id:sanvarie:20181101160141p:plain

指定したカラムの最大値、最大値を取得することができます。

max_area = data['area'].max()
min_area = data['area'].mean()
print("Max area: %s\nMin area: %s" % (round(max_area, 2), round(min_area, 2)))


f:id:sanvarie:20181101160357p:plain

ジオメトリをGeoDataFrameに対して作ってみる

shapelyとfionaを使用します。geopandas扱う上で非常に重要なライブラリです。これらに関しては以下エントリーで紹介していますので、ぜひ読んでみてください。

www.gis-py.com

www.gis-py.com


空のGeoDataFrameを作る場合は、以下のようにします。

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point, Polygon
import fiona

newdata = gpd.GeoDataFrame()

f:id:sanvarie:20181101160740p:plain


geometryカラムを作成してみます。

newdata['geometry'] = None


f:id:sanvarie:20181101161014p:plain


Shapelyを使用してポリゴンを作成します。

coordinates = [(24.950899, 60.169158), (24.953492, 60.169158), (24.953510, 60.170104), (24.950958, 60.169990)]
poly = Polygon(coordinates)
poly

f:id:sanvarie:20181101161155p:plain

作成したポリゴンをgeometryカラムに格納します。

newdata.loc[0, 'geometry'] = poly

f:id:sanvarie:20181101161257p:plain


Fionaを使用して測地系の設定を行います。

from fiona.crs import from_epsg
newdata.crs = from_epsg(6668)
newdata.crs

f:id:sanvarie:20181101161537p:plain

Shapeファイルを作成します。

outfp = r"D:\gis-py\library\geopandas\data\test.shp"
newdata.to_file(outfp)

f:id:sanvarie:20181101161842p:plain

いかがでしたでしょうか?これ一つで大抵のことはできてしまう超便利ライブラリです。GISとPythonを使用される方は必修といっても過言ではないかもしれません。今後はgeopandasの応用について書ければと思っています。皆さんもぜひ使ってみてください。

PythonでGDALを使い倒そう!

さて、本日はGDALについて書いてみようと思います。GDLについては以下のように以前に何個か記事を書いているのですが、非常に奥が深いライブラリですので紹介していない機能がまだまだたくさん残っています。今回はラスターの扱いについて紹介します。

www.gis-py.com

www.gis-py.com

www.gis-py.com

www.gis-py.com

GDALとは

公式サイトによると、GDALはフリーのGISライブラリでラスターとベクターを扱うことができます。よくGDALはラスター用のライブラリと書かれているサイトを見るのですが、ベクターも扱うことができます。GDAL — GDAL documentation

サンプルデータ

今回はラスターの読み込みとラスターの作成を行います。以下二つのデータを用意してください。

ラスターの読み込み

以下サイトで航空写真がダウンロードできますので、今回はそのうちの一つを使ってみようと思います。
空中写真 オープンデータ

航空写真とは?という方は以下エントリーを参考にしてみてください。
www.gis-py.com

ラスターの作成

ShapeファイルをGEOTIFFに変換してみます。以下エントリーで使用した日本地図をGEOTIFFに変換します。

www.gis-py.com

サンプルコード

ラスターの読み込み

from osgeo import gdal
raster = gdal.Open( r'D:\gis-py\library\gdal\data\19640721c-wide-niigata-eq-0-1.tif')

print raster.GetProjection() #投影法
print raster.RasterXSize      #Xサイズ
print raster.RasterYSize      #Yサイズ
print raster.RasterCount    #バンド数
print raster.GetMetadata() #メタデータ
print raster.GetDriver().LongName

geotransform= raster.GetGeoTransform()
print geotransform[0] #左上X
print geotransform[3] #左上Y
print geotransform[1] #セルサイズX
print geotransform[5] #セルサイズY

このようにラスターのプロパティを取得することができます。
f:id:sanvarie:20181029161812p:plain

ラスターの作成
from osgeo import gdal, ogr

# ピクセルサイズを設定
pixel_size = 0.01
NoData_value = -9999

# Shapeファイルを指定
vector_fn = ur'D:\gis-py\library\gdal\data\japan_ver80.shp'

# 作成するTIFFを指定
raster_fn = r'D:\gis-py\library\gdal\outcome\japan_geo.tif'

# Shapeをオープン
source_ds = ogr.Open(vector_fn)
source_layer = source_ds.GetLayer()
x_min, x_max, y_min, y_max = source_layer.GetExtent()

# TIFF作成のための設定
x_res = int((x_max - x_min) / pixel_size)
y_res = int((y_max - y_min) / pixel_size)
target_ds = gdal.GetDriverByName('GTiff').Create(raster_fn, x_res, y_res, 1, gdal.GDT_Int16)
target_ds.SetGeoTransform((x_min, pixel_size, 0, y_max, 0, -pixel_size))
band = target_ds.GetRasterBand(1)
band.SetNoDataValue(NoData_value)

# ラスタ化
gdal.RasterizeLayer(target_ds, [1], source_layer, burn_values=[0])


ばっちり日本地図のShapeをGEOTIFFに変換することができました。
f:id:sanvarie:20181031165923p:plain


ラスターの読み込みで使用したソースで、作成したGEOTIFFのプロパティを確認しました。座標などが設定されていることがわかりました。
f:id:sanvarie:20181031164809p:plain

今回は以上ですが、まだまだたくさんの機能がありますので、それはまた別の機会に紹介できればと思います。本当に便利なライブラリなので、ぜひ使ってみてください。

Fionaを使ってみよう

本日はFionaを使ってみようと思います。先日、以下エントリーでShapelyを紹介しましたが、Fionaも同じようにGIS関係で有名なPythonライブラリです。

www.gis-py.com

Fionaとは

Fionaはデータの読み書きに特化したシンプルなライブラリです。逆に言うと、他のことはできないと考えてください。ただし、Shapelyやpyprojなどと連携できますので、必要に応じて相互補完することができます。

pyprojに関しては以下エントリーで紹介していますので、ぜひ読んでみてください。
www.gis-py.com


また、以下のエントリーでもFionaを紹介していますので、興味のある方はぜひ読んでみてください。
www.gis-py.com

特徴

  1. データの読み書きに特化
  2. データをGeoJsonのように扱う

GeoJsonについては以下エントリーでも紹介していますので、興味がある方は読んでみてください。
www.gis-py.com

サンプルデータ

以下エントリーで使用した、ESRIの日本地図を使ってみようと思います。
www.gis-py.com

サンプルコート

Shapeファイルを読み込んでその中の一つのフィーチャのプロパティを出力します。

データの読み込み

import fiona
import pprint

c = fiona.open(r'D:\gis-py\library\fiona\japan/japan_ver80.shp', 'r')
pprint.pprint(c[1])

このような形でデータを取得できました。
f:id:sanvarie:20181026091437p:plain

f:id:sanvarie:20181026091517p:plain

next()を使うことによって次のデータを読み込むことができます。

next(c)

f:id:sanvarie:20181026092626p:plain

また、以下のように特定の要素を取得することができます。

rec = next(c)
rec['id']
rec['geometry']['type']

さらに、以下のようなデータも取得することができます。

import fiona
c = fiona.open(r'D:\gis-py\library\fiona\japan/japan_ver80.shp', 'r')
c.driver

f:id:sanvarie:20181026091929p:plain

import fiona
c = fiona.open(r'D:\gis-py\library\fiona\japan/japan_ver80.shp', 'r')
c.crs

f:id:sanvarie:20181026092001p:plain

データの書き込み

idを変更し、propertiesにCNTRY_NAMEという要素を追加します。

既存のデータの書き換え
import fiona
import pprint
with fiona.open(r'D:\gis-py\library\fiona\japan/japan_ver80.shp') as c:
    rec = next(c)
    rec['id'] = '-1'
    rec['properties']['CNTRY_NAME'] = 'Gondor'
pprint.pprint(rec)

データが書き換わったことが分かりました。
f:id:sanvarie:20181026095232p:plain

新規レコードの追加
import fiona
with fiona.open(r'D:\gis-py\library\fiona\japan/japan_ver80.shp') as c:
    rec = next(c)
    with fiona.open(r'D:\gis-py\library\fiona\japan/japan_ver80.shp', 'a') as c:
        print(len(c))
        c.write(rec)
        print(len(c))

レコードが追加されたことが分かりました。変なメッセージが出てしまっていますが、気にしないて下さい。
f:id:sanvarie:20181026095601p:plain

新しいShapeファイルの作成

japan_ver80.shpから一レコード抽出して新しいShapeファイルを作成します。

import fiona
with fiona.open(r'D:\gis-py\library\fiona\japan/japan_ver80.shp') as source:
    source_driver = source.driver
    source_crs = source.crs
    source_schema = source.schema
    rec = next(source)
    with fiona.open(r'D:\gis-py\library\fiona\japan/test.shp','w',driver=source_driver,crs=source_crs,schema=source_schema) as c:
        print(len(c))
        c.write(rec)
        print(len(c))

レコードが追加されたことが分かりました。
f:id:sanvarie:20181026104012p:plain

Shapeファイルが作られていますね。
f:id:sanvarie:20181026104047p:plain


以上です。なかなか面白いコンセプトのライブラリだと思います。Jsonのように扱うことができるのでとても使いやすいですし、Shapelyなどと一緒に使えばさらに強力になり、鬼に金棒ですね。

Pythonを使うならpprintを使うべし

今回はGISではなく、Python一般的なお話です。皆さんはPythonを使用する際、pprintをお使いでしょうか?使ったことないという方はとても便利なので、ぜひ使ってみてください。

pprintとは

リストや辞書などをきれいに整形して出力・表示したり、文字列(str型オブジェクト)に変換するPythonの標準ライブラリ。

使い方

print

通常のprintではリストや辞書の要素が改行されることなく1行で出力されます。

lis = ["Tokyo","Osaka","Nagoya","Fukuoka","Hokkaido","Kobe","Yokohama","Okinawa"]
dic = {"apple":1, "orange":2, "banana":3, "pineapple":4, "persimmon":5, "melon":6, "watermelon":7}
print lis
print dic


やはりこれだと少し見づらいですね。
f:id:sanvarie:20181025151622p:plain

print

pprintはリストや辞書の要素が改行して見やすく出力します。

import pprint
lis = ["Tokyo","Osaka","Nagoya","Fukuoka","Hokkaido","Kobe","Yokohama","Okinawa"]
dic = {"apple":1, "orange":2, "banana":3, "pineapple":4, "persimmon":5, "melon":6, "watermelon":7}
pprint.pprint(lis)
pprint.pprint(dic)


printに比べるとものすごく見やすくなりましたね。
f:id:sanvarie:20181025151823p:plain

ちょっとした違いではあるのですが、例えばJsonなどを扱っている際はとても役に立つライブラリだと思います。本当に簡単に扱うことができるので、ぜひ今日から使ってみてください。

GISでよく使われるデータ形式

本日はGISでよく使われるデータ形式について書いてみようと思います。実はGISの世界では様々はデータ形式がありますが、その中でもよく使う形式は数個くらいかと思います。

すべての形式を説明することはちょっと難しいので、今回は私が主に使用するデータ形式を紹介します。参考までにですが、以下にArcGISでサポートされているデータ形式の一覧が記載されていますので、興味のある方はぜひ読んでみてください。
desktop.arcgis.com

そもそもArcGISって何?という方は以下のエントリーを読んでみてください。
www.gis-py.com


また、データ形式以外にもGISについて色々勉強したいと思っている方は以下のエントリーを参考にしてみてください。きっとお探しの情報を見つけることができると思います。
www.gis-py.com

Shape(*.shp)

GISで一番よく使われるデータ形式かと思います。建物や道路やなどの位置や形状、属性情報を持つベクターデータ(ポイント、ライン、ポリゴン)を格納することができます。 ESRI製で仕様も公開されています。

f:id:sanvarie:20181024134017p:plain

ファイル構成

Shapeファイルは複数のファイルから構成されていて。必須ファイルのうち 1 つでも欠けるとShapeファイルと認識することができません。

①必須ファイル:
.shp —Shape規格;地形情報の本体。
.shx —Shapeインデックス規格;地形データの前方検索、後方検索を高速にするための位置インデックス
.dbf —属性規格;各Shapeに対する縦表形式の属性情報。dBASE IV形式準拠。

②オプションのファイル:
.prj —投影規格;座標系および投影情報。投影法をWell-known text形式で記述したプレーンテキストファイル。
.sbn及び.sbx —空間インデックス;
.fbn及び.fbx —読み取り専用空間インデックス;
.ain及び.aih —テーブル内アクティブフィールドの属性インデックス
.ixs —読み書き用ファイルのジオコーディングインデックス
.mxs —読み書き用ファイルのジオコーディングインデックス(ODB規格)
.atx —DBFファイルの属性インデックス(ArcGIS Ver8以降)
.shp.xml —ISO 19115や他のXMLスキーマ言語などのXML形式地理空間メタデータ、
.cpg —使用した文字コードの識別コードページ(DBF専用)指定

DXF/DWG(*.DXF/*.DWG)

DXF/DWGはCADの世界で使われる形式ですが、GISの世界でもよく使われます。

DXFのDWG違いとは?
  • 「DXF」ファイルは、基本保存形式の違うCAD間でデータを受け渡しするための中間ファイル形式で、多くのCADが「DXF」形式の読み書きをサポートしています。
  • 「DWG」ファイルは、AutoCADの ファイル形式です。

CADなので、施設の設計などに使われることが多いです。

f:id:sanvarie:20181024135342j:plain

ラスター

ラスター データは、行と列の格子状(グリッド状)に並んだセル(ピクセル)で構成されるデータです。要するに画像ファイルです。ただ、ラスターはファイル形式ではなく、以下のようなデータの総称ですね。

f:id:sanvarie:20181024135720j:plain

ラスタデータの主なファイル形式について
形式 特徴
BMP Windowsで標準的に使われている形式
JPEG デジカメ画像やWebでの写真画像によく利用されている形式
TIFF 画像を劣化させずに圧縮が可能な形式
GIF 最大256色で構成される 。2次元の画像に適した形式
PNG Webように作られた形式。フルカラー1670万色を表現できる
GEOTIFFとは

TIFFの中でも座標を持ったTIFFはGEOTIFFと呼ばれます。GEOTIFFに関しては以下のエントリーで紹介していますので、興味のある方はぜひ読んでみてください。

www.gis-py.com

航空写真なんかは大体GEOTIFFで扱われているかと思います。航空写真に関しては以下のエントリーで紹介していますので、興味のある方はぜひ読んでみてください。
www.gis-py.com

GeoJson(*.geojson)

GeoJsonは割と最近のデータ形式で、Jsonを用いて空間データをエンコードし非空間属性を関連付けるデータ形式です。要するにテキストを使ってGISデータを扱おうということですね。

f:id:sanvarie:20181024140926p:plain

GML(*.gml)

GMLはOpen Geospatial Consortium (OGC)によって開発された地理的特徴を表現する XMLベースのマークアップ言語です。自分はあまり使うことはありませんが、かなり有名なフォーマットだと思います。

国土数値情報ダウンロードサービスなんかはGML形式でダウンロードできますね。

国土数値情報って何?という方は以下エントリーを読んでみてください。
www.gis-py.com

KML(*.kml)

KMLは、XML ベースの形式で、地理データと関連コンテンツを格納するためのデータ形式です。有名なところだとGoogle EarthはKMLのインポートとエクスポートができます。また、多くのGISエンジンがKMLに対応しているので、こちらも非常に使いやすい形式ですね。

f:id:sanvarie:20181024142017j:plain

ファイル ジオデータベース(*.gdb)

ArcGIS用のデータ形式です。ファイルジオデータベースはディスク上の 1 つのフォルダーに格納されたファイルの集合であり、空間データと非空間データの両方を格納、検索、管理できます。フォルダ(*.gdb)の中に以下のようなファイルが格納されています。

f:id:sanvarie:20181024142554p:plain

CSV(*.csv)

意外かと思いますが、CSVもよく使われる形式の一つです。
位置参照情報ダウンロードサービスではCSVデータのダウンロードが可能です。

位置参照情報って何?という方は以下エントリーを読んでみてください。
www.gis-py.com

DM(ディジタルマッピング)(*.dm)

DM は国土交通省公共測量作業規程に基づいて作成されたデータ形式です。地形データですね。ただ、このファイルをそのまま読み込むことができるGISエンジンというのはほとんどなく、実際に利用する際はShapeなどに変換する必要があります。

OSM(* .osm)

OSMはOpenStreetMap専用のファイル形式です。OpenStreetMap以外ではこの形式を利用していません。

OpenStreetMapって何?という方は以下のエントリーを読んでみてください。
www.gis-py.com

色々紹介しましたが、正直、Shape、DXF/DWG、ラスターだけでほとんど事足りるかもしれません。後は皆さんがどのようにGISを利用されているかによると思います。ただ、データ形式が色々あるといっても基本的な考え方は同じなので、使ったことないデータ形式のファイルに出会ったとしても恐れることは無いかと思います。

これからGISを使い始めるという方はまずはShapeファイルから使ってみるといいかと思います。以下のエントリーでGISデータのダウンロードができるサイトを紹介していますので、ぜひ色々なデータ形式を使ってみてください。

www.gis-py.com

Shapelyを使ってみよう

さて、本日はShapelyを使ってみようと思います。

Shapelyとは

Shapelyは、GEOSをベースとしたpythonライブラリで、ジオメトリの操作および分析のために使われます。GIS関係のPythonライブラリではかなり有名だと思います。

特徴
  1. 二点間の距離を計測したり、エリアの面積を計測することができる
  2. プロジェクション(投影法とか座標系)関係の処理はできない
  3. wktやjsonのシリアライズ、デシリアライズができる

要するに地理空間データを計算するためのライブラリですね。

投影法?座標系?という方は以下のエントリーを読んでみてください。
www.gis-py.com

また、以下のエントリーでもShapelyを紹介していますので、興味のある方はぜひ読んでみてください。
www.gis-py.com

Shapelyでのジオメトリの扱い

ジオメトリの主なプロパティ

プロパティ
area 面積
bounds minx, miny, maxx, maxy
length 長さ
geom_type ジオメトリタイプ

ジオメトリの種類

ジオメトリ 特徴
Point Pointはポイントですね。データ上の点です。
LineString ラインですね。ポイントの配列がラインを形成しているイメージでしょうか。
LinearRing リングのようになるラインですね。出発点に最終点のLinsStringを含みます。それぞれのLinearRingは交差または触れることができません。
Polygon ポリゴンですね。穴の開いたポリゴンを作ることもできます。
MultiPoint pointのcollectionです。レコードとしては一つだけど、ジオメトリは複数あるイメージでしょうか。
MultiLineString LineStringのcollectionです。考え方はMultiPointと同じです。
MultiPolygon Polygonのcollectionをです。考え方はMultiPointと同じです。
GeometryCollection Point, Line, LinearRing, Polygonを組み合わせたcollectionです。

各ジオメトリを扱うサンプルコード

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ですね。

f:id:sanvarie:20181025092304p:plain

バッファ

バッファをとってみます。

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

ある地点に配置したポイントのバッファをとるとポリゴンを作ることができます。
f:id:sanvarie:20181025092406p:plain

距離

ジオメトリ間の距離を測ってみます。

from shapely.geometry import Point
point1 = Point(0.0, 0.0)
point2 = Point(1.0, 1.0)

point1.distance(point2)

f:id:sanvarie:20181025092524p:plain

LineString

ラインですね。ポイントの配列がラインを形成します。
f:id:sanvarie:20181024161443p:plain

from shapely.geometry import LineString
line = LineString([(0, 0), (1, 1),(1,0),(2,1)])
line

f:id:sanvarie:20181025092736p:plain

LinearRing

ラインリングは面白い考えですね。出発点に最終点のLinsStringを含みます。それぞれのLinearRingは交差または触れることができません。以下のbはポイントが交差しているので不正なラインリングですね。
f:id:sanvarie:20181024161509p:plain

from shapely.geometry.polygon import LinearRing
ring = LinearRing([(0, 0), (1, 1), (1, 0)])
ring

三点しか指定していないのにリングになりました。これがラインリングの考えですね。
f:id:sanvarie:20181025092905p:plain

Polygon

ポリゴンは通常のポリゴンと以下のように穴の開いたポリゴンも作ることができます。ただし、以下のb,c,dは不正なポリゴンと認識されます。
f:id:sanvarie:20181024161537p:plain
f:id:sanvarie:20181024161713p:plain

from shapely.geometry import Polygon
polygon = Polygon([(0, 0), (0, 1), (1, 1), (1, 0)])
polygon

f:id:sanvarie:20181025093215p:plain

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

こんな感じで穴の開いたポリゴンを作ることができます。
f:id:sanvarie:20181025102559p:plain

GeometryCollection

コレクションは、Point, Lines, LinearRing, Polygonを組み合わせたcollectionを表します。

f:id:sanvarie:20181024162410p:plain

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

二つのラインリングが交差する箇所を抽出しました。これがコレクションですね。
f:id:sanvarie:20181025093403p:plain

MultiPoint

ポイントのコレクションですね。

from shapely.geometry import MultiPoint
points = MultiPoint([(0.0, 0.0), (1.0, 1.0)])
points

f:id:sanvarie:20181025093625p:plain

MultiLineString

ラインのコレクションですね
f:id:sanvarie:20181024162636p:plain

from shapely.geometry import MultiLineString
coords = [((0, 0), (1, 1)), ((-1, 0), (1, 0))]
lines = MultiLineString(coords)
lines

f:id:sanvarie:20181025093718p:plain

MultiPolygon

ポリゴンのコレクションですね。以下のbのようなマルチポリゴンは不正なものとして扱われます。
f:id:sanvarie:20181024162900p:plain

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

f:id:sanvarie:20181025101406p:plain

以上です。今回紹介したものはShapelyの基本的な考え方だけですが、いかがでしたでしょうか。個人的にはすごく便利で使い勝手のいいライブラリだと思います。興味のある方はぜひ使ってみてください。