MapContainer.js 2.36 KB
/*global kakao*/
import React, { Component, useCallback } from "react";
import styled from "styled-components";

const { kakao } = window;

var nowlat, nowlon;

class MapContainer extends Component {
  constructor(props) {
    super(props);

    this.state = {
      isLoading: true,
      lat: 37.506502,
      lon: 127.053617,
    };

    this.getLocation = this.getLocation.bind(this);
    this.getMap = this.getMap.bind(this);
    this.componentDidMount = this.componentDidMount.bind(this);
  }

  sleep = (ms) => {
    return new Promise((resolve) => setTimeout(resolve, ms));
  };

  getLocation = (callback) => {
    if (navigator.geolocation) {
      // GeoLocation을 이용해서 접속 위치를 얻어옵니다
      navigator.geolocation.getCurrentPosition(function (position) {
        nowlat = position.coords.latitude; // 위도
        nowlon = position.coords.longitude; // 경도
        console.log(nowlat, nowlon);
        var locPosition = new kakao.maps.LatLng(nowlat, nowlon); // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
        //message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다

        // 마커와 인포윈도우를 표시합니다
        //displayMarker(locPosition, message);
        callback();
        //return locPosition;
      });
    } else {
      // HTML5의 GeoLocation을 사용할 수 없을때 마
      nowlat = 37.506502; // 위도
      nowlon = 127.053617; // 경도커 표시 위치와 인포윈도우 내용을 설정합니다

      var locPosition = new kakao.maps.LatLng(37.506502, 127.053617);
      //message = "geolocation을 사용할수 없어요..";

      //displayMarker(locPosition, message);
      callback();
    }
  };

  getMap = () => {
    this.getLocation(() => {
      this.setState({ lat: nowlat, lon: nowlon });
      let container = document.getElementById("Mymap");
      let options = {
        center: new kakao.maps.LatLng(this.state.lat, this.state.lon),
        level: 7,
      };

      const map = new window.kakao.maps.Map(container, options);
    });
  };

  componentDidMount() {
    this.getMap();
  }

  render() {
    return <MapContents id="Mymap"></MapContents>; // 이부분이 지도를 띄우게  부분.
  }
}

const MapContents = styled.div`
  width: 500px;
  height: 400px;
`;

export default MapContainer;