シンプルなGISを構築するPython GDALライブラリ01
カメをtとしてインポート
# myList[0]
# firstItem = 0
# myList[firstItem]
都市の名前、座標、人口を定義する
NAME = 0
POINTS = 1
POP = 2
州名(0)、座標(1)、母集団(3)を作成します。座標は別のリストにネストする必要があります
state = ["COLORADO", [[-109, 37], [-109, 41], [-102, 41], [-102, 37]], 5187582]
各都市の名前、座標、人口を確立する
cities = []
cities.append(["DENVER", [-104.98, 39.74], 634265])
cities.append(["BOULDER", [-105.27, 40.02], 98889])
cities.append(["DURANGO", [-107.88, 37.28], 17069])
本初子午線、つまり0°子午線からの世界地理座標の拡大範囲は、西への負の「-」、東への正の「+」、および太平洋上での東または西への180°の移動は+ -180°です。子午線は世界の日の変化です。赤道から北極までは正の「+」、南極は負の「-」、+ 90°は北極、-90°は南極です。
minx = 180
maxx = -180
miny = 90
maxy = -90
州の地理座標範囲と州の最大サイズを決定します。つまり、状態の4点により、長方形が決定される。
for x, y in state[POINTS]:
if x < minx:
minx = x
elif x > maxx:
maxx = x
if y < miny:
miny = y
elif y > maxy:
maxy = y
マップ描画ボードのサイズを定義します。このサイズは、実際に必要な状況に基づいています
map_width = 400
map_height = 300
マップ描画ボードの縮尺と世界の地理座標の最大範囲を計算します。
つまり、マップ描画ボードのサイズ/世界の地理座標の最大サイズです。
dist_x = maxx - minx # 世界最地理坐标长度,也就是本初子午线向东西180°之和。
dist_y = maxy - miny # 世界最大宽度,也就是北极点到南极点的地理坐标长度。
x_ratio = map_width / dist_x # 地图绘图板的长度尺寸/世界最地理坐标长度
y_ratio = map_height / dist_y # 地图绘图板的高度,也就是宽度尺寸/世界最地理坐标宽度尺寸
前の手順で取得したズーム比を使用して、緯度と経度の座標を画面座標に変換します。
def convert(point):
lon = point[0]
lat = point[1]
x = map_width - ((maxx - lon) * x_ratio)
y = map_height - ((maxy - lat) * y_ratio)
print(x,y)
## 将绘图图版沿x轴移动“-(map_width / 2)”,沿y轴移动-(map_height / 2),
## 从而将绘图图版放置于中心的位置
x = x - (map_width / 2)
y = y - (map_height / 2)
return [x, y]
##wn = t.Screen()
##wn.title("Simple GIS")
カメを使用してマップの境界を描画する
t.up()
first_pixel = None
for point in state[POINTS]:
pixel = convert(point)
if not first_pixel:
first_pixel = pixel
t.goto(pixel)
t.down()
t.goto(first_pixel)
t.up()
t.goto([0, 0])
t.write(state[NAME], align = "center", font = ("Arial", 16, "bold"))
都市の分布と属性をマッピングする
for city in cities:
pixel = convert(city[POINTS])
t.up()
t.goto(pixel)
t.dot(10)
t.write(city[NAME] + ", Pop.:" + str(city[POP]), align = "left")
t.up()
最大および最小関数を使用して、人口が最大で、西から最も遠い距離にある都市を見つける
biggest_city = max(cities, key = lambda city: city[POP])
t.goto(0, -200)
t.write("The biggest city is :" + biggest_city[NAME])
western_city = min(cities, key = lambda city: city[POINTS])
t.goto(0, -220)
t.write("The western-most city is :" + western_city[NAME])
t.pen(shown = False) # 隐藏turtle光标
t.done()