!pip install geopandas
import geopandas as gpd
EMD = gpd.read_file('./EMD_202005/EMD.shp',encoding = 'ANSI')
EMD.head()
# EMD는 geopandas.geodataframe.GeoDataFrame형태로 가져와짐
# geometry는 polygon의 꼭지점 정보의 집합
EMD.plot() #지도표현
seoul_area.geometry.area #면적
seoul_area.geometry.length #테두리길이
seoul_area.geometry[0].boundary #테두리,Linestring객체 반환
seoul_area.geometry.centroid #무게중심점
#within: 고덕119안전센터(point)는 강동구(polygon)에 포함 - 1~N(point):1(polygon)입력가능
print(pt_119.geometry[17].within(seoul_area.geometry[0]))
#contains: 강동구(polygon)는 고덕119안전센터(point)를 포함 - 1~N(polygon):1(point)입력가능
print(seoul_area.geometry[0].contains(pt_119.geometry[17]))
#intersects: 강동구와 송파구는 교차( 맞닿기만해도됨)
print(seoul_area.geometry[1].intersects(seoul_area.geometry[1]))
#cross: 강동구와 송파구는 cross하지않음(내부를 지나가야함)
print(seoul_area.geometry[1].crosses(seoul_area.geometry[1]))
#distance: 점,다각형,라인 등 두 공간 사이의 직선거리 계산
dist = select_pt['geometry'].loc[0].distance(select_pt['geometry'].loc[101])
print("약 %s m" % round(dist))
#데이터준비
seoul_sig = gpd.GeoDataFrame.from_file('data/TL_SCCO_SIG.shp', encoding='cp949')
seoul_sig.crs = epsg5179
pt_119['geometry'] = pt_119.apply(lambda row : Point([row['경도'], row['위도']]), axis=1)
pt_119 = gpd.GeoDataFrame(pt_119, geometry='geometry', crs = epsg4326)
pt_119 = pt_119.to_crs(epsg5179)
#sjoin
result = gpd.sjoin(seoul_sig, pt_119, how='left', op="intersects")
result.head()
buffer
envelope
convexhull
unary_union
dissolve
overlay
# 행정동 코드가 11(서울)로 시작하는 읍면동 가져오기
seoul = EMD[EMD['EMD_CD'].str.startswith('11')]
# csv -> GeoDataFrame
shop = gpd.GeoDataFrame(shop, geometry=gpd.points_from_xy(shop['경도'], shop['위도']))
type(shop) # geopandas.geodataframe.GeoDataFrame
# 경도와 위도를 사용해서 geometry를 구성
# 좌표계 지정
shop.set_crs(epsg = 4326, inplace = True)
# 좌표계 wgs 84로 바꾸기
seoul = seoul.to_crs(epsg=4326)
# point가 polygon에 포함되는지
# <point>.intersect(<polygon>)
yangcheon_ = seoul_area.loc[seoul_area['SGG_NM']=="양천구",'geometry'].iloc[0]
select_pt = pt_119[pt_119.within(yangcheon_)] #양천구 안에 위치한 소방안전센터 boolean
select_pt
#count
f = lambda x:np.sum(shop.intersects(x))
seoul['count'] = seoul['geometry'].apply(f)