Python
QGIS
부제를 추가하려면 두 번 탭하세요.
1페이지
수업
개요
1주 : GIS 시스템 과 QGIS
2주: QGIS 인터페이스와 벡터데이터 처리
3주: QGIS 인터페이스와 레스터 데이터 처리
4주 : 공간 분석응용
5주 : 온라인 시험
2페이지
수업
개요
3페이지
GIS 시스템은 어떻게
구성되는가?
실습환경 구성
 Python 코드 작성의 이해
오늘의 수업 내용
GIS 시스템 구성
 GIS 시스템 구축기술은 진화 중
“ Geospatial information technology continues to evolve”
 최신 IT 기술과 결합 되어 있음
- BigData
- AI
- IOT
- Drone
- Cloud
“ Convergence is main stream in spatial information
technology”
4페이지
GIS 시스템의 구성
두 번째 기술 세 번째 기술 결론
GIS 시스템 구성
 GIS 시스템 은 과거에는 설치 되었으나 점점 웹 서비스로 진화
5페이지
GIS 시스템의 구성
두 번째 기술 세 번째 기술 결론
GIS 시스템 구성
GIS 산업이 점차 웹으로 옮겨가고 데이터 역시 개방형 이동
“ GIS Business ‘s Open Data, Open Web, Open Technology
 전통적 GIS 전문기업은 몰락하고 대형 IT 업체
(Google ,Amazon, IBM) 등이 시장의 지배자가 될 것
“IT Service Company Will be Main Stream”
 이렇게 될 수 있는 것은 개방형 기술이 핵심
6페이지
GIS 시스템의 구성
두 번째 기술 세 번째 기술 결론
개방형기술
의 전제
7페이지
첫 번째 기술
두 번째 기술
세 번째 기술 결론
- 오픈 소스 (Open Source)
- 오픈 데이터 (Open Data)
- 오픈 표준 (Open Standard)
오픈소스 vs 상용
8페이지
첫 번째 기술 두 번째 기술
세 번째 기술
결론
DBMS Oracle,MS-SQL Postgres, Maria DB ST_Geometry
WebService
ArcGISServer,Super
Map iserver
Geo server,Map
server
WFS,WMS,WCS,WPS
Desktop
ArcGIS
Desktop,SuperMap
IDesktop
QGIS,GVSIG,udig Etc
“상용 시스템들 역시 공간정보 표준을 준수하고 있음“
Enterprise System Keeps Geospatial Standard
공간정보 표준
 공간정보 표준으로 널리 알리고 있는 OGC 표준 과 ISO 표준이 존재
 개념적으로는 ISO 표준, 실제 개발과 산업군에서는 OGC 표준
9페이지
수업의 목표
 QGIS와 PYTHON을 통하여 전반적인 공간정보 시스템을 다루고 이를 토대로
개방형체계를 이해 함
 QGIS를 스크립트와 이벤트를 익힘으로써 전반적인 공간정보 도구 기능 및 활용법을
익힘
 최신 python 딥러닝 관련 라이브러리를 QGIS를 토대로 익힘으로써 최신 공간정보
활용을 실습 함
10페이지
QGIS 설치
다운로드 받음
 QGIS 다운로드 사이트 (http://qgis.org)
11페이지
첫 번째 기술 두 번째 기술 세 번째 기술
결론
QGIS 설치
설치 후 실행
12페이지
첫 번째 기술 두 번째 기술 세 번째 기술
결론
QGIS 실행
설치 후 실행
13페이지
*.Raster 분석을 위한 GRASS 기능이 필요할 때 With grass
QGIS 실행
QGIS Application Structure
14페이지
- Grass GIS : 영상 및 레스터 처리 모듈
- QGIS : QGIS 메인 프로그램
- OSGEO4W SHELL: QGIS GDAL/OGR Console 실행 환경 및
Python 라이브러리 관리 환경
- QT Designer: QGIS UI 설계 (Visual Basic 과 유사)->
플러그인제작시 필요
- SAGA GIS : 수문학 기반의 공간정보 (Hydrology GIS)
QGIS
Python
개발환경
QGIS
Python
개발환경
QGIS
Python
개발환경
QGIS python 편집기 실행
QGIS
Python
개발환경
QGIS python 편집기 실행
QGIS python 코드 작성 특징
11 . 자료형 및 문법이 매우 단순 함
2. 매우 단순한 주의 사항이 있음
- if , while, for 문 수행 시 띄어쓰기 오류를 주의
- 항상 한칸씩 띄워야 함
QGIS python 코드 작성 특징
13 . 주석 (Comment) 다는 법
- 내가 작성한코드를 설명하기 위하여
money = True
# 돈이 있음 소고기 없음 삽겹살
if money:
print("소고기를")
print("먹자")
print("아싸")
else:
print("삽겹살 이나 먹자")
QGIS python 코드 작성 특징
13 . 주석 (Comment) 다는 법
QGIS python 코드 작성
Ex1) 자기에게 인사하는 로직을 구현하고 , 주석 도
달아봅시다.(3분간 실습해봅시다)
- Print (‘Hi, Jiyoon’)
QGIS python 자료형 및 자료구조
- 기본자료형 : int , float , complex(복소수형), string
- 자료구조 : list, turple, Dictionary ,set (이것의 용도는 여러 개의 자료를 한방에 담자)
-
- Type 함수를 쓰면 자료형태를 출력이가능 함 (내가 쓰는 자료형이 무슨 형태인지 ?)
리스트 는 [ , 튜플 {, SET은 ( = 구조는 같다 거의;
-> 그룻의 모양이 다르다.
BREAK TIME 8시 45분 ㅏ지
24페이지
QGIS python 코드 작성
Ex2) 딕셔너리 객체로 자기자신의 이름, 전화번호, 생년월일을 코딩해서 print
해봅시다.
> dic2 = {'name': 'kim jiyoon', 'phone':'023021000', 'birth': ‘19750730'}
print(dic2)
QGIS
레이어
관리
및 Python
Console
활용
 QGIS 레이어 관리기능
26페이지
QGIS
레이어
관리
및 Python
Console
활용
 QGIS 레이어 관리기능을 코드로 구현하려면
- iface 객체로 구현하면 간단 함
- (qgis 만능키
1) 벡터로 불러오기
27페이지
iface.addVectorLayer("C:pyqgis_scriptsdataworld_borders.shp",
"세계지도", "ogr")
2) Raster로 불러오기
iface.addRasterLayer("E:04.시립대수업데이터
world_borders.tif","세계지도2","gdal")
“레이어 경로,,레이어창 이름, ogr/gdal” 순서
QGIS
레이어관리
및
 iface 객체로도 레이어를 가져올 수 있지만 다른 방법도 있음
28페이지
vlayer = QgsVectorLayer("E:04.시립대수업데이터world_borders.shp",
"세계지도2", "ogr")
QgsProject.instance().addMapLayer(vlayer)
rlayer =
QgsRasterLayer("E:04.시립대수업데이터world_borders.tif","세계지도2
", "gdal")
QgsProject.instance().addMapLayer(rlayer)
QGIS
레이어관리
및
 웹에 있는 지도 가져와 보기(WMS)
29페이지
urlWithParams =
'url=https://sedac.ciesin.columbia.edu:443/geoserver/ows?SERVICE=WMS
&layers=ipcc:ipcc-synthetic-vulnerability-climate-2005-2050-
2100&format=image/png&crs=EPSG:4326&styles=‘
raster_layer = QgsRasterLayer(urlWithParams, 'Climate Vulnerability', 'wms')
if not raster_layer.isValid():
print("Layer failed to load!")
QgsProject.instance().addMapLayer(raster_layer)
QGIS
레이어관리
및
 웹에 있는 지도 가져와 보기(WFS)
30페이지
uri = 'https://demo.geo-
solutions.it/geoserver/ows?service=WFS&version=1.1.0&reques
t=GetFeature&typename=geosolutions:regioni'
layer = QgsVectorLayer(uri, "WFS_Layer", "WFS")
if not layer.isValid():
print("Layer failed to load!")
QgsProject.instance().addMapLayer(layer)
Xyz 타일
31페이지
Xyz타일
 크롬브라우저 개발자모드 들어가서 url을 확인(복사)
32페이지
Xyz 타일
33페이지
복사
Xyz 타일
코드
(tilemap.py)
34페이지
복사
urlWithParams =
'type=xyz&url=https://a.tile.openstreetmap.org/%7Bz%7D/%7
Bx%7D/%7By%7D.png&zmax=19&zmin=0&crs=EPSG3857'
rlayer = QgsRasterLayer(urlWithParams, 'OpenStreetMap',
'wms')
if rlayer.isValid():
QgsProject.instance().addMapLayer(rlayer)
else:
print('invalid layer')
원리
 https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z}
- z 는 축척
- X는 lat
- Y 는 lon 으로 가정
35페이지
실습
36페이지
수업
개요
1주 : GIS 시스템 과 QGIS
2주: QGIS 인터페이스와 벡터데이터 처리
3주: QGIS 인터페이스와 레스터 데이터 처리
4주 : 공간 분석응용
5주 : 온라인 시험
37페이지
Python
함수 만들기
(Make
Function)
38페이지
def add(arg1, arg2):
c = arg1 + arg2
return c
from PyQt5.QtGui import QColor
from PyQt5.QtCore import Qt
from qgis.core import QgsVectorLayer
from qgis.utils import iface
def load_layer(fn):
wb = iface.addVectorLayer(fn, 'world_borders', 'ogr')
load_layer("E:workDrone.shp")
레이어메타
데이터
가져오기
 메타 데이터 (Meta Data)
- 메타데이터(metadata)는 데이터(data)에 대한 데이터이다.
이렇게 흔히들 간단히 정의하지만 엄격하게는, Karen Coyle에
의하면 "어떤 목적을 가지고 만들어진 데이터 (Constructed
data with a purpose)"라고 정의
- 공간데이터에서는 레이어 의 구조, 좌표계 등 데이터의 제작
정보가 이에 해당
39페이지
레이어메타
데이터
가져오기
 메타 데이터 (Meta Data)
import qgis.core
layer = iface.activeLayer()
extent = layer.extent()
print("공간범위:",extent)
print("도형타입:",QgsWkbTypes.displayString(layer.wkbType()))
print("좌표계:",layer.crs())
print("레이어이름:",layer.name())
print("속성정보의 언어설정", layer.dataProvider().encoding())
for field in layer.fields():
print("속성필드:",field.name(),field) # 띄어쓰기 주의
print(layer.source())
print(layer.featureCount())
40페이지
레이어메타
데이터
가져오기
 메타 데이터 (Ogr)
import os
from osgeo import ogr
daShapefile = "C:pyqgis_scriptsdatacities.shp"
driver = ogr.GetDriverByName('ESRI Shapefile')
dataSource = driver.Open(daShapefile, 0) # 0 means read-only. 1 means writeable.
# Check to see if shapefile is found.
if dataSource is None:
print ("Could not open ", daShapefile)
else:
print ("Opened " , (daShapefile))
layer = dataSource.GetLayer()
featureCount = layer.GetFeatureCount()
print ("Number of features in " ,os.path.basename(daShapefile),featureCount)
crs = layer.GetSpatialRef()
epsg = crs.GetAttrValue("AUTHORITY", 1)
41페이지
레이어메타
데이터
가져오기
 메타 데이터 (Ogr)
print ("Spatial Reference:" , crs)
print ("EPSGID:", epsg)
layer_defn = layer.GetLayerDefn()
print(ogr.GeometryTypeToName(layer_defn.GetGeomType()))
Extent = layer.GetExtent()
print(Extent)
layerDefinition = layer.GetLayerDefn()
print("Name - Type Width Precision")
for i in range(layerDefinition.GetFieldCount()):
fieldName = layerDefinition.GetFieldDefn(i).GetName()
fieldTypeCode = layerDefinition.GetFieldDefn(i).GetType()
fieldType = layerDefinition.GetFieldDefn(i).GetFieldTypeName(fieldTypeCode)
fieldWidth = layerDefinition.GetFieldDefn(i).GetWidth()
GetPrecision = layerDefinition.GetFieldDefn(i).GetPrecision()
print(fieldName + " - " + fieldType+ " " + str(fieldWidth) + " " +
str(GetPrecision))
42페이지
예제  Data 폴더에 World_borders shp파일의 메타정보를
ogr 혹은 qgis api 방식으로 가져오기 (제한시간 10분)
43페이지
Ogrdriver
import ogr
cnt = ogr.GetDriverCount()
formatsList = [] # Empty List
for i in range(cnt):
driver = ogr.GetDriver(i)
driverName = driver.GetName()
if not driverName in formatsList:
formatsList.append(driverName)
formatsList.sort() # Sorting the messy list of ogr drivers
print(formatsList)
44페이지
레이어의
측정
45페이지
레이어의
측정
46페이지
“거리를 구하고자 할 때 직선거리 와 지구곡률을
고려한 거리가 존재 함"
“실제로 위경도 사이의 정확한 거리를 구하고자 할 때 “
Havasine Formula를 써야 함
레이어의
측정
47페이지
import math
def ellipsoid_distance(origin, destination):
lat1, lon1 = origin
lat2, lon2 = destination
# Remember the order is X,Y
point1 = QgsPointXY(lon1, lat1)
point2 = QgsPointXY(lon2, lat2)
d = QgsDistanceArea()
d.setEllipsoid('WGS84')
#Measure the distance
distance = d.measureLine([point1, point2])
return distance/1000
def haversine_distance(origin, destination):
lat1, lon1 = origin
lat2, lon2 = destination
radius = 6371 # km
dlat = math.radians(lat2-lat1)
dlon = math.radians(lon2-lon1)
a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) 
* math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2)
c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a))
distance = radius * c
return distance
레이어의
측정
48페이지
> origin = 126.398, 35.58
> dest = 126.333, 35.56
> d1 = haversine_distance(origin, dest)
> d2 = ellipsoid_distance(origin, dest
> print('Haversine distance: {} km'.format(d1))
> print('Ellipsoid distance: {} km'.format(d2))
레이어측정
d = QgsDistanceArea()
d.setEllipsoid('WGS84')
layer =
QgsProject.instance().mapLayersByName('alaska')[0]
features = layer.getFeatures()
for f in features:
geom = f.geometry()
print("Perimeter (m):", d.measurePerimeter(geom))
print("Area (m2):", d.measureArea(geom))
# "Area (km2):",
d.convertAreaMeasurement(d.measureArea(geom),
QgsUnitTypes.AreaSquareKilometers))
49페이지
레이어측정
from osgeo import ogr
wkt = "POLYGON ((1162440.5712740074
672081.4332727483, 1162440.5712740074
647105.5431482664, 1195279.2416228633
647105.5431482664, 1195279.2416228633
672081.4332727483, 1162440.5712740074
672081.4332727483))"
poly = ogr.CreateGeometryFromWkt(wkt)
print("Area:",poly.GetArea())
50페이지
다른포맷
(csv)
51페이지
다른포맷
(csv)
filename=daShapefile =
"C:pyqgis_scriptsdataice_cream.csv"
uri =
'file:///{}?delimiter=,&xField=lon&yField=lat&crs=epsg:
4326'.format(filename)
name = os.path.splitext(os.path.basename(filename))[0]
layer = QgsVectorLayer(uri, name, 'delimitedtext')
QgsProject.instance().addMapLayer(layer)
52페이지
다른포맷
(csv->shp)
import qgis
layer =
QgsProject.instance().mapLayersByName('ice_cream')[0]
shp_file = "C:pyqgis_scriptsdataicecream.shp"
crs = QgsCoordinateReferenceSystem("EPSG:5514")
QgsVectorFileWriter.writeAsVectorFormat(
layer, shp_file,
"UTF-8", driverName="ESRI Shapefile", destCRS=crs)
layer_shp = QgsVectorLayer(shp_file, "test", "ogr")
print (layer_shp.isValid())
53페이지
postgis
54페이지
postgis
55페이지
Postgis
load
(postgis.py)
56페이지
속성창 조작
activelayer = iface.activeLayer()
iface.showAttributeTable(activelayer)
iface.showLayerProperties(activelayer)
iface.showAttributeTable(activelayer, "name ='Branko
super Eis'")
57페이지
수업
개요
1주 : GIS 시스템 과 QGIS
2주: QGIS 인터페이스와 벡터데이터 처리
3주: QGIS 인터페이스와 레스터 데이터 처리
4주 : 공간 분석응용
5주 : 온라인 시험
58페이지
WCS
가져오기
(Web
Coverge
Service)
 정의 : OGC WEB 표준 중 하나로 레스터 기반의 원본
그대로 서비스하는것 PNG 나 JPEG로 경량기반으로 변
환되는 WMS와 다르다.
59페이지
클래스
만들기
(calc.py)
 From 패키지 import 를 스스로 만들 수 있다.
 비숫한 기능들을 묶을 수 있다.
 이것을 클래스라고 함
60페이지
Raster
61페이지
- Iface를 활용하면 Raster를 가져올 수 있음
iface.addRasterLayer("E:04.시립대수업데이터
world_borders.tif","세계지도2","gdal")
Raster
포맷지원
62페이지
-- OSGEO 4W SHELL 로 확인
Raster
포맷지원
(gdal.py)
63페이지
-- Python으로 확인
WCS
가져오기
(Web
Coverge
Service)
64페이지
WCS
가져오기
(Web
Coverge
Service)
65페이지
from qgis.core import *
import urllib.parse
# Make WCS Uri
def makeWCSuri( url, layer ):
params = { 'dpiMode': 7 ,
'identifier': layer,
'url': url.split('?')[0] }
uri = urllib.parse.unquote( urllib.parse.urlencode(params) )
return uri
rlayername = 'DEP3ElevationPrototype'
wcsUri =
makeWCSuri('https://elevation.nationalmap.gov/arcgis/services/3DEPElevation/I
mageServer/WCSServer', rlayername )
rlayer = QgsRasterLayer(wcsUri, 'DEP3ElevationPrototype', 'wcs')
if not rlayer.isValid():
print ("Layer failed to load!")
QgsProject.instance().addMapLayer(rlayer)
레스터
레이어
메타데이터
가져오기
(RasterMeta
Data.py)
66페이지
레스터
레이어
메타데이터
가져오기
(RasterMeta
Gdal.py)
67페이지
QGIS Raster
Symbol
logy
(Raster
Symbology)
68페이지
수업
개요
1주 : GIS 시스템 과 QGIS
2주: QGIS 인터페이스와 벡터데이터 처리
3주: QGIS 인터페이스와 레스터 데이터 처리
4주 : 공간 분석응용
5주 : 온라인 시험
69페이지
다른 외부
라이브러리
(Osgeo4W)
70페이지
다른 외부라이브러리
(Opencv 설치)
71페이지
다른 외부라이브러리
(Opencv 설치)
다른 외부라이브러리
(Opencv 설치)
72페이지
다른 외부라이브러리
(Opencv 설치)
Opencv
+ gdal
(영상에지
검출)
 Edge는 경계선, 윤곽선을 의미한다.
 영상에서의 edge란 영상의 밝기가 낮은 값에서 높은 값으
로, 또는 이와 반대로 변하는 지점에 존재하는 부분을 가리킨
다.
 결국 edge는 영상안에 있는 객체의 경계(boundary)를 가리
키는 것으로서, 모양(shape), 방향성(direction)을 탐지할 수
있는 등 여러 정보가 담겨있다.
 edge detection이란 에지에 해당하는 화소를 찾는 과정이다.
출처: https://iskim3068.tistory.com/49 [ikfluencer]
73페이지
Opencv
+ gdal
(edge.py)
74페이지
Numpy
(Numpy
exam.py)
75페이지
• Numpy는 C언어로 구현된 파이썬 라이브러리로써, 고성능의
수치계산을 위해 제작
• Numerical Python의 줄임말이기도 한 Numpy는 벡터 및 행렬
연산에 있어서 매우 편리한 기능을 제공
• numpy에서는 기본적으로 array라는 단위로 데이터를
관리하며 이에 대해 연산을 수행.
• array는 행렬이라는 개념 으로 정의]
Numpy
(NumpyExa
m.py)
76페이지
Numpy
(Numpy
Exam.py)
77페이지
Matplotlib
(
Maptplot.py
)
78페이지
Raster 지형
분석
79페이지
Raster 지형
분석
(RasterAnaly
sys.py)
80페이지
Raster
계산기
81페이지
Raster
계산기
(RasterCalc.
py)
82페이지
보간법
83페이지
“점 과 점 사이의 간격의 값을 알고자 할 때 보간 법을 사용함"
보간법
84페이지
보간법
85페이지
보간법
(interpolatio
n.py)
86페이지
분석결과
공유
87페이지
QGIS UI
88페이지
QGIS 타이틀 변경
title = iface.mainWindow().windowTitle()
new_title = title.replace('QGIS', 'My QGIS')
iface.mainWindow().setWindowTitle(new_title)
QGIS UI
89페이지
QGIS 메시지 창
mb = QMessageBox()
mb.setText('Click OK to confirm')
mb.setStandardButtons(QMessageBox.Ok |
QMessageBox.Cancel)
return_value = mb.exec()
if return_value == QMessageBox.Ok:
print('You pressed OK')
elif return_value == QMessageBox.Cancel:
print('You pressed Cancel'))
QGIS UI
90페이지
QGIS 메뉴조작
vector_menu = iface.vectorMenu()
raster_menu = iface.rasterMenu()
menubar = vector_menu.parentWidget()
menubar.removeAction(vector_menu.menuAction())
menubar.removeAction(raster_menu.menuAction())
QGIS UI
91페이지
QGIS 나만의 메뉴
import webbrowser
def open_website():
webbrowser.open('https://gis.stackexchange.com')
website_action = QAction('Go to gis.stackexchange')
website_action.triggered.connect(open_website)
iface.helpMenu().addSeparator()
iface.helpMenu().addAction(website_action)
"데이터를 구문 분석하고 해당 데이터를 통해 학습한 후 정보를
바탕으로 결정을 내리기 위해 학습한 내용을 적용하는 알고리즘"
머신 러닝 알고리즘의 쉬운 예는 주문형 음악 스트리밍 서비스입니다.
서비스에서 청취자에게 추천할 새 노래나 아티스트를 결정하기 위해
머신 러닝 알고리즘은 청취자의 선호 사항을 음악적 취향이 비슷한 다른
청취자와 연관시킵니다. 종종 간단히 AI라고 불리는 이 기술은 자동화된
추천을 제공하는 많은 서비스에서 사용됩니다.
머신 러닝은 모든 종류의 자동화된 작업을 부추기며, 악성 코드를
추적하는 데이터 보안 회사부터 유리한 거래에 대해 알림을 받고 싶어
하는 재무 전문가까지 여러 산업에 걸쳐 존재합니다. AI 알고리즘은
가상의 개인 비서처럼 끊임없이 학습하도록 프로그래밍되었으며, 이
작업을 상당히 잘 수행합니다.
머신러닝과 딥러닝의 차이
머신러닝의 정의
머신러닝과 딥러닝의 차이점
 실질적으로 딥 러닝은 머신 러닝의 하위 개념입니다. 실제로 머신 러닝
에 해당하며 비슷한 방식으로 작동합니다(두 용어가 때로 비슷하게 사용되
는 이유이기도 함). 하지만 둘의 기능은 다릅니다.
 기본 머신 러닝 모델은 그 기능이 무엇이든 점진적으로 향상되는데, 여전
히 약간의 안내가 필요합니다. AI 알고리즘이 부정확한 예측을 반환하면
엔지니어가 개입하여 조정해야 합니다. 딥 러닝 모델을 사용하면 알고리즘
이 자체 신경망을 통해 예측의 정확성 여부를 스스로 판단할 수 있습니다.
 손전등의 예로 돌아가 보겠습니다. 누군가 '어둠'이라는 단어를 말하는 소
리 신호를 인식할 때 불이 켜지도록 손전등을 프로그래밍할 수 있습니다.
이를 계속 학습하면서 그 단어가 포함된 구절을 인식하면 결국 불을 켤 수
있습니다. 손전등에 딥 러닝 모델이 있다면 “안 보여” 또는 “스위치가 안 켜
져”라는 신호가 있을 때, 어쩌면 빛 센서와 함께 불을 켜야 한다는 것을 이
해하게 될 수 있습니다. 딥 러닝 모델은 자체적인 컴퓨팅 방법, 즉 자체적인
두뇌가 있는 것처럼 보이는 기술을 통해 학습할 수 있습니다.
간단한 실습
(https://teachablemachine.withgoogle.com/train)
Python qgis advanced

Python qgis advanced

  • 1.
    Python QGIS 부제를 추가하려면 두번 탭하세요. 1페이지
  • 2.
    수업 개요 1주 : GIS시스템 과 QGIS 2주: QGIS 인터페이스와 벡터데이터 처리 3주: QGIS 인터페이스와 레스터 데이터 처리 4주 : 공간 분석응용 5주 : 온라인 시험 2페이지
  • 3.
    수업 개요 3페이지 GIS 시스템은 어떻게 구성되는가? 실습환경구성  Python 코드 작성의 이해 오늘의 수업 내용
  • 4.
    GIS 시스템 구성 GIS 시스템 구축기술은 진화 중 “ Geospatial information technology continues to evolve”  최신 IT 기술과 결합 되어 있음 - BigData - AI - IOT - Drone - Cloud “ Convergence is main stream in spatial information technology” 4페이지 GIS 시스템의 구성 두 번째 기술 세 번째 기술 결론
  • 5.
    GIS 시스템 구성 GIS 시스템 은 과거에는 설치 되었으나 점점 웹 서비스로 진화 5페이지 GIS 시스템의 구성 두 번째 기술 세 번째 기술 결론
  • 6.
    GIS 시스템 구성 GIS산업이 점차 웹으로 옮겨가고 데이터 역시 개방형 이동 “ GIS Business ‘s Open Data, Open Web, Open Technology  전통적 GIS 전문기업은 몰락하고 대형 IT 업체 (Google ,Amazon, IBM) 등이 시장의 지배자가 될 것 “IT Service Company Will be Main Stream”  이렇게 될 수 있는 것은 개방형 기술이 핵심 6페이지 GIS 시스템의 구성 두 번째 기술 세 번째 기술 결론
  • 7.
    개방형기술 의 전제 7페이지 첫 번째기술 두 번째 기술 세 번째 기술 결론 - 오픈 소스 (Open Source) - 오픈 데이터 (Open Data) - 오픈 표준 (Open Standard)
  • 8.
    오픈소스 vs 상용 8페이지 첫번째 기술 두 번째 기술 세 번째 기술 결론 DBMS Oracle,MS-SQL Postgres, Maria DB ST_Geometry WebService ArcGISServer,Super Map iserver Geo server,Map server WFS,WMS,WCS,WPS Desktop ArcGIS Desktop,SuperMap IDesktop QGIS,GVSIG,udig Etc “상용 시스템들 역시 공간정보 표준을 준수하고 있음“ Enterprise System Keeps Geospatial Standard
  • 9.
    공간정보 표준  공간정보표준으로 널리 알리고 있는 OGC 표준 과 ISO 표준이 존재  개념적으로는 ISO 표준, 실제 개발과 산업군에서는 OGC 표준 9페이지
  • 10.
    수업의 목표  QGIS와PYTHON을 통하여 전반적인 공간정보 시스템을 다루고 이를 토대로 개방형체계를 이해 함  QGIS를 스크립트와 이벤트를 익힘으로써 전반적인 공간정보 도구 기능 및 활용법을 익힘  최신 python 딥러닝 관련 라이브러리를 QGIS를 토대로 익힘으로써 최신 공간정보 활용을 실습 함 10페이지
  • 11.
    QGIS 설치 다운로드 받음 QGIS 다운로드 사이트 (http://qgis.org) 11페이지 첫 번째 기술 두 번째 기술 세 번째 기술 결론
  • 12.
    QGIS 설치 설치 후실행 12페이지 첫 번째 기술 두 번째 기술 세 번째 기술 결론
  • 13.
    QGIS 실행 설치 후실행 13페이지 *.Raster 분석을 위한 GRASS 기능이 필요할 때 With grass
  • 14.
    QGIS 실행 QGIS ApplicationStructure 14페이지 - Grass GIS : 영상 및 레스터 처리 모듈 - QGIS : QGIS 메인 프로그램 - OSGEO4W SHELL: QGIS GDAL/OGR Console 실행 환경 및 Python 라이브러리 관리 환경 - QT Designer: QGIS UI 설계 (Visual Basic 과 유사)-> 플러그인제작시 필요 - SAGA GIS : 수문학 기반의 공간정보 (Hydrology GIS)
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
    QGIS python 코드작성 특징 11 . 자료형 및 문법이 매우 단순 함 2. 매우 단순한 주의 사항이 있음 - if , while, for 문 수행 시 띄어쓰기 오류를 주의 - 항상 한칸씩 띄워야 함
  • 20.
    QGIS python 코드작성 특징 13 . 주석 (Comment) 다는 법 - 내가 작성한코드를 설명하기 위하여 money = True # 돈이 있음 소고기 없음 삽겹살 if money: print("소고기를") print("먹자") print("아싸") else: print("삽겹살 이나 먹자")
  • 21.
    QGIS python 코드작성 특징 13 . 주석 (Comment) 다는 법
  • 22.
    QGIS python 코드작성 Ex1) 자기에게 인사하는 로직을 구현하고 , 주석 도 달아봅시다.(3분간 실습해봅시다) - Print (‘Hi, Jiyoon’)
  • 23.
    QGIS python 자료형및 자료구조 - 기본자료형 : int , float , complex(복소수형), string - 자료구조 : list, turple, Dictionary ,set (이것의 용도는 여러 개의 자료를 한방에 담자) - - Type 함수를 쓰면 자료형태를 출력이가능 함 (내가 쓰는 자료형이 무슨 형태인지 ?) 리스트 는 [ , 튜플 {, SET은 ( = 구조는 같다 거의; -> 그룻의 모양이 다르다. BREAK TIME 8시 45분 ㅏ지
  • 24.
  • 25.
    QGIS python 코드작성 Ex2) 딕셔너리 객체로 자기자신의 이름, 전화번호, 생년월일을 코딩해서 print 해봅시다. > dic2 = {'name': 'kim jiyoon', 'phone':'023021000', 'birth': ‘19750730'} print(dic2)
  • 26.
  • 27.
    QGIS 레이어 관리 및 Python Console 활용  QGIS레이어 관리기능을 코드로 구현하려면 - iface 객체로 구현하면 간단 함 - (qgis 만능키 1) 벡터로 불러오기 27페이지 iface.addVectorLayer("C:pyqgis_scriptsdataworld_borders.shp", "세계지도", "ogr") 2) Raster로 불러오기 iface.addRasterLayer("E:04.시립대수업데이터 world_borders.tif","세계지도2","gdal") “레이어 경로,,레이어창 이름, ogr/gdal” 순서
  • 28.
    QGIS 레이어관리 및  iface 객체로도레이어를 가져올 수 있지만 다른 방법도 있음 28페이지 vlayer = QgsVectorLayer("E:04.시립대수업데이터world_borders.shp", "세계지도2", "ogr") QgsProject.instance().addMapLayer(vlayer) rlayer = QgsRasterLayer("E:04.시립대수업데이터world_borders.tif","세계지도2 ", "gdal") QgsProject.instance().addMapLayer(rlayer)
  • 29.
    QGIS 레이어관리 및  웹에 있는지도 가져와 보기(WMS) 29페이지 urlWithParams = 'url=https://sedac.ciesin.columbia.edu:443/geoserver/ows?SERVICE=WMS &layers=ipcc:ipcc-synthetic-vulnerability-climate-2005-2050- 2100&format=image/png&crs=EPSG:4326&styles=‘ raster_layer = QgsRasterLayer(urlWithParams, 'Climate Vulnerability', 'wms') if not raster_layer.isValid(): print("Layer failed to load!") QgsProject.instance().addMapLayer(raster_layer)
  • 30.
    QGIS 레이어관리 및  웹에 있는지도 가져와 보기(WFS) 30페이지 uri = 'https://demo.geo- solutions.it/geoserver/ows?service=WFS&version=1.1.0&reques t=GetFeature&typename=geosolutions:regioni' layer = QgsVectorLayer(uri, "WFS_Layer", "WFS") if not layer.isValid(): print("Layer failed to load!") QgsProject.instance().addMapLayer(layer)
  • 31.
  • 32.
    Xyz타일  크롬브라우저 개발자모드들어가서 url을 확인(복사) 32페이지
  • 33.
  • 34.
    Xyz 타일 코드 (tilemap.py) 34페이지 복사 urlWithParams = 'type=xyz&url=https://a.tile.openstreetmap.org/%7Bz%7D/%7 Bx%7D/%7By%7D.png&zmax=19&zmin=0&crs=EPSG3857' rlayer= QgsRasterLayer(urlWithParams, 'OpenStreetMap', 'wms') if rlayer.isValid(): QgsProject.instance().addMapLayer(rlayer) else: print('invalid layer')
  • 35.
    원리  https://mt1.google.com/vt/lyrs=s&x={x}&y={y}&z={z} - z는 축척 - X는 lat - Y 는 lon 으로 가정 35페이지
  • 36.
  • 37.
    수업 개요 1주 : GIS시스템 과 QGIS 2주: QGIS 인터페이스와 벡터데이터 처리 3주: QGIS 인터페이스와 레스터 데이터 처리 4주 : 공간 분석응용 5주 : 온라인 시험 37페이지
  • 38.
    Python 함수 만들기 (Make Function) 38페이지 def add(arg1,arg2): c = arg1 + arg2 return c from PyQt5.QtGui import QColor from PyQt5.QtCore import Qt from qgis.core import QgsVectorLayer from qgis.utils import iface def load_layer(fn): wb = iface.addVectorLayer(fn, 'world_borders', 'ogr') load_layer("E:workDrone.shp")
  • 39.
    레이어메타 데이터 가져오기  메타 데이터(Meta Data) - 메타데이터(metadata)는 데이터(data)에 대한 데이터이다. 이렇게 흔히들 간단히 정의하지만 엄격하게는, Karen Coyle에 의하면 "어떤 목적을 가지고 만들어진 데이터 (Constructed data with a purpose)"라고 정의 - 공간데이터에서는 레이어 의 구조, 좌표계 등 데이터의 제작 정보가 이에 해당 39페이지
  • 40.
    레이어메타 데이터 가져오기  메타 데이터(Meta Data) import qgis.core layer = iface.activeLayer() extent = layer.extent() print("공간범위:",extent) print("도형타입:",QgsWkbTypes.displayString(layer.wkbType())) print("좌표계:",layer.crs()) print("레이어이름:",layer.name()) print("속성정보의 언어설정", layer.dataProvider().encoding()) for field in layer.fields(): print("속성필드:",field.name(),field) # 띄어쓰기 주의 print(layer.source()) print(layer.featureCount()) 40페이지
  • 41.
    레이어메타 데이터 가져오기  메타 데이터(Ogr) import os from osgeo import ogr daShapefile = "C:pyqgis_scriptsdatacities.shp" driver = ogr.GetDriverByName('ESRI Shapefile') dataSource = driver.Open(daShapefile, 0) # 0 means read-only. 1 means writeable. # Check to see if shapefile is found. if dataSource is None: print ("Could not open ", daShapefile) else: print ("Opened " , (daShapefile)) layer = dataSource.GetLayer() featureCount = layer.GetFeatureCount() print ("Number of features in " ,os.path.basename(daShapefile),featureCount) crs = layer.GetSpatialRef() epsg = crs.GetAttrValue("AUTHORITY", 1) 41페이지
  • 42.
    레이어메타 데이터 가져오기  메타 데이터(Ogr) print ("Spatial Reference:" , crs) print ("EPSGID:", epsg) layer_defn = layer.GetLayerDefn() print(ogr.GeometryTypeToName(layer_defn.GetGeomType())) Extent = layer.GetExtent() print(Extent) layerDefinition = layer.GetLayerDefn() print("Name - Type Width Precision") for i in range(layerDefinition.GetFieldCount()): fieldName = layerDefinition.GetFieldDefn(i).GetName() fieldTypeCode = layerDefinition.GetFieldDefn(i).GetType() fieldType = layerDefinition.GetFieldDefn(i).GetFieldTypeName(fieldTypeCode) fieldWidth = layerDefinition.GetFieldDefn(i).GetWidth() GetPrecision = layerDefinition.GetFieldDefn(i).GetPrecision() print(fieldName + " - " + fieldType+ " " + str(fieldWidth) + " " + str(GetPrecision)) 42페이지
  • 43.
    예제  Data폴더에 World_borders shp파일의 메타정보를 ogr 혹은 qgis api 방식으로 가져오기 (제한시간 10분) 43페이지
  • 44.
    Ogrdriver import ogr cnt =ogr.GetDriverCount() formatsList = [] # Empty List for i in range(cnt): driver = ogr.GetDriver(i) driverName = driver.GetName() if not driverName in formatsList: formatsList.append(driverName) formatsList.sort() # Sorting the messy list of ogr drivers print(formatsList) 44페이지
  • 45.
  • 46.
    레이어의 측정 46페이지 “거리를 구하고자 할때 직선거리 와 지구곡률을 고려한 거리가 존재 함" “실제로 위경도 사이의 정확한 거리를 구하고자 할 때 “ Havasine Formula를 써야 함
  • 47.
    레이어의 측정 47페이지 import math def ellipsoid_distance(origin,destination): lat1, lon1 = origin lat2, lon2 = destination # Remember the order is X,Y point1 = QgsPointXY(lon1, lat1) point2 = QgsPointXY(lon2, lat2) d = QgsDistanceArea() d.setEllipsoid('WGS84') #Measure the distance distance = d.measureLine([point1, point2]) return distance/1000 def haversine_distance(origin, destination): lat1, lon1 = origin lat2, lon2 = destination radius = 6371 # km dlat = math.radians(lat2-lat1) dlon = math.radians(lon2-lon1) a = math.sin(dlat/2) * math.sin(dlat/2) + math.cos(math.radians(lat1)) * math.cos(math.radians(lat2)) * math.sin(dlon/2) * math.sin(dlon/2) c = 2 * math.atan2(math.sqrt(a), math.sqrt(1-a)) distance = radius * c return distance
  • 48.
    레이어의 측정 48페이지 > origin =126.398, 35.58 > dest = 126.333, 35.56 > d1 = haversine_distance(origin, dest) > d2 = ellipsoid_distance(origin, dest > print('Haversine distance: {} km'.format(d1)) > print('Ellipsoid distance: {} km'.format(d2))
  • 49.
    레이어측정 d = QgsDistanceArea() d.setEllipsoid('WGS84') layer= QgsProject.instance().mapLayersByName('alaska')[0] features = layer.getFeatures() for f in features: geom = f.geometry() print("Perimeter (m):", d.measurePerimeter(geom)) print("Area (m2):", d.measureArea(geom)) # "Area (km2):", d.convertAreaMeasurement(d.measureArea(geom), QgsUnitTypes.AreaSquareKilometers)) 49페이지
  • 50.
    레이어측정 from osgeo importogr wkt = "POLYGON ((1162440.5712740074 672081.4332727483, 1162440.5712740074 647105.5431482664, 1195279.2416228633 647105.5431482664, 1195279.2416228633 672081.4332727483, 1162440.5712740074 672081.4332727483))" poly = ogr.CreateGeometryFromWkt(wkt) print("Area:",poly.GetArea()) 50페이지
  • 51.
  • 52.
    다른포맷 (csv) filename=daShapefile = "C:pyqgis_scriptsdataice_cream.csv" uri = 'file:///{}?delimiter=,&xField=lon&yField=lat&crs=epsg: 4326'.format(filename) name= os.path.splitext(os.path.basename(filename))[0] layer = QgsVectorLayer(uri, name, 'delimitedtext') QgsProject.instance().addMapLayer(layer) 52페이지
  • 53.
    다른포맷 (csv->shp) import qgis layer = QgsProject.instance().mapLayersByName('ice_cream')[0] shp_file= "C:pyqgis_scriptsdataicecream.shp" crs = QgsCoordinateReferenceSystem("EPSG:5514") QgsVectorFileWriter.writeAsVectorFormat( layer, shp_file, "UTF-8", driverName="ESRI Shapefile", destCRS=crs) layer_shp = QgsVectorLayer(shp_file, "test", "ogr") print (layer_shp.isValid()) 53페이지
  • 54.
  • 55.
  • 56.
  • 57.
    속성창 조작 activelayer =iface.activeLayer() iface.showAttributeTable(activelayer) iface.showLayerProperties(activelayer) iface.showAttributeTable(activelayer, "name ='Branko super Eis'") 57페이지
  • 58.
    수업 개요 1주 : GIS시스템 과 QGIS 2주: QGIS 인터페이스와 벡터데이터 처리 3주: QGIS 인터페이스와 레스터 데이터 처리 4주 : 공간 분석응용 5주 : 온라인 시험 58페이지
  • 59.
    WCS 가져오기 (Web Coverge Service)  정의 :OGC WEB 표준 중 하나로 레스터 기반의 원본 그대로 서비스하는것 PNG 나 JPEG로 경량기반으로 변 환되는 WMS와 다르다. 59페이지
  • 60.
    클래스 만들기 (calc.py)  From 패키지import 를 스스로 만들 수 있다.  비숫한 기능들을 묶을 수 있다.  이것을 클래스라고 함 60페이지
  • 61.
    Raster 61페이지 - Iface를 활용하면Raster를 가져올 수 있음 iface.addRasterLayer("E:04.시립대수업데이터 world_borders.tif","세계지도2","gdal")
  • 62.
  • 63.
  • 64.
  • 65.
    WCS 가져오기 (Web Coverge Service) 65페이지 from qgis.core import* import urllib.parse # Make WCS Uri def makeWCSuri( url, layer ): params = { 'dpiMode': 7 , 'identifier': layer, 'url': url.split('?')[0] } uri = urllib.parse.unquote( urllib.parse.urlencode(params) ) return uri rlayername = 'DEP3ElevationPrototype' wcsUri = makeWCSuri('https://elevation.nationalmap.gov/arcgis/services/3DEPElevation/I mageServer/WCSServer', rlayername ) rlayer = QgsRasterLayer(wcsUri, 'DEP3ElevationPrototype', 'wcs') if not rlayer.isValid(): print ("Layer failed to load!") QgsProject.instance().addMapLayer(rlayer)
  • 66.
  • 67.
  • 68.
  • 69.
    수업 개요 1주 : GIS시스템 과 QGIS 2주: QGIS 인터페이스와 벡터데이터 처리 3주: QGIS 인터페이스와 레스터 데이터 처리 4주 : 공간 분석응용 5주 : 온라인 시험 69페이지
  • 70.
  • 71.
  • 72.
  • 73.
    Opencv + gdal (영상에지 검출)  Edge는경계선, 윤곽선을 의미한다.  영상에서의 edge란 영상의 밝기가 낮은 값에서 높은 값으 로, 또는 이와 반대로 변하는 지점에 존재하는 부분을 가리킨 다.  결국 edge는 영상안에 있는 객체의 경계(boundary)를 가리 키는 것으로서, 모양(shape), 방향성(direction)을 탐지할 수 있는 등 여러 정보가 담겨있다.  edge detection이란 에지에 해당하는 화소를 찾는 과정이다. 출처: https://iskim3068.tistory.com/49 [ikfluencer] 73페이지
  • 74.
  • 75.
    Numpy (Numpy exam.py) 75페이지 • Numpy는 C언어로구현된 파이썬 라이브러리로써, 고성능의 수치계산을 위해 제작 • Numerical Python의 줄임말이기도 한 Numpy는 벡터 및 행렬 연산에 있어서 매우 편리한 기능을 제공 • numpy에서는 기본적으로 array라는 단위로 데이터를 관리하며 이에 대해 연산을 수행. • array는 행렬이라는 개념 으로 정의]
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
    보간법 83페이지 “점 과 점사이의 간격의 값을 알고자 할 때 보간 법을 사용함"
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
    QGIS UI 88페이지 QGIS 타이틀변경 title = iface.mainWindow().windowTitle() new_title = title.replace('QGIS', 'My QGIS') iface.mainWindow().setWindowTitle(new_title)
  • 89.
    QGIS UI 89페이지 QGIS 메시지창 mb = QMessageBox() mb.setText('Click OK to confirm') mb.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel) return_value = mb.exec() if return_value == QMessageBox.Ok: print('You pressed OK') elif return_value == QMessageBox.Cancel: print('You pressed Cancel'))
  • 90.
    QGIS UI 90페이지 QGIS 메뉴조작 vector_menu= iface.vectorMenu() raster_menu = iface.rasterMenu() menubar = vector_menu.parentWidget() menubar.removeAction(vector_menu.menuAction()) menubar.removeAction(raster_menu.menuAction())
  • 91.
    QGIS UI 91페이지 QGIS 나만의메뉴 import webbrowser def open_website(): webbrowser.open('https://gis.stackexchange.com') website_action = QAction('Go to gis.stackexchange') website_action.triggered.connect(open_website) iface.helpMenu().addSeparator() iface.helpMenu().addAction(website_action)
  • 92.
    "데이터를 구문 분석하고해당 데이터를 통해 학습한 후 정보를 바탕으로 결정을 내리기 위해 학습한 내용을 적용하는 알고리즘" 머신 러닝 알고리즘의 쉬운 예는 주문형 음악 스트리밍 서비스입니다. 서비스에서 청취자에게 추천할 새 노래나 아티스트를 결정하기 위해 머신 러닝 알고리즘은 청취자의 선호 사항을 음악적 취향이 비슷한 다른 청취자와 연관시킵니다. 종종 간단히 AI라고 불리는 이 기술은 자동화된 추천을 제공하는 많은 서비스에서 사용됩니다. 머신 러닝은 모든 종류의 자동화된 작업을 부추기며, 악성 코드를 추적하는 데이터 보안 회사부터 유리한 거래에 대해 알림을 받고 싶어 하는 재무 전문가까지 여러 산업에 걸쳐 존재합니다. AI 알고리즘은 가상의 개인 비서처럼 끊임없이 학습하도록 프로그래밍되었으며, 이 작업을 상당히 잘 수행합니다. 머신러닝과 딥러닝의 차이 머신러닝의 정의
  • 93.
    머신러닝과 딥러닝의 차이점 실질적으로 딥 러닝은 머신 러닝의 하위 개념입니다. 실제로 머신 러닝 에 해당하며 비슷한 방식으로 작동합니다(두 용어가 때로 비슷하게 사용되 는 이유이기도 함). 하지만 둘의 기능은 다릅니다.  기본 머신 러닝 모델은 그 기능이 무엇이든 점진적으로 향상되는데, 여전 히 약간의 안내가 필요합니다. AI 알고리즘이 부정확한 예측을 반환하면 엔지니어가 개입하여 조정해야 합니다. 딥 러닝 모델을 사용하면 알고리즘 이 자체 신경망을 통해 예측의 정확성 여부를 스스로 판단할 수 있습니다.  손전등의 예로 돌아가 보겠습니다. 누군가 '어둠'이라는 단어를 말하는 소 리 신호를 인식할 때 불이 켜지도록 손전등을 프로그래밍할 수 있습니다. 이를 계속 학습하면서 그 단어가 포함된 구절을 인식하면 결국 불을 켤 수 있습니다. 손전등에 딥 러닝 모델이 있다면 “안 보여” 또는 “스위치가 안 켜 져”라는 신호가 있을 때, 어쩌면 빛 센서와 함께 불을 켜야 한다는 것을 이 해하게 될 수 있습니다. 딥 러닝 모델은 자체적인 컴퓨팅 방법, 즉 자체적인 두뇌가 있는 것처럼 보이는 기술을 통해 학습할 수 있습니다.
  • 95.