python geopandas, QGIS 사용해서 매핑하기

x·2024년 4월 22일
0

geopandas

목록 보기
1/2

건물 클러스터 .shp 파일에 x,y 좌표로 구성된 포인트를 매핑해서 클러스터 내에 속하는 건물의 중심 좌표만 구하기

건물 point, 내비게이션용 DB

https://business.juso.go.kr/addrlink/elctrnMapProvd/geoDBDwldList.do?menu=%EB%82%B4%EB%B9%84%EA%B2%8C%EC%9D%B4%EC%85%98%EC%9A%A9DB#this

건물 클러스터, 도로명주소 전자지도

https://business.juso.go.kr/addrlink/elctrnMapProvd/geoDBDwldList.do?menu=%EB%8F%84%EB%A1%9C%EB%AA%85%EC%A3%BC%EC%86%8C%20%EC%A0%84%EC%9E%90%EC%A7%80%EB%8F%84#this

전처리

QGIS에서 TL_SPDB_BULD.shp 파일을 드래그 앤 드랍해서 연다.


건물 클러스터 폴리곤이 표시되는데 127.xxx, 36.xxx와 형식의 위도 경도를 사용하기 위해선 레이어 재투영이라는 걸 해서 좌표계를 epsg:5179 -> epsg:4326 수정해야 한다


생성된 .shp 파일을 다시 QGIS에서 열어준다.

mapping

map_building_to_building_cluster_command.py
.txt 파일을 dataframe type으로 변경하면서 x,y 좌표를 4326 좌표계로 변경한다.
building_cluster_polygons_4326.shp을 읽고 geometry(polygon)을 4326 좌표계로 변경한다.

class MapBuildingToBuildingClusterCommand:
    def __init__(self) -> None:
        self.map_building_to_building_cluster = MapBuildingToBuildingClusterService()

    def map(self):
        building_points: gpd.GeoDataFrame = BuildingUtil.get_building_points(
            file_name="match_build_gwangju.txt"
        )

        building_cluster_polygons: gpd.GeoDataFrame = (
            BuildingUtil.get_building_cluster_polygons(
                file_name="building_cluster_polygons_4326.shp"
            )
        )

        self.map_building_to_building_cluster.map_building_to_building_cluster(
            building_cluster_polygons=building_cluster_polygons,
            building_points=building_points,
        )

map_building_to_build_cluster_service.py
geopandas의 sjoin을 사용해서 폴리곤 내에 속하는 좌표를 join해준다.
건물중심점_x좌표, 건물중심점_y좌표를 latitude, longitude로 변경해준다.
dataframe을 merged.csv라는 이름의 csv 파일로 저장한다.

class MapBuildingToBuildingClusterService(MapBuildingToBuildingClusterInterface):
    def map_building_to_building_cluster(
        self,
        building_cluster_polygons: gpd.GeoDataFrame,
        building_points: gpd.GeoDataFrame,
    ) -> None:
        merged_building_and_building_cluster: gpd.GeoDataFrame = self._merge(
            building_cluster_polygons=building_cluster_polygons,
            building_points=building_points,
        )

        merged_building_and_building_cluster = (
            AddColumn.convert_xy_to_longitude_and_latitude(
                df=merged_building_and_building_cluster,
                x_key="건물중심점_x좌표",
                y_key="건물중심점_y좌표",
            )
        )

        merged_building_and_building_cluster = merged_building_and_building_cluster[
            ["latitude", "longitude"]
        ]

        SaveFile.df_to_csv(
            df=merged_building_and_building_cluster,
            file_name="merged.csv",
        )

코드

https://github.com/copyNdpaste/map-point-to-polygon

결과 확인

QGIS에서 csv 파일 열기

... 클릭하고 csv 파일 선택

건물 클러스터 폴리곤 .shp 파일도 열어주고 그 위에 point를 찍어준다

파란색 건물 클러스터 폴리곤안에 속하는 건물의 중심 좌표가 빨간색으로 표시됐다.

0개의 댓글