python geopandas 가 shapefile 파일 을 읽 고 만 드 는 방법
shapefile
는 GIS 에서 매우 중요 한 데이터 유형 으로 ArcGIS 에서 요소 류(Feature Class)로 불 리 며 점(point),선(polyline),다각형(polygon)을 포함한다.흔히 볼 수 있 는 벡터 파일 형식 으로서geopandas
는shapefile
에 대해 좋 은 읽 기와 쓰기 지원 을 제공 합 니 다.DataFrame 구 조 는 GIS 데이터 중의 속성 표 에 해당 하여 벡터 데이터 속성 표를 직접 조작 할 수 있 고 python 에서 데 이 터 를 조작 하 는 데 더욱 편리 합 니 다.이 글 은 Python 스 크 립 트 에서 Shapefile 파일(.shp,.shx,.dbf 등 형식)을 읽 고 쓰 는 동작 을 소개 합 니 다.개발 준비
geopandas 는 여러 개의 의존 라 이브 러 리 가 있 기 때문에 Miniconda 나 Anaconda 를 사용 하여 geopandas 를 설치 하 는 것 을 추천 합 니 다.
설치 명령:
conda install -c conda-forge geopandas
국내 미 러:
conda install -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge geopandas
가 져 오기 사용:import geopandas제 가 여기 서 사용 하 는 것 은
geopandas
0.7 버 전 입 니 다.버 전 간 의 차이 가 크 지 않 습 니 다.최신 0.8 버 전 은 조회,입고 방면 의 특성 을 추 가 했 습 니 다.shapefile 파일 정보 읽 기
pyshp
라 이브 러 리 에 비해geopandas
라 이브 러 리 의 데이터 읽 기,전시,분석,확장 효과 가 더욱 좋다.zip 의shapefile
를 읽 을 수 있 고 GeoJSon,ArcGIS 의 지리 데이터 베이스gdb
와QGIS
에 저 장 된 벡터 데 이 터 를 읽 을 수 있 습 니 다.
import geopandas as gpd
from matplotlib import pyplot as plt
data = gpd.read_file(r'E:\gisData\ 2019\ .shp')#
#data = gpd.read_file('shapefile/china.gdb', layer='province')# gdb
print(data.crs) #
print(data.head()) # 5
data.plot()
plt.show()#
효과 보이 기:shapefile 파일 생 성
요소 류 의 생 성 효율 이 높 고 요소 실 체 를 만 들 수 있 을 뿐만 아니 라 속성 정보 와 정의 투영 도 쓸 수 있다.다음은 세 가지 요소 류 의 생 성 방법 을 간단하게 소개 한다.
점 형 요소 류 의 생 성
핵심 코드:
# shapely.geometry Point, , Point
cq = geopandas.GeoSeries([geometry.Point(110, 60),
geometry.Point(110.5, 50.4),
geometry.Point(120, 55),
geometry.Point(107.8, 54.6),
geometry.Point(114.6, 50)],
crs='EPSG:4326', # WGS 1984
index=[' ', ' ', ' ', ' ', ' '], #
)
# shapefile
cq.to_file('./output/{}.shp'.format(os.path.basename(__file__).replace('.py', '')),
driver='ESRI Shapefile',
encoding='utf-8')
선형 요소 클래스 생 성핵심 코드:
# shapely.geometry.LineString([(x1, y1), (x2, y2), ...])
cq = geopandas.GeoSeries([geometry.LineString([(0, 0), (1, 1), (1, 0)]),
geometry.LineString([(0.5, 2), (0, 1), (-1, 0)])],
crs='EPSG:4326',
index=[' ', 'b'])
cq.to_file('./output/{}.shp'.format(os.path.basename(__file__).replace('.py', '')),
driver='ESRI Shapefile',
encoding='utf-8')
면 형 요소 류 의 생 성핵심 코드:
# shapely.geometry Polygon, , Polygon
cq = geopandas.GeoSeries([geometry.Polygon([(14, 14), (13, 18), (20, 11), (18, 10)]),
geometry.Polygon([(0, 0), (10, 0), (10, 10), (0, 10)],
[((1, 3), (5, 3), (5, 1), (1, 1)),
((9, 9), (9, 8), (8, 8), (8, 9))]),
geometry.Polygon([(11, 2), (11, 10), (12, 10), (12, 2)])
],
index=[' ', ' ', 'c '], #
crs='EPSG:4326', # :WGS 1984
)
cq.to_file('./output/{}.shp'.format(os.path.basename(__file__).replace('.py', '')),
driver='ESRI Shapefile',
encoding='utf-8')
확장 응용 실례고도 점
고도 점 파일 저장 형식 은 CASS 에서 읽 은 DAT 형식 과 일치 합 니 다.예 를 들 어[1,ZDH,4500000,410000,20002,DYG,4500000,410000,2000]그 중에서'1'은'점 번호'를 대표 하고'ZDH'는'코드'를 대표 합 니 다.그 다음 에'동 좌표,북 좌표,고도 값'즉'Y,X,H'또는'X,Y,H'입 니 다.
AutoCAD 에서 포인트 효과
geopandas 에서 포인트 효과
구현 코드
# -*- coding: utf-8 -*-
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point
from matplotlib import pyplot as plt
from matplotlib.ticker import FuncFormatter
#
file_path = './data-use/ .csv'
rankings_colname = ['name', 'mark', 'longitude', 'latitude', 'height'];
df = pd.read_csv(file_path, header=None, names=rankings_colname)
# print(df.head(5))#
xy = [Point(xy) for xy in zip(df['longitude'], df['latitude'])]
pts = gpd.GeoSeries(xy) #
# SHP
pts.to_file('./output/ .shp', driver='ESRI Shapefile', encoding='utf-8')
"""fig ,ax """
fig, ax = plt.subplots(figsize=(8, 6)) # figure axes
ax = pts.plot(ax=ax,
facecolor='white',
edgecolor='black',
marker='X',
linewidth=0.5, #
markersize=12,
label=' ')
#
new_texts = [plt.text(x_ + 1, y_ + 1, text, fontsize=8) for x_, y_, text in
zip(df['longitude'], df['latitude'], df['name'])]
#
def formatnum(x, pos):
# return '$%.1f$x$10^{4}$' % (x / 10000)#
return int(x) #
formatter = FuncFormatter(formatnum)
ax.yaxis.set_major_formatter(formatter)
#
ax.spines['right'].set_visible(False)
ax.spines['top'].set_visible(False)
plt.grid(True, alpha=0.4) # , 50%
ax.legend(title=" ", loc='lower right', ncol=1, shadow=True) #
plt.title(' ', fontdict={'weight': 'normal', 'size': 20}) # &
#
plt.savefig('images/ .png', dpi=300, bbox_inches='tight', pad_inches=0)
plt.show()
점 집 회전 면일련의 점 의 집합 을 면 상 요소 류 로 바 꾸 고 다음은 감숙성 의 지진 대 를 예 로 들 면(필드 대응:명칭,면 색인,점 색인,경도,위도).
데이터 미리 보기
효과 미리 보기
구현 코드
import geopandas as gpd
import pandas as pd
from shapely.geometry import Polygon
from matplotlib import pyplot as plt
raw = pd.read_excel('./data-use/ .xls') #
#
output = raw.groupby('id') \
.apply(lambda df: Polygon([(x, y) for x, y in zip(df['longitude'], df['latitude'])])) \
.to_frame(name='geometry')
# GeoDataFrame
output = gpd.GeoDataFrame(output, crs='EPSG:4326')
output.plot()
#
new_longitude = raw.groupby('name', as_index=False,)['longitude'].mean()
new_latitude = raw.groupby('name', as_index=False)['latitude'].mean()
new_df = pd.merge(pd.DataFrame(new_longitude),pd.DataFrame(new_latitude))
new_texts = [plt.text(x_ , y_ , text, fontsize=8) for x_, y_, text in
zip(new_df['longitude'], new_df['latitude'], new_df['name'])]
# shapefile
output.to_file('output/ .shp')
plt.show()
버퍼,다 중 버퍼 생 성구현 코드:
import os
import shapely
import geopandas as gpd
import matplotlib.pyplot as plt
polygon = shapely.geometry.Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
# 、 , WGS1984,
cq = gpd.GeoSeries([polygon,
polygon.buffer(distance=1),
polygon.buffer(distance=3)],
crs='EPSG:4326')
# shapefile
cq.to_file('./output/{}.shp'.format(os.path.basename(__file__).replace('.py', '')),
driver='ESRI Shapefile',
encoding='utf-8')
ax = cq.plot(alpha=0.2)
ax.axis('off') #
plt.show()
마지막 에 쓰다전체 코드 를 첨부 한 다운로드,그리고 더 많은 재 미 있 는 내용 이 있 으 며,관심 있 는 친구 들 은 스스로 실천 할 수 있 습 니 다.좋아 하 시 는 분 들 은 관심 을 가 져 주세요.추 후 계속 업데이트 되 겠 습 니 다.하 이 라이트 무한^-^
링크:https://pan.baidu.com/s/1g7G8sQ17-9XIhojyQ1M7Ww
추출 코드:59vz
마지막 으로 강력 한 앤 리 에 게 geopandas 학습 블 로그:https://www.cnblogs.com/feffery/tag/geopandas/
이상 은 python geopandas 가 shapefile 파일 을 읽 고 만 드 는 방법 에 대한 상세 한 내용 입 니 다.python 이 shapefile 파일 을 읽 는 방법 에 대한 자 료 는 다른 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.