일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 도커
- 스트림셋이란?
- ansible install
- mysql on docker
- 도커 시작하기
- c++
- java
- elk stack
- streamsets 강의
- 앤서블 설치
- 푸시푸시
- 파이썬
- 알고리즘
- 도커 elk
- C언어
- 데이트
- c
- docker
- 도커 mysql
- 코딩
- MySQL
- 스트림셋
- python
- nvidia docker
- 백준
- 클라우드
- 자바
- 정보처리기사
- 데이터베이스
- mysql docker
- Today
- Total
리그캣의 개발놀이터
[Follium] 사용하여 주소를 맵에 표시 본문
Chicken_Map-1.py
import folium map_osm = folium.Map(location = [37.614776, 127.013337]) map_osm.save('d:/temp/map1.html') map_osm = folium.Map(location=[37.614776, 127.013337], zoom_start=17) map_osm.save('d:/temp/map2.html') |
라이브러리 추가하고 코드 테스팅
제대로 생성됐는지 확인해보는 작업
map_osm = folium.Map(location=[37.614776, 127.013337], zoom_start=17, tiles='Stamen Toner') map_osm.save('d:/temp/map_StamenToner.html') map_osm = folium.Map(location=[37.614776, 127.013337], zoom_start=17, tiles='Stamen Terrain') map_osm.save('d:/temp/map_StamenTerrain.html') |
이것도 parameter 적용하여 확인작업.
map_osm = folium.Map(location=[37.614776, 127.013337], zoom_start=17) folium.Marker([37.614776, 127.013337], popup='서경대학교').add_to(map_osm) folium.Marker([37.615970, 127.011834], popup='북악관').add_to(map_osm) map_osm.save('d:/temp/map_SKu1.html') |
다음식으로 좌표가져와서 마커와 팝업을 설정해 줄 수 있음.
소스코드 파악했으니 Chicken_Map을 만들어 볼 차례
import folium import json import urllib.request import datetime import pandas as pd import webbrowser |
필요 라이브러리 추가
#code1 def get_request_url(url): req = urllib.request.Request(url) req.add_header("X-Naver-Client-Id","Ch0vdY0HM6SPOidkt02i") req.add_header("X-Naver-Client-Secret","ANmaZHqA8m") try: response = urllib.request.urlopen(req) if response.getcode() == 200: print("[%s] Url Request Success"%datetime.datetime.now()) return response.read().decode('utf-8') except Exception as e: print(e) print("[%s] Error for URL : %s" %(datetime.datetime.now(),url)) return None |
NAVER API 연동하기위한 URL REQUEST
#code2 def getGeoData(address): base = "https://openapi.naver.com/v1/map/geocode" node = "" parameters = "?query=%s" % urllib.parse.quote(address) url = base + node + parameters retData = get_request_url(url) if (retData == None): return None else: return json.loads(retData) |
해당 API연동하여 정보가져오기
def main(): #code3 map = folium.Map(location=[37.5103, 126.982], zoom_start=12) #code4 filename = 'pericana_modify.csv' df = pd.read_csv(filename, encoding='CP949', index_col=0, header=0) geoData = [] for index, row in df.iterrows(): if row['sido'] == '서울특별시': geoData = getGeoData(row['store_address']) if geoData != None: print(geoData) folium.Marker(geoData, popup=row['store'], icon=folium.Icon(color='blue')).add_to(map) #code5 svFilename = 'Chicken_Map-1.html' map.save(svFilename) webbrowser.open(svFilename) if __name__ == '__main__': main() |
서울특별시에 한정되어 pericana_modify.csv에 있는 주소 표시하기 위한 코드
실행시켰더니 에러가나서 보니
print(geoData)
를 실행하여 데이터를 확인해보니getGeoData(address)가 json 형식 그대로 가져오는 것을 확인할 수 있었음
{'result': {'total': 1, 'userquery': '서울특별시 강서구 양천로51길 11, 1층 102호(가양동,신환빌딩)', 'items': [{'address': '서울특별시 강서구 양천로51길 11 신환빌딩', 'addrdetail': {'country': '대한민국', 'sido': '서울특별시', 'sigugun': '강서구', 'dongmyun': '양천로51길', 'ri': '', 'rest': '11 신환빌딩'}, 'isRoadAddress': Tru |
{'result': {'total': 1, 'userquery': '서울특별시 강서구 양천로51길 11, 1층 102호(가양동,신환빌딩)', 'items': [{'address': '서울특별시 강서구 양천로51길 11 신환빌딩', 'addrdetail': {'country': '대한민국', 'sido': '서울특별시', 'sigugun': '강서구', 'dongmyun': '양천로51길', 'ri': '', 'rest': '11 신환빌딩'}, 'isRoadAddress': True, 'point': {'x': 126.8428764, 'y': 37.5682634}}]}} |
이때 json형식을 보면 다음과같이 x,y좌표를 확인할 수 있었음.
이것을 뽑아내보자는 생각이 들어 다음과 같이 실행함
for index, row in df.iterrows(): if row['sido'] == '서울특별시': geoData = getGeoData(row['store_address']) if geoData != None: print(geoData['result']['items'][0]['point']['x']) print(geoData['result']['items'][0]['point']['y']) |
Traceback (most recent call last):
126.8428764
37.5682634
다음과 같이 출력되는것을 확인
folium.Marker([geoData['result']['items'][0]['point']['x'],geoData['result']['items'][0]['point']['y']], popup=row['store'], icon=folium.Icon(color='blue')).add_to(map) |
을 사용하기로 함.
??
왜 북극에 가잇냥..
이 좌표가 아닌가..;;
x, y 좌표를 바꾸어보자는 생각이 들어서 바꾸어 보았음.
오 정상 출력되는 것을 확인 가능.
같은 방식으로 굽네치킨 주소도 표시해 보겠음
전체소스코드
import folium import json import urllib.request import datetime import pandas as pd import webbrowser #code1 def get_request_url(url): req = urllib.request.Request(url) req.add_header("X-Naver-Client-Id","Ch0vdY0HM6SPOidkt02i") req.add_header("X-Naver-Client-Secret","ANmaZHqA8m") try: response = urllib.request.urlopen(req) if response.getcode() == 200: print("[%s] Url Request Success"%datetime.datetime.now()) return response.read().decode('utf-8') except Exception as e: print(e) print("[%s] Error for URL : %s" %(datetime.datetime.now(),url)) return None #code2 def getGeoData(address): base = "https://openapi.naver.com/v1/map/geocode" node = "" parameters = "?query=%s" % urllib.parse.quote(address) url = base + node + parameters retData = get_request_url(url) if (retData == None): return None else: return json.loads(retData) def main(): #code3 map = folium.Map(location=[37.5103, 126.982], zoom_start=12) #code4 filename = 'pericana_modify.csv' df = pd.read_csv(filename, encoding='CP949', index_col=0, header=0) geoData = [] for index, row in df.iterrows(): if row['sido'] == '서울특별시': geoData = getGeoData(row['store_address']) if geoData != None: print(geoData['result']['items'][0]['point']['x']) print(geoData['result']['items'][0]['point']['y']) folium.Marker([geoData['result']['items'][0]['point']['y'],geoData['result']['items'][0]['point']['x']], popup=row['store'], icon=folium.Icon(color='blue')).add_to(map) filename2 = 'goobne_modify.csv' df2 = pd.read_csv(filename2, encoding='CP949', index_col=0, header=0) geoData2 = [] for index, row in df2.iterrows(): if row['sido'] == '서울특별시': geoData2 = getGeoData(row['store_address']) if geoData2 != None: print(geoData2['result']['items'][0]['point']['x']) print(geoData2['result']['items'][0]['point']['y']) folium.Marker([geoData2['result']['items'][0]['point']['y'],geoData2['result']['items'][0]['point']['x']], popup=row['store'], icon=folium.Icon(color='red')).add_to(map) #code5 svFilename = 'Chicken_Map-1.html' map.save(svFilename) webbrowser.open(svFilename) if __name__ == '__main__': main() |
표시화면
다음과 같이 표시가 가능하다
'개발 공부 > Python(웹)' 카테고리의 다른 글
flask와 mysql을 docker container 환경에서 연동해보기 (0) | 2020.08.13 |
---|---|
[pandas] 매장 주소 보정하기. (0) | 2018.05.16 |
[Python] Facebook Page Crawler 만들기 (2) | 2018.04.06 |