용의자 위치 추적 시스템 - folium으로 위치 표시

2024. 12. 2. 18:26Python Flask & Database

이전 포스팅에서 folium에 각 지역과 용의자의 위도, 경도를 표시했다.

 


문제점

1. 지역의 위도와 경도를 파이썬 random 함수로 생성하여 터무니 없는 곳에 생성되었다.

2. 용의자의 위치와 지역의 마커가 동일하여 알아보기 힘들다.

3. 마커의 개수가 79개나 되어서 가독성이 떨어진다.


해결

1. 지역의 위도와 경도를 파이썬 random 함수로 생성하여 터무니 없는 곳에 생성되었다.

-> chat-gpt를 사용하여 78개의 도시를 선정하여 도시 이름, 국가 이름, 위도, 경도를 sql 스크립트로 삽입하였다.

UPDATE region SET
    region_name = 'Seoul', country_name = 'South Korea', latitude = 37.5665, longitude = 126.9780 WHERE id = 1;
UPDATE region SET
    region_name = 'Tokyo', country_name = 'Japan', latitude = 35.6895, longitude = 139.6917 WHERE id = 2;
UPDATE region SET
    region_name = 'Beijing', country_name = 'China', latitude = 39.9042, longitude = 116.4074 WHERE id = 3;
UPDATE region SET
    region_name = 'New York', country_name = 'USA', latitude = 40.7128, longitude = -74.0060 WHERE id = 4;
UPDATE region SET
    region_name = 'Los Angeles', country_name = 'USA', latitude = 34.0522, longitude = -118.2437 WHERE id = 5;

 

2. 용의자의 위치와 지역의 마커가 동일하여 알아보기 힘들다.

-> 용의자의 위치는 Marker 표시를, 지역의 위치는 CircleMarker 표시를 하여 구분을 해줬다.

 

3. 마커의 개수가 79개나 되어서 가독성이 떨어진다.

-> 지역의 위치를 CircleMarker로 하였으며 색을 연한색 (Grey, White)로 하여 시각적으로 구분하기 쉽게 만들었다.

    # 지도 생성 및 마커 추가
    m = folium.Map(location=[latitude, longitude], zoom_start=3)

    folium.Marker(
        location=[latitude, longitude],
        popup=f"용의자 추정 위치"
        ).add_to(m)

    # region 테이블에서 도시, 국가, 위도, 경도 정보 가져오기
    cur.execute(f"select region_name, country_name, latitude, longitude from region")
    region_data = cur.fetchall()
    for region_name, country_name, latitude, longitude in region_data:
            folium.CircleMarker(
                location=[latitude, longitude],
                popup=f"{region_name}, {country_name}",
                radius=6,
                color="grey",
                fill=True,
                fill_color="white"
            ).add_to(m)

결과

 

각 지역의 위치는 비교적 작게 표시되었고 용의자의 위치는 Marker로 눈에 띄게 표시되었다.

지도가 입력폼 밑에 뜨는데 다음 포스팅에서는 이를 새로운 창으로 띄울 수 있도록 하겠다.