용의자 위치 추적 시스템 - 가장 가까운 도시 3개 찾기

2024. 12. 2. 20:11Python Flask & Database

기존 지도에는 78개의 도시의 위치가 전부 표시되어 있다.

 


용의자의 위치와 가장 가까운 3개의 도시만 지도에 표시하도록 하겠다.

우선 용의자의 위치와 가장 가까운 3개의 도시를 선별하는 함수는 다음과 같다.

distance.euclidean을 사용하여 유클리디언 거리를 측정한 후, 거리를 기준으로 sort하여 3개의 도시만 따로 뽑았다.

@with_transaction
def get_closest_regions(cur, latitude, longitude):
    cur.execute(f"select region_name, country_name, latitude, longitude from region")
    region_data = cur.fetchall()
    region_dist = []
    for region_name, country_name, lat, long in region_data:
        dist = distance.euclidean([latitude, longitude], [lat, long])
        region_dist.append((region_name, country_name, lat, long, dist))
    sorted_region_dist = sorted(region_dist, key=lambda x: x[4])
    closest_3_regions = sorted_region_dist[:3]
    return closest_3_regions

 

 

다음으로 3개의 지역을 CircleMarker로 표시해주는데 이전과 달리 도시가 3개밖에 없으며 모두 중요한 단서이기 때문에 색을 red로 설정하고 radius를 50으로 설정하여 범위를 넓게 설정해주었다.

    closest_3_regions = get_closest_regions(latitude, longitude)
    for region_name, country_name, latitude, longitude, dist in closest_3_regions:
            folium.CircleMarker(
                location=[latitude, longitude],
                popup=f"{region_name}, {country_name}",
                radius=50,
                color="red",
                fill=True,
                fill_color="white"
            ).add_to(m)

이제 용의자의 위치와 가장 가까운 도시 3개만 표시된 것을 확인할 수 있다.