LoginSignup
1
0

More than 5 years have passed since last update.

Pythonで世界地図-21(シェープファイルを作成)

Last updated at Posted at 2018-07-20

世界地図で使用するシェープファイルを作成できないか探していたら
6.1. Lesson: 新しいベクターデータセットを作成する
https://docs.qgis.org/2.18/ja/docs/training_manual/create_vector_data/create_new_vector.html
を見つけたのでやってみました。

QGISが必要です、QGISのインストールは、
Pythonで世界地図-20(地図画像に位置情報を付与する)
https://qiita.com/ty21ky/items/a7c648c855f077ff515f
を参照してください。

手順

1.QGIS Desktopを起動する。
2.新規シェープファイルレイヤー をクリック
image.png

image.png

上記の場合、infoは、
'id','name'は上記で指定した名前、'RINGNUM','SHAPENUM'は自動でつく。
'RINGNUM'は同じ名称の時につく番号?、'SHAPENUM'名称毎の番号?
[{'id':1, 'name': 'AB', 'RINGNUM': 1, 'SHAPENUM': 1},
{'id':2, 'name': 'AB', 'RINGNUM': 2, 'SHAPENUM': 1},
{'id':3, 'name': 'AB', 'RINGNUM': 3, 'SHAPENUM': 1},
{'id':4, 'name': 'AB', 'RINGNUM': 4, 'SHAPENUM': 1},
{'id':5, 'name': 'AL', 'RINGNUM': 1, 'SHAPENUM': 2},
{'id':6, 'name': 'B', 'RINGNUM': 1, 'SHAPENUM': 3},

image.png

image.png
3.
Pythonで世界地図-20(地図画像に位置情報を付与する)
https://qiita.com/ty21ky/items/a7c648c855f077ff515f
で作成した*.tifファイルを開く。
image.png

image.png

image.png
4.レイヤパネルに追加されたラスタレイヤをレイヤパネルの一番下にドラッグする。(これをしないと地物を作成しても見えない)
5.レイヤパネルに追加されたラスタレイヤを右クリックー>レイヤの領域にズームする をクリック
image.png
6.レイヤーパネルのシェープファイルのレイヤーを選択して、右クリックー>編集モード切替
image.png
7.「地物の追加」 をクリック
image.png
クリックしてポリゴンを作成する。
image.png
右クリックで終了する。
image.png
地物属性のダイアログが表示される。
id - 1 (数値)
name - test
OKをクリックすると地物が作成される。

8.「地物の追加」の左隣のフロッピーアイコンをクリックし保存する。
9.レイヤーパネルのシェープファイルのレイヤーを選択して、右クリックー>編集モード切替 をクリックして編集モードを解除する。
10.プロジェクトを保存する。

#!/usr/bin/python3
# coding: UTF-8

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import japan_border2 as jb2 #都府県境界線

font = {'family': 'IPAGothic'}  # 日本語Fontを指定

lon1 = 135.50
lat1 = 34.5
lon2 = 11.0
lat2 = 13.0

map = Basemap(llcrnrlon=lon1-lon2,llcrnrlat=lat1-lat2,urcrnrlon=lon1+lon2,urcrnrlat=lat1+lat2,resolution='i',projection='cyl')

map.drawcoastlines() #海岸線

jb2.prefectural_bound(map = map) #都府県境界線

map.readshapefile('test1', 'test', color ='m')

print(map.test)

plt.show()

image.png

ポリゴンの座標

$ ./test.py
[[(134.8980608886258, 32.092860695379926), (143.00363355629517, 32.04056667816916), (140.70269679902128, 29.112101714366027), (135.2641190091012, 28.223103421782938), (134.8980608886258, 32.092860695379926)]]
ポリゴンを塗りつぶす
#!/usr/bin/python3
# coding: UTF-8

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import japan_border2 as jb2 #都府県境界線
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
import numpy as np

font = {'family': 'IPAGothic'}  # 日本語Fontを指定

lon1 = 135.50
lat1 = 34.5
lon2 = 11.0
lat2 = 13.0

fig     = plt.figure() #shp_color
ax      = fig.add_subplot(111)

map = Basemap(llcrnrlon=lon1-lon2,llcrnrlat=lat1-lat2,urcrnrlon=lon1+lon2,urcrnrlat=lat1+lat2,resolution='i',projection='cyl')

map.drawcoastlines() #海岸線

jb2.prefectural_bound(map = map) #都府県境界線

map.readshapefile('test1', 'test', drawbounds = False)

patches  = [] 

for info, shape in zip(map.test_info, map.test): 
    if info['name'] == 'test':
        patches.append( Polygon(np.array(shape), True) )

ax.add_collection(PatchCollection(patches, facecolor= 'r', edgecolor='k', linewidths=1., zorder=2))

plt.show()

image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0