[Django] 지도에 우리나라 행정구역 표시하기

Cherry·2022년 5월 4일
0

이번에 작은 토이프로젝트를 하는데 대충 설명하자면 트위터에서 자연재해에 관한 트윗들을 가져와서 해당 지역에 따라 지도에 렌더링하는 프로젝트이다. 지역은 시,도까지만 하기로 했다. 구나 군같은 경우는 나중에 기회가 되면 더 구체적으로 개발하겠다.

Mark Model 설정

이전에 장고로 지도 그리기 게시글을 바탕으로 프로젝트를 진행하였다. 우선 원래 mark모델을 아래와 같이 수정해주었다.

class Mark(models.Model):
    location = gismodels.MultiPolygonField()
    region_name = models.CharField(max_length=255)

    def __str__(self):
        return self.region_name

우리나라 행정구역을 표시해주기 위해 MultiPolygonField()로 바꿔주었다.

Json 파일 다운로드

우선 우리나라 시도의 경계인 위도 경도가 들어있는 geojson파일을 다운받아준다.
여기를 통해서 다운받아주면 된다.
파일의 생김새는 대략 이러하다..양이 어마어마하기 때문에 이 파일은 깃에 안올리기로 했다.

코드 작성

파일을 읽어서 렌더링해주기 위해서 코드를 짜본다 아래코드는 우선 view에다가 작성했다.

file_path = r"파일이름.json"

        with open(file_path, 'r', encoding="UTF8") as file:
            data = json.load(file)
            for i in range(len(data["features"])):
                print(data["features"][i]["properties"]["CTP_KOR_NM"], " 정보 표시됨")

                polys = []
                for j in range(len(data["features"][i]["geometry"]["coordinates"])):
                    polys.append(Polygon(data["features"][i]["geometry"]["coordinates"][j]))

                poly = MultiPolygon(polys)
                mark_kr, created = Mark.objects.get_or_create(
                    region_name=data["features"][i]["properties"]["CTP_KOR_NM"],
                    location=poly
                )
                if created:
                    mark_kr.save()

MultiPolygon은 여러개의 Polygon객체로 이루어진 거기 때문에 Polygon객체를 생성해준다음 MultiPolygon에 추가해주었다. 이렇게 코드를 실행해주고 지도에 들어가보면 행정구역마다 경계가 잘 생성되어있을것이다. 현재는 지도에서 구역을 누르면 해당 위치가 뜨고 있다. 예를 들어서 경기도를 누르면 경기도라는 이름이 뜬다. 이제 저기에서 구역을 누르면 해당 지역에 해당하는 자연재해 트윗을 렌더링해줄 예정이다.

끝!! 다음은 지역하고 트위터를 연결해주는 과정에 대해 글을 작성해줄거다!☺️

0개의 댓글