본문 바로가기
Coding/javascript

[JS] .CSV 파일 특정 컬럼 데이터 구글 맵 마커 표기(fetch)

by jamong1014 2024. 5. 3.
반응형
<html>
<head>
    <title>
	</title>
   
    <script>
        function initMap() {
            var map = new google.maps.Map(document.getElementById('map'), {
                zoom: 13, 
                center: {lat: 37.5665, lng: 126.9780}
            });

        
           function fetchData() {
		   
				var url = 'data.csv';
					
                fetch(url)
                    .then(response => response.text())
                    .then(csv => parseCSV(csv))
                    
            }


            function parseCSV(csv) {
                var lines = csv.split("\n");
                for (var i = 0; i < lines.length; i++) {
                    var data = lines[i].split(",");
                    var lat = parseFloat(data[23]); 
                    var lng = parseFloat(data[24]); 
					var name = data[5];
                    
                    var marker = new google.maps.Marker({
                        position: {lat: lat, lng: lng},
                        map: map
                    });
                    
                    	const infowindow = new google.maps.InfoWindow({
							content: name
						
						});
						
					marker.addListener('click', function(){

                        if (infowindow.getMap()) {
									infowindow.close();
								} else {
									infowindow.open(map, this);
								}
						});
                }
            }

            fetchData();
        }
    </script>
    <style>
        #map {
            height: 1000px;
            width: 100%;
        }
    </style>
</head>
<body>
    <div id="map"></div>
	 <script src="https://maps.googleapis.com/maps/api/js?key= callback=initMap" async defer></script>
</body>

</html>
  • fetch 함수 사용
  • 콜백 함수 에서 '=>'는 외부 컨텍스트에서 this를 상속 즉 마커 객체가 아닌 이벤트 리스너 함수가 속한 객체가 됨
  • 따라서 자신만의 this 컨텍스트를 가져서 호출될 때 실행되는 컨텍스트에 따라 this를 결정하는 function() 사용
반응형