2. 1. 설치해 봅시다 .
• 필요한 것은 다 설치해봅시다 .
https://www.python.org/downloads/
-> 3.4 버전
-numpy, scipy,matplotlib 를 설치해봅시다 .
(1)OS 가 윈도우라는 전제 하에
- http://www.lfd.uci.edu/~gohlke/pythonlibs/
(2)버전에 맞는 라이브러리를 받아보십다 .
(3)설치해 보십다 .
Dos Command 를 실행 -> pip 명령어를 수행 합니다 .
3.
4. 2. Why Python?
• 일단 쉽다 .
• 쉬운만큼 쓰기도 쉽다 .
• 하나 개발해 놓으면 다른 플랫폼에서도 적용이 가능하다 .
-> Web, PC, Smart Phone App 등
• 라이브러리가 많다 .-> 내가 직접 알고리즘을 개발할일이
많지않다 .
• 써드 파티언어로 인기가 많다 .
-> QGIS(PyQGIS), ArcGIS(ArcPy)
8. 3. 기초문법 (4)
• for 문과 range
Range
예 ) range(1,10)
list(range(1,10))
>>> for i in range(0, 11):
print(i)
>>> interest_stocks = ["Naver", "Samsung", "SK Hynix"]
>>> for company in interest_stocks:
print(company)
// 리스트 와 튜플 의 차이
>>> interest_stocks = ("Naver", "Samsung", "SK Hynix")
>>> for company in interest_stocks:
print("%s: Buy 10" % company)
9. 3. 기초문법 (5)
• for 문과 Dictionary
- 데이터를 필드 와 값으로 구분하는 경우
예 )
interest_stocks = {"Naver":10, "Samsung":5, "SK Hynix":30}
for company, stock_num in interest_stocks.items():
print("%s: Buy %s" % (company, stock_num))
10. 3. 기초문법 (6)
• 함수를 써봅시다 .
def print_ntime(n):
for i in range(n):
print(“ 서울시립대 공간정보공학과 ")
실행
Print_ntime(3)
11. 3. 기초문법 (7)
• 이미있는 라이브러리를 쓰고자 할 때
- Import 라이브러리 명을 씀
- 도대체 라이브러리를 왜쓰는 건가 ?
1)이미있는 기능인대 왜 또 짜…
2) 애인 영희 보러가야 하는데 시간도 없어
3) 내가 다알고리즘을 알지만 조금 구현하는데 자신없어
4) 기타 ( 손이 가려워서… .)
12.
13. 간단한 차트 그리기
import matplotlib.pyplot as plt
plt.plot([1,2,3,4])
plt.ylabel('some numbers')
plt.show()
14. >>> import numpy as np
>>> import matplotlib.pyplot as plt
>>> x = np.linspace(0, 1, 500)
>>> y = np.sin(4 * np.pi * x) * np.exp(-5 * x)
>>> fig, ax = plt.subplots()
>>> ax.fill(x, y, zorder=10)
>>> ax.grid(True, zorder=5)
>>> plt.show()
15. from mpl_toolkits.mplot3d import
axes3d
import matplotlib.pyplot as plt
from matplotlib import cm
fig = plt.figure()
ax = fig.gca(projection='3d')
X, Y, Z = axes3d.get_test_data(0.05)
cset = ax.contourf(X, Y, Z,
cmap=cm.coolwarm)
ax.clabel(cset, fontsize=9, inline=1)
plt.show()
16. import numpy as np
import matplotlib.pyplot as plt
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2
# 0 to 15 point radii
plt.scatter(x, y, s=area, c=colors,
alpha=0.5)
plt.show()
17. 간단한 지도 사용하기
1. 일단 라이브러리를 설치 합시다 .(pyproj, BasemapTOOLKIT)
http://www.lfd.uci.edu/~gohlke/pythonlibs/
18. from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135,
resolut ion = 'h', area_thresh = 0.1,
llcrnrlon=-136.25, llcrnrlat=56.0,
urcrnrlon=-134.25, urcrnrlat=57.75)
map.drawcoastlines()
map.drawcountries()
map.fillcontinents(color = 'coral')
map.drawmapboundary()
plt.show()
19. from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
map = Basemap(projection='merc', lat_0 = 57, lon_0 = -135,
resolut ion = 'h', area_thresh = 0.1,
llcrnrlon=-136.25, llcrnrlat=56.0,
urcrnrlon=-134.25, urcrnrlat=57.75)
map.drawcoastlines()
map.drawcountries()
map.fillcontinents(color = 'coral')
map.drawmapboundary()
lon = -135.3318
lat = 57.0799
x,y = map(lon, lat)
map.plot(x, y, 'bo', markersize=24)
plt.show()
26. 조별과제후보 1
• Python Folium 으로 자기가 잘가는 곳을 찍어오기
(10 개이상 )
- 반드시 html 과 코드를 내야함
27. PYSAL 라이브러리
• 넌 대체 머하는 넘이냐… ?
- 공간데이터 내부구조를 분석할 수 있음
- 공간데이터 파일을 읽고 쓰기가 가능함
- SHP, CSV, LOTUS,WKT 파일 등을 핸들링이 가능함
- 고급 공간분석알고리즘을 아무렇지 않게 사용할 수있다 .
- ArcGIS, PyQGIS 도 요놈을 씀
- 분명 잘 익혀두면 좋은 날이 올까 ?
41. 영상을 분류해 보십다 .
# 소스 파일과 레이어 이름 정의
srcFile = "c:/seoul_raster/landsat.tif" # source file
lyrName = "landsat" # layer name
# 레이어 생성
from qgis.core import QgsRasterLayer
rasterLyr = QgsRasterLayer(srcFile, lyrName)
# 목록에 레이어 추가
# QgsMapLayerRegistry.instance().addMapLayers([rasterLyr])
c = QgsColorRampShader()
c.setColorRampType(QgsColorRampShader.INTERPOLATED)
from PyQt4 import QtGui
i = []
i.append(QgsColorRampShader.ColorRampItem(0, QtGui.QColor('#000000'), '0'))
i.append(QgsColorRampShader.ColorRampItem(6, QtGui.QColor('#ffffff'), ''))
i.append(QgsColorRampShader.ColorRampItem(36, QtGui.QColor('#c4baa4'), ''))
i.append(QgsColorRampShader.ColorRampItem(36.5, QtGui.QColor('#b4966c'), '0.1'))
i.append(QgsColorRampShader.ColorRampItem(97.1, QtGui.QColor('#a4824c'), ''))
i.append(QgsColorRampShader.ColorRampItem(97.6, QtGui.QColor('#94723c'), ''))
i.append(QgsColorRampShader.ColorRampItem(128, QtGui.QColor('#7c9e2c'), '0.2'))
i.append(QgsColorRampShader.ColorRampItem(160, QtGui.QColor('#94b614'), ''))
i.append(QgsColorRampShader.ColorRampItem(190, QtGui.QColor('#74aa04'), '0.3'))
i.append(QgsColorRampShader.ColorRampItem(219, QtGui.QColor('#64a204'), ''))
i.append(QgsColorRampShader.ColorRampItem(241, QtGui.QColor('#549604'), '0.4'))
c.setColorRampItemList(i)
s = QgsRasterShader()
s.setRasterShaderFunction(c)
ps = QgsSingleBandPseudoColorRenderer(rasterLyr.dataProvider(), 1, s)
rasterLyr.setRenderer(ps)
# 목록에 레이어 추가
QgsMapLayerRegistry.instance().addMapLayers([rasterLyr])
42. 심화 학습 -> 이게 먼 심화 학습
• Ndvi 를 구해 봅시다 .( 그래도 함 해보세요 )
근데 Ndvi ( 식생지수 ) 가 머죠 ?
인공위성이나 항공기를 이용하여 관측한 다중 분광대 영상 자료는 지상의
대상물이 각 파장대별로 독특한 특성을 나타내므로 이 특성을 이용하면 원
하는 정보를 추출해 낼 수 있다 . 특히 , Landsat 등 지상관측 위성의 주 관
심 범위인 육지 표면의 영상 자료는 95% 이상이 토양과 식생에 관한 정보
를 포함하고 있으므로 이 영상 자료를 이용하면 지표면의 식생 분포나 식
생 밀집도를 추정하는 것이 가능
44. 조별과제 후보
논문 : Otsu, N., 1979. A threshold selection method from gray-level
histogram. IEEE Transactions on Systems, Man, and Cybernetics 9, 62–66.
PDF: http://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=4310076
제공된 서울시립대영상에서 ndvi 혹은 오츠 임계치를 구해봅시다 .