xymap(지도를 위한 것)
xymap(기초) - 지도위에 어떻게 도형이나 그림을 그리는가?
작성자
sjpark
작성일
2025-03-10 21:50
조회
20
지도위에 어떻게 도형이나 그림을 그리는가?
위에서 설명한 그림중에서 vector형식으로 가능한 것이 대부분 도형입니다. 선을 긋거나 하는 대부분의 일을 vector로 하는 것이지요. 아래의 것을 각각 적용하면 됩니다사용법은 각각의 것은 형태를 배워야 합니다. 약간씩은 차이가 있지만, 대부분은 만든사람도 사용하는 사람도 중요한 부분으로 무엇이 들어가야 하는지는 대충 알고있죠
1 | Polyline | 선그리기 |
2 | Polygon | 다각형 연결 |
3 | Rectangle | 사각형 |
4 | Circle | 원 |
5 | Marker | 점표시 |
6 | CircleMarker | 마커를 가진 원 |
요소 종류 | 설명 |
Marker | 특정 위치에 점으로 표시. 아이콘, 팝업 등을 추가하여 정보를 제공가능 |
Polyline | 두 개 이상의 점을 연결하여 선을 그립니다. 도로, 강, 경로 등을 표시 |
Polygon | 폐쇄된 영역을 나타내는 다각형입니다. 국가, 도시, 건물 등을 표시 |
Circle | 위치를 중심으로 반지름을 가지는 원. 특정 지역의 반경을 나타낼 때 사용 |
CircleMarker | Marker와 유사하지만, 반지름을 지정하여 원형으로 표시 |
FeatureGroup | 여러 개의 요소를 하나의 그룹으로 묶어 관리. 레이어처럼 사용하여 지도 위에 표시하거나 숨길 수 있음 |
LayerControl | 여러 개의 FeatureGroup을 레이어 형태로 관리하여 사용자가 원하는 레이어만 선택하여 표시할 수 있도록 합니다 |
가장 기본이되는 아무것도 없는 순수한 지도만 불어오는 기능에 대한 예제를 보여드립니다
# -*- coding: utf-8 -*-
import xy_map
xymap = xy_map.xy_map()
xymap.new_map([37.388738, 126.967983], 10) #지도에서 보여줄 위치와 지도의 크기를 설정
xymap.draw_marker([37.493869, 126.530965], "tooltip_text","popup_text") #마커를 추가
xymap.show_map("file_name_for_xymap.html") # 화일로 저장하면서, 보여주는것

간단한 몇가지 지도 만들기

제가 출근을 하는 지하철역인 평촌역의 위도와 경도를 구글맵에서 찾아봅니다
import folium
m = folium.Map(location=[37.39434998313918, 126.9639149003046], zoom_start=12)
m.save('D:\\map_test\pyez_map_01.html')
이렇게 만들면 아래와같이 인터넷이 연결되어 있으면 나타나는 것이다
위도 경도는 알것이며, 이것이 중간에 오돌고 만든것이며,
zoom_start는 화면을 화면을 얼마나 키울것인지를 정하는 것이다

이제 평촌역에 마크를 찍어보도록 하겠습니다
import folium
m = folium.Map(location=[37.39434998313918, 126.9639149003046], zoom_start=12)
folium.Marker([37.39434998313918, 126.9639149003046],
popup='평촌역',
tooltip='근처에오면 나타나는것',
fill_color='red',
icon=folium.Icon(color="red", icon="cloud"),
draggable= True
).add_to(m)
m.save('D:\\map_test\pyez_map_01.html')
maker라는 기능으로 새로운 마크부분의 레이어를 만드는 것이고, 필요한만큼 리스트로 만들어서 반복문을 만들어서 적용을하면 여러 개의 마크를 넣을수있는것이다
물론 마크에도 다른 여러가지 추가기능도 있으니 링크를 하거나 그런것들을 추가해서 사용하시기를 바랍니다

이번에는 한국의 시군구 행정지도를 전국지도위에 나타내도록 해보자
그럴려면 먼저 geojson으로 만든 자료를 다운받아야 한다.
일단 잘 ㅇ나보여서 사이즈를 7로 만들어서 전국이 보이도록 만들었다


이렇게 'D:\\map_test\pyez_map_01.html'의 이름으로 저장이 되니 이것을 다른사람에게 보내서 열어보면 나타난다
자 이런것들을 잘 만들어서 내가 개인적으로 맛집리스트의 보관을 위해 만들어본 자료를 공유해본다
단, 영역을 나타내는 것은 맛집리스트를 나타내는 용도가 아니기 때문에 그것은 제외를 시켰다
import folium
from folium import plugins
icon_type = ["cloud","info-sign","star","bookmark","flag", ]
color_type = ['lightred', 'gray', 'lightgreen', 'pink','lightblue', 'beige', 'black', 'darkgreen', 'darkblue', 'lightgray', 'green', 'white', 'red', 'blue', 'orange', 'darkred', 'purple', 'cadetblue', 'darkpurple']
input_lists = [
['37.55440684521157', '127.12937429453059','food_land','방이 샤브샤브','맛나는데 여자들이 더 좋아해요'],
['37.1834787433397','128.466953597959','food_land','미탄집','메밀전병'],
['37.2079513137108','128.986557255629','food_land','구와우순두부','순두부'],
['37.4394032971955','129.191077282623','food_sea','바다횟집','감자가 더 맛남'],
['37.754685298115','128.892883699817','food_land','벌집','장칼국수'],
['37.7575959968149','128.892604911465','food_land','현대장칼국수','장칼국수,'],
['37.5042414054923','127.055259984471','food_land','피양콩할마니','피양콩할마니'],
['38.2033207916817','128.591515153804','food_sea','엄지네포장마차','꼬막'],
['38.1952821302829','128.579786653923','food_land','동화가든','땀뽕순두부'],
['37.9458138292635','128.328946098098','food_land','고향집','순두부'],
['36.0995687389908','127.589196711552','food_sea','용강식당','어죽'],
['37.3999806660193','126.975119125071','food_land','원조곱창','곱창'],
['37.399935096617','126.975471269251','food_land','원시쪽갈비','쪽갈비'],
['34.9521663667122','127.487343513381','food_sea','순광식당','낙지볶음'],
['37.7912748626138','128.910415953845','food_land','토담순두부','나는 맛있는데 다른 사람은 그저그렇다함 약간 탄맛이 나는 집임 주문하고 오죽헌이 바로 옆이라 기다릴때 좋음'],
['38.2314967503015','128.582627826868','cafe','바다정원','적극 추천 주차장이 넓으며 꼭 무었을 먹지 않아도 됨 엄청 넓음'],
['38.2046823187654','128.590054913374','food_land','속초중앙시장','순대국이 유명함'],
['37.9333209329239','127.793253926861','food_sky','통나무집닭갈비','나쁘지 않음 다른델 가보지 않아서..그렇다고 와~~하는 맛은 아님'],
['37.0703599083337','127.064082471021','food_land','최네집','맛있음 / 추천'],
['37.3184959577525','126.839966371027','food_sky','정든닭발','여자들이 좋아함 개인적으로 이런종류를 좋아하지 않아서…'],
['37.3939163520767','126.962935098014','food_sea','생태명가','맛있음 / 추천'],
['37.3462987770993','127.335722528698','food_land','최미자소머리국밥','고기가 냄새도 안나고 맛있음 가볼만 함'],
['37.5039277741022','127.053058055688','food_land','백암농민순대','순대 좋아하는 사람은 맛있다고 함'],
['37.5033233846917','127.051987082674','food_land','뽕나무쟁이족발','한번은 먹어볼만한집 줄서서 먹는집'],
['37.5257050210618','127.052910328702','food_land','새볔집','육회 비빕밥과 된장이 맛있는 집'],
['37.5042978375586','127.054266726852','food_land','카토멘','개인적으로 먹을만 함 토마토가 많이 들어있음 토마토를 기준으로 만든곳 건강 라멘'],
['37.7478858820528','126.485243986378','food_land','일억조','맛있음 근데 딱히 어떤 맛이라고 하기에는 힘듬'],
['35.0321451418816','126.717044499816','food_land','하얀집','맛있음 국물이 맑음'],
['35.2533252378496','126.952127826807','food_land','담양쌍교갈비','추천 / 맛과 가성비가 정말 좋은집'],
['35.978433999337','126.715782226821','food_land','복성루','맛있음 볶음밥도 맛남'],
['36.3004275126493','127.569849657513','food_sky','경진각','건강한 짬뽕 / 괜잖음'],
['37.5084834823297','127.065552628647','food_land','강남구 중앙해장','예전엔 더 좋았는데 아직도 맛나긴함, 근데 너무 가격을 자주 올림'],
['37.50932856891103','127.056312013306','food_land','강남구 한방정통삼계탕','강남구 한방정통삼계탕'],
['37.5038671857236','127.054679542141','food_land','강남구 호천당','강남구 호천당'],
['35.1540951478414','126.910056740248','etc','광주 무등분식','나는 상추튀김을 좋아함'],
['35.9796848674394','126.71918782677','food_land','군산 뽀빠이냉면','군산 뽀빠이냉면'],
['37.3792036157342','126.973036999809','food_land','의왕 황제짬뽕','의왕 황제짬뽕'],
['37.0076440342247','127.272738082614','food_land','경기도 안일옥','설렁탕집'],
['37.917476522754','127.055426053798','food_land','동두천 오륙하우스','경양식'],
['37.6123973036119','127.137494478308','food_sea','구리 어랑추','고등어김치찌개'],
['37.3948275853207','126.962858554913','food_land','평촌 한성집','돼지고기 특수부위'],
['37.3617402712768','127.244431716815','food_land','광주 황소고집','돼지고기 특수부위 / 가성비 굳'],
['37.5349891971756','127.067797193612','food_land','건대 계탄집','닭갈비'],
['37.5061396015078','127.054713624954','cafe','강남 포스코빌딩','테라로사'],
['37.52607055531','127.035764293608','cafe','강남 누데이크 하우스도산','카페'],
['37.769251690238','128.9181384422','cafe','강릉빵바다','인절미빵'],
['37.7292122536139','126.703002139736','cafe','파주 더티트렁크 카페','파주 더티트렁크 카페'],
['37.4112132100277','127.114463885606','cafe','판교 사송카페','판교 사송카페'],
['37.3789074156138','127.164225362851','cafe','광주 카페인신현리','광주 카페인신현리'],
['37.6740051317982','127.376212778339','cafe','남양주 베이커리 씨어터','남양주 베이커리 씨어터'],
]
m = folium.Map(
location=[37.3825321569003, 126.9703265151501],
zoom_start=9
)
fg = folium.FeatureGroup(name='육해공군과 카페를 한눈에')
m.add_child(fg)
g1 = plugins.FeatureGroupSubGroup(fg, '카페')
m.add_child(g1)
g2 = plugins.FeatureGroupSubGroup(fg, '음식-육')
m.add_child(g2)
g3 = plugins.FeatureGroupSubGroup(fg, '음식-해')
m.add_child(g3)
g4 = plugins.FeatureGroupSubGroup(fg, '음식-공')
m.add_child(g4)
g5 = plugins.FeatureGroupSubGroup(fg, '음식-기타')
m.add_child(g5)
g6 = plugins.FeatureGroupSubGroup(fg, '분류제외')
m.add_child(g6)
folium.LayerControl(collapsed=False).add_to(m)
for one_data in input_lists:
if one_data[2] == "cafe":
folium.Marker(
location=[one_data[0], one_data[1]],
popup=one_data[2],
icon=folium.Icon(color=color_type[0],icon=icon_type[0]),
tooltip=one_data[3],
).add_to(g1)
elif one_data[2] == "food_land":
folium.Marker(
location=[one_data[0], one_data[1]],
popup=one_data[2],
icon=folium.Icon(color=color_type[1],icon=icon_type[1]),
tooltip=one_data[3],
).add_to(g2)
elif one_data[2] == "food_sea":
folium.Marker(
location=[one_data[0], one_data[1]],
popup=one_data[2],
icon=folium.Icon(color=color_type[2],icon=icon_type[2]),
tooltip=one_data[3],
).add_to(g3)
elif one_data[2] == "food_sky":
folium.Marker(
location=[one_data[0], one_data[1]],
popup=one_data[2],
icon=folium.Icon(color=color_type[3],icon=icon_type[3]),
tooltip=one_data[3],
).add_to(g4)
elif one_data[2] == "etc":
folium.Marker(
location=[one_data[0], one_data[1]],
popup=one_data[2],
icon=folium.Icon(color=color_type[4],icon=icon_type[4]),
tooltip=one_data[3],
).add_to(g5)
else:
folium.Marker(
location=[one_data[0], one_data[1]],
popup=one_data[2],
icon=folium.Icon(color=color_type[5],icon='star'),
tooltip=one_data[3],
).add_to(g6)
m.save('D:\\map_test\pyez_map_02.html')

이번에는 각 구별로 된것중에 내가있는 안양시 동안구에 색을 넣는 형태를 만들어 보려고 한다
그럼 이번엔 어떻게 되는것인지 다시한번 생각해 보도록 한다
- 지도자료위에 선으로 행정구역 표시를 한다
감사한 말씀을 드립니다
그것을 joson의 자료를 보면, text로 되어있으며, 각 구역의 code번호를 넣어서 관리를 하고있는 것입니다
예를 들어 검색을 하여 찾아보니 안양시 동안구의 코드는 SIG_CD : 41173라고 되어있네요
만약 “안양시 동안구”의 색을 빨간색으로 칠하고 싶다면, 고유한 번호인 41173인 구역을 빨간색으로 하면 되는 것입니다

위의 자료에서 안양시 동안구의 자료만 갖고와보면
{
"type":"Feature",
"geometry":{
"type":"Polygon",
"coordinates":[[[126.964,37.441], [126.965,37.439],[126.963,37.435],
[126.961,37.426],[126.962,37.421],[126.967,37.417],
[126.973,37.416],[126.976,37.411],[126.976,37.406],
[126.979,37.405],[126.983,37.4],[126.98,37.396],
[126.983,37.395],[126.974,37.389],[126.973,37.387],
[126.972,37.38],[126.967,37.375],[126.965,37.371],
[126.966,37.369],[126.964,37.365],[126.966,37.362],
[126.962,37.362],[126.957,37.366],[126.952,37.366],
[126.948,37.369],[126.946,37.373],[126.947,37.375],
[126.939,37.38],[126.941,37.386],[126.94,37.393],
[126.931,37.398],[126.927,37.402],[126.927,37.408],
[126.93,37.415],[126.938,37.414],[126.942,37.419],
[126.948,37.422],[126.948,37.425],[126.949,37.429],
[126.948,37.437],[126.952,37.439],[126.959,37.439],
[126.964,37.441]]]},
"properties":{"SIG_CD":"41173","SIG_ENG_NM":"Dongan-gu, Anyang-si","SIG_KOR_NM":"안양시동안구"}},
사전으로 만들어진 자료인 것을 알수가있다
즉, 다각형인 polygon을 이용하여 시작점과 끝점이 만나도록 해서 영역을 만드는 것이다
한땀한땀 수작업이 필요한 일을 어떤 분께서 해주신것이라는 고마움을 느껴보자
이런 다각형에 각자 이름을 넣어서 찾아 거기에 알맞은 색을 넣는것이라고 생각하면 맞는것이다
그럼 위의 폴리곤의 자료만 갖고가서 한번 영역에 빨간색을 칠해 보도록 하자