Automating GIS Processes 2024 写経　Lesson 1（２）


[前回](https://qiita.com/t_t_japan/items/ef5262ad1051280e5104)の続き。
## Lines
https://autogis-site.readthedocs.io/en/latest/lessons/lesson-1/geometry-objects.html#Lines

### LineString properties and methods


前回の復習。複数の点から線を形成したので、線の座標＝複数の点です。

```
# Get coordinate tuples
list(line.coords)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/2ed8cfb8-e010-4e98-87f4-1333c5270a0a.png)

単一の点ではありません。単一の点では線にならない、という当たり前の話です。
x座標とy座標を分けることもできます。 xy[0]がx座標、xy[1]がyz座標です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/82157989-6d6d-47f9-9d84-726f528f5e3f.png)

また、線なので長さが存在します。lengthに格納されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/7a1e716a-e5fb-4d2b-867c-96e4f2bf0ee8.png)

さて、この長さですが、a：点間距離の合計、b：始点→終点の直線距離なのでしょうか？

2.82842... ≒sqrt(2)*2なので、a：点間距離の合計でした。
```
line3 = LineString([(1, 1), (2,2), (3,1)])
line3.length
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/83e43fc3-7a31-41bf-8a26-02a371547d09.png)

あと、線の重心はcentroidで求められます。
分かりやすくするために、先ほど作成したline3の重心を求めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/e66f204e-3f60-48d9-990e-ca4e9b266c65.png)

## Polygon
https://autogis-site.readthedocs.io/en/latest/lessons/lesson-1/geometry-objects.html#Polygon

なお、この章は何かいっぱい書いてありますが、大半は help(Polygon)の出力のコピペです。。。

>Creating a polygon geometry follows the same logic as creating a point or line geometry. However, as discussed above the rules for what constitutes a polygon are more complex: It is constructed of exactly one linear ring forming its exterior (perimeter), and any number of additional linear rings forming holes that are cut out of the exterior shell.

>Consequently, the shapely.geometry.Polygon constructor function accepts two parameter: the first one, shell, is a list of coordinate tuples, a list of points, or a LinearRing, and will form the outer hull of the new polygon. The second, optional, parameter holes can be a list of holes to cut out of shell (the items in the list can be the same data types as shell).

ざっくりいうと、ポリゴン＝外周と内周からなる多角形（内周のリングは必須ではない）かと思います。
ひとまず、必須の外周を引数に指定します。
```
from shapely.geometry import Polygon

# Create a Polygon from the coordinates
polygon1 = Polygon([(2.2, 4.2), (7.2, -25.1), (9.26, -2.456)])
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/63f585d5-e404-4b2b-852b-acef195df0a8.png)

LineStringと同じように、Pointのリストから作成することもできます。


```
polygon2 = Polygon([point1, point2, point3])
```

座標を見ましょう。
```
list(polygon1.coords)
```
**エラーになりました。**

NotImplementedError: Component rings have coordinate sequences, but the polygon does not

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/b482a789-f18b-4e76-a9be-8cf20718dfa1.png)

先ほどふれたとおり、ポリゴン＝外周と内周からなる多角形なので、coords（座標）だけだと、どっち？という話になります。

なので、外周は、exterior.coordsで。
```
list(polygon1.exterior.coords)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/23bb2537-b8af-4d8c-981e-762138032540.png)

内周は、、、設定していないので、表示できません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/f1060a08-17f3-4a8c-b01f-faef283ee4e4.png)

なお、外周はexteriorで単数ですが、内周はinterior**s**で複数です。
help(Polygon)の出力のコピペが役に立ちましたね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/281f1070-ad35-48ac-b696-510a57aa3005.png)

なお、単純に座標をみたければ、printしてしまえばよいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4076503/e23a3168-5396-47c0-adf4-f4658cc21003.png)


またしても中途半端ですが、いったんここまでとします。