python geopandas 가 shapefile 파일 을 읽 고 만 드 는 방법

shapefile는 GIS 에서 매우 중요 한 데이터 유형 으로 ArcGIS 에서 요소 류(Feature Class)로 불 리 며 점(point),선(polyline),다각형(polygon)을 포함한다.흔히 볼 수 있 는 벡터 파일 형식 으로서geopandasshapefile에 대해 좋 은 읽 기와 쓰기 지원 을 제공 합 니 다.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
제 가 여기 서 사용 하 는 것 은geopandas0.7 버 전 입 니 다.버 전 간 의 차이 가 크 지 않 습 니 다.최신 0.8 버 전 은 조회,입고 방면 의 특성 을 추 가 했 습 니 다.
shapefile 파일 정보 읽 기pyshp라 이브 러 리 에 비해geopandas라 이브 러 리 의 데이터 읽 기,전시,분석,확장 효과 가 더욱 좋다.zip 의shapefile를 읽 을 수 있 고 GeoJSon,ArcGIS 의 지리 데이터 베이스gdbQGIS에 저 장 된 벡터 데 이 터 를 읽 을 수 있 습 니 다.

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 파일 을 읽 는 방법 에 대한 자 료 는 다른 글 을 주목 하 십시오!

좋은 웹페이지 즐겨찾기