반응형
반응형

1. Shapely로 Geometry 생성하기

  • Polygon 생성하기(튜플)
from shapely.geometry import Polygon
p1 = Polygon(((1,2), (5,3), (5,7), (1,9), (1,2)))
p1

p2 = Polygon(((6,6), (7,6), (10,4), (11,8), (6,6)))
p2

  • Point생성하기(좌표값)
from shapely.geometry import Point
point = Point(2.0, 2.0)
point

  • Line 생성하기
from shapely.geometry import LineString
line = LineString([(0,0), (10,10)])
line

  • Linear Ring 생성하기
from shapely.geometry.polygon import LinearRing
ring = LinearRing([(0,0), (3,3), (3,0)])
ring

  • MultiPoint 생성하기
from shapely.geometry import MultiPoint
points = MultiPoint([(0,0), (3,3)])
points

  • MultiLine 생성하기
from shapely.geometry import MultiLineString
coords = MultiLineString([((0,0), (1,1)),((-1,0), (1,0))])
coords

  • MultiPolygon 생성하기
from shapely.geometry import MultiPolygon
polygons = MultiPolygon([p1,p2])
polygons

2. Shapely 공간 함수


# 면적 구하기
print(p1.area)
# 경계 구하기
print(p1.bounds)
# 길이 구하기
print(p1.length)
# geometry Type 구하기
print(p1.geom_type)
22.0
(1.0, 2.0, 5.0, 9.0)
19.59524158061724
Polygon

3. Shapely로 JSON Geometry 읽기

  • Json 파일 생성 및 shape를 이용해 로딩
import json
from shapely.geometry import mapping, shape
jData = json.loads('{"type":"Polygon","coordinates":[[[1,1],[1,3],[3,3]]]}')
p = shape(jData)
p

  • geometry를 json형태로 변환
mapping(p)
{'type': 'Polygon', 'coordinates': (((1.0, 1.0), (1.0, 3.0), (3.0, 3.0), (1.0, 1.0)),)}

4 Fiona 데이터 읽기

  • shp 파일 정보 표출
print(len(c))
print(c.driver)
print(c.crs)
100
ESRI Shapefile
{'proj': 'tmerc', 'lat_0': 38, 'lon_0': 127, 'k': 1, 'x_0': 200000, 'y_0': 600000, 'ellps': 'GRS80', 'units': 'm', 'no_defs': True}
  • shp 파일 데이터 읽기
import fiona
c = fiona.open(r'data/node.shp')
rec = next(iter(c))
print('keys = ', rec.keys())
print('type = ', rec['type'])
print('prop = ', rec['properties'])
print('id   = ', rec['id'])
print('geom = ', rec['geometry'])
keys =  dict_keys(['type', 'id', 'properties', 'geometry'])
type =  Feature
prop =  OrderedDict([('NODE_ID', '1100025100'), ('NODE_TYPE', '101'), ('NODE_NAME', '하계5,6단지앞교차로'), ('TURN_P', '1'), ('REMARK', None)])
id   =  0
geom =  {'type': 'Point', 'coordinates': (205838.0880999937, 559449.3750999967)}

5 데이터 다루기

  • shape file 읽고 첫 번째 Feature 정보 가져오기
import fiona
with fiona.open(r'data/node.shp') as src:
    print(src[0])
{'type': 'Feature', 'id': '0', 'properties': OrderedDict([('NODE_ID', '1100025100'), ('NODE_TYPE', '101'), ('NODE_NAME', '하계5,6단지앞교차로'), ('TURN_P', '1'), ('REMARK', None)]), 'geometry': {'type': 'Point', 'coordinates': (205838.0880999937, 559449.3750999967)}}

참고

반응형
반응형

1. GDAL/OGR

  • GDAL 과 OGR 이란?
    • GDAL(Geospatial Data Abstraction Library : 래스터 데이터 처리에 많이 사용하는 라이브러리
    • OGR : 벡터 포맷 데이터 처리에 많이 사용하는 라이브러리
  • GDAL 설치 하기
    • 아나콘다 내비게이터를 이용해 설치
      • 가상 환경 생성
      • 생성된 가상환경에 Not installed 설정 -> gdal 검색하여 체크 -> Apply
    • 아나콘다 프롬프트를 이용해 설치
      • 가상 환경 생성
conda create -n geospatial
activate geospatial
conda install gdal

2. GEOS(Geometry Engine Open Source)

  • GEOS란?
    • JTS(Java Topology Suite)의 서브셋과 선택된 기능의 C/C++ 포트
    • JTS의 완전한 기능을 C++로 포함하는 것을 목표
    • QGIS, PostGIS 등 여러 어플리케이션에서 사용됨
    • GDAL과 함께 컴파일해서 OGR의 모든 기능을 제공
  • JTS란?
    • Java로 작성된 지리공간 지오메트리 라이브러리
  • GEOS 설치하기
conda install -c conda-forge geos

3. Shapely

  • Shapely란?
    • 평면 형상의 처리와 분석을 위한 파이썬 패키지
    • GEOS 라이브러리 및 JTS 포트의 기능을 사용함
    • 지오메트리 분석만 다룸(공간 파일을 읽고 쓸 수 있는 기능 없음)
    • 8가지 기본 지오메트리 타입 지원
      • 포인트, 멀티 포인트, 멀티 라인 스트링, 멀티 폴리곤, 폴리곤, 다원형, 지오메트리 컬렉션
    • OGR보다 더 파이썬에 가깝고 직관적인 인터페이스, 최적화가 잘 되어 있음
  • Shapely 설치하기
conda install -c scitools shapely

4. Fiona

  • Fiona란?
    • OGR API로 데이터 포맷을 읽고 쓰는데 사용
    • OGR 보다 파이썬에 가깝고 신뢰성이 높고 오류 발생률이 낮아 OGR대신 사용
    • 벡터 데이터에 관한 공간 정보를 표현하기 위해 WKT와 WKB라는 두 개의 마크업 언어 사용
    • Shapely와 같은 다른 파이썬 라이브러리와 잘 결합됨
    • 벡터 데이터 복사 시 메모리를 많이 사용(C의 포인터가 아니라 파이썬의 오브젝트 사용하기 때문)
  • Fiona 설치
conda install -c conda-forge fiona

5. pyshp

  • pyshp(Python Shapefile Library) 란?
    • Shape File을 다루기 위한 파이썬 라이브러리
    • Shape File만 다룬다면 GDAL을 쓰는 것 보다 pyshp을 사용하는 것을 추천
  • pyshp 설치
conda install pyshp

6. pyproj

  • pyproj 란?
    • 도표 변환과 측지 연산을 수행하는 파이썬 패키지
    • PROJ.4 함수에 파이썬 인터페이스를 제공하기 위한 Cython 래퍼로 파이썬에서 기존 C코드 라이브러리에 직접 접근 가능
  • PROJ.4 란?
    • 여러 좌표계 중에서 데이터를 변환하는 투영 라이브러리
    • GDAL과 OGR에서도 이용 가능
    • 인기 있는 이유
      • 다양한 좌표계를 지원
      • Rasterio, GeoPandas 라이브러리 모두 pyproj를 사용하고, 그에 따라 PROJ.4 기능을 사용함
  • pyproj 설치
conda install -c conda-forge pyproj

7. Rasterio

  • Rasterio 란?
    • 래스터 데이터를 위한 GDAL 및 Numpy 기반 파이썬 라이브러리
    • Web과 App을 위한 온라인 지도 제공업체 맵박스 위성팀에서 제공하는 오픈소스
  • Rasterio 설치
conda config --add channels conda-forge
conda install rasterio

8. GeoPandas

  • GeoPandas 란?
    • 벡터 데이터 작업을 위한 파이썬 라이브러리
    • pandas와 유사하고 공간 데이터 처리에 유용하게 사용됨
  • GeoPandas 설치
conda install -c conda-forge geopandas

# 참고

  • 파이썬을 활용한 지리 공간 분석 마스터하기
반응형

+ Recent posts

반응형