이유제

Merge branch 'maptest' into 'master'

Maptest

map 기능 개선 merge 요청드립니다.

See merge request !2
......@@ -13,10 +13,8 @@ app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.engine('html', require('ejs').renderFile);
//각각의 요청에서 router 호출해서 page를 전환함.
//각각의 요청에서 index.js에 등록된 router 호출해서 page를 전환함.
app.use('/', mainRouter);
app.use('/login', mainRouter);
//css, image 등 정적 파일을 public에서 불러옴 -> html과 연결함
app.use(express.static(path.join(__dirname, 'public')));
......@@ -26,7 +24,6 @@ app.get('/logout', function (req, res) {
res.send("Logout success");
});
app.listen(app.get('port'), () => {
console.log(`Server is running at ${app.get('port')}`);
});
......
const searchBox = document.querySelector(".search-box");
const searchBtn = document.querySelector(".search-icon");
const cancelBtn = document.querySelector(".cancel-icon");
const searchInput = document.querySelector("input");
const searchData = document.querySelector(".search-data");
searchBtn.onclick = () => {
searchBox.classList.add("active");
searchBtn.classList.add("active");
searchInput.classList.add("active");
cancelBtn.classList.add("active");
searchInput.focus();
if (searchInput.value != "") {
var values = searchInput.value;
searchData.classList.remove("active");
searchData.innerHTML = "You just typed " + "<span style='font-weight: 500;'>" + values + "</span>";
} else {
searchData.textContent = "";
}
}
cancelBtn.onclick = () => {
searchBox.classList.remove("active");
searchBtn.classList.remove("active");
searchInput.classList.remove("active");
cancelBtn.classList.remove("active");
searchData.classList.toggle("active");
searchInput.value = "";
}
\ No newline at end of file
window.FontAwesomeKitConfig = {
"asyncLoading": {
"enabled": true
},
"autoA11y": {
"enabled": true
},
"baseUrl": "https://ka-f.fontawesome.com",
"detectConflictsUntil": null,
"iconUploads": {},
"license": "free",
"method": "css",
"minify": {
"enabled": true
},
"token": "a076d05399",
"v4FontFaceShim": {
"enabled": false
},
"v4shim": {
"enabled": false
},
"version": "5.15.1"
};
! function (t) {
"function" == typeof define && define.amd ? define(t) : t()
}((function () {
"use strict";
function t(e) {
return (t = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) {
return typeof t
} : function (t) {
return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t
})(e)
}
function e(t, e, n) {
return e in t ? Object.defineProperty(t, e, {
value: n,
enumerable: !0,
configurable: !0,
writable: !0
}) : t[e] = n, t
}
function n(t, e) {
var n = Object.keys(t);
if (Object.getOwnPropertySymbols) {
var o = Object.getOwnPropertySymbols(t);
e && (o = o.filter((function (e) {
return Object.getOwnPropertyDescriptor(t, e).enumerable
}))), n.push.apply(n, o)
}
return n
}
function o(t) {
for (var o = 1; o < arguments.length; o++) {
var r = null != arguments[o] ? arguments[o] : {};
o % 2 ? n(Object(r), !0).forEach((function (n) {
e(t, n, r[n])
})) : Object.getOwnPropertyDescriptors ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(r)) : n(Object(r)).forEach((function (e) {
Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(r, e))
}))
}
return t
}
function r(t, e) {
return function (t) {
if (Array.isArray(t)) return t
}(t) || function (t, e) {
if (!(Symbol.iterator in Object(t) || "[object Arguments]" === Object.prototype.toString.call(t))) return;
var n = [],
o = !0,
r = !1,
i = void 0;
try {
for (var c, a = t[Symbol.iterator](); !(o = (c = a.next()).done) && (n.push(c.value), !e || n.length !== e); o = !0);
} catch (t) {
r = !0, i = t
} finally {
try {
o || null == a.return || a.return()
} finally {
if (r) throw i
}
}
return n
}(t, e) || function () {
throw new TypeError("Invalid attempt to destructure non-iterable instance")
}()
}
function i(t, e) {
var n = e && e.addOn || "",
o = e && e.baseFilename || t.license + n,
r = e && e.minify ? ".min" : "",
i = e && e.fileSuffix || t.method,
c = e && e.subdir || t.method;
return t.baseUrl + "/releases/" + ("latest" === t.version ? "latest" : "v".concat(t.version)) + "/" + c + "/" + o + r + "." + i
}
function c(t, e) {
var n = e || ["fa"],
o = "." + Array.prototype.join.call(n, ",."),
r = t.querySelectorAll(o);
Array.prototype.forEach.call(r, (function (e) {
var n = e.getAttribute("title");
e.setAttribute("aria-hidden", "true");
var o = !e.nextElementSibling || !e.nextElementSibling.classList.contains("sr-only");
if (n && o) {
var r = t.createElement("span");
r.innerHTML = n, r.classList.add("sr-only"), e.parentNode.insertBefore(r, e.nextSibling)
}
}))
}
var a, u = function () { },
f = "undefined" != typeof global && void 0 !== global.process && "function" == typeof global.process.emit,
s = "undefined" == typeof setImmediate ? setTimeout : setImmediate,
d = [];
function l() {
for (var t = 0; t < d.length; t++) d[t][0](d[t][1]);
d = [], a = !1
}
function h(t, e) {
d.push([t, e]), a || (a = !0, s(l, 0))
}
function m(t) {
var e = t.owner,
n = e._state,
o = e._data,
r = t[n],
i = t.then;
if ("function" == typeof r) {
n = "fulfilled";
try {
o = r(o)
} catch (t) {
b(i, t)
}
}
p(i, o) || ("fulfilled" === n && v(i, o), "rejected" === n && b(i, o))
}
function p(e, n) {
var o;
try {
if (e === n) throw new TypeError("A promises callback cannot return that same promise.");
if (n && ("function" == typeof n || "object" === t(n))) {
var r = n.then;
if ("function" == typeof r) return r.call(n, (function (t) {
o || (o = !0, n === t ? y(e, t) : v(e, t))
}), (function (t) {
o || (o = !0, b(e, t))
})), !0
}
} catch (t) {
return o || b(e, t), !0
}
return !1
}
function v(t, e) {
t !== e && p(t, e) || y(t, e)
}
function y(t, e) {
"pending" === t._state && (t._state = "settled", t._data = e, h(w, t))
}
function b(t, e) {
"pending" === t._state && (t._state = "settled", t._data = e, h(A, t))
}
function g(t) {
t._then = t._then.forEach(m)
}
function w(t) {
t._state = "fulfilled", g(t)
}
function A(t) {
t._state = "rejected", g(t), !t._handled && f && global.process.emit("unhandledRejection", t._data, t)
}
function O(t) {
global.process.emit("rejectionHandled", t)
}
function j(t) {
if ("function" != typeof t) throw new TypeError("Promise resolver " + t + " is not a function");
if (this instanceof j == !1) throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");
this._then = [],
function (t, e) {
function n(t) {
b(e, t)
}
try {
t((function (t) {
v(e, t)
}), n)
} catch (t) {
n(t)
}
}(t, this)
}
j.prototype = {
constructor: j,
_state: "pending",
_then: null,
_data: void 0,
_handled: !1,
then: function (t, e) {
var n = {
owner: this,
then: new this.constructor(u),
fulfilled: t,
rejected: e
};
return !e && !t || this._handled || (this._handled = !0, "rejected" === this._state && f && h(O, this)), "fulfilled" === this._state || "rejected" === this._state ? h(m, n) : this._then.push(n), n.then
},
catch: function (t) {
return this.then(null, t)
}
}, j.all = function (t) {
if (!Array.isArray(t)) throw new TypeError("You must pass an array to Promise.all().");
return new j((function (e, n) {
var o = [],
r = 0;
function i(t) {
return r++,
function (n) {
o[t] = n, --r || e(o)
}
}
for (var c, a = 0; a < t.length; a++)(c = t[a]) && "function" == typeof c.then ? c.then(i(a), n) : o[a] = c;
r || e(o)
}))
}, j.race = function (t) {
if (!Array.isArray(t)) throw new TypeError("You must pass an array to Promise.race().");
return new j((function (e, n) {
for (var o, r = 0; r < t.length; r++)(o = t[r]) && "function" == typeof o.then ? o.then(e, n) : e(o)
}))
}, j.resolve = function (e) {
return e && "object" === t(e) && e.constructor === j ? e : new j((function (t) {
t(e)
}))
}, j.reject = function (t) {
return new j((function (e, n) {
n(t)
}))
};
var S = "function" == typeof Promise ? Promise : j;
function E(t, n) {
var o = n.fetch,
r = n.XMLHttpRequest,
i = n.token;
return new S((function (n, c) {
if ("function" == typeof o) o(t, {
mode: "cors",
cache: "default",
headers: new Headers(e({}, "fa-kit-token", i))
}).then((function (t) {
if (t.ok) return t.text();
throw new Error("")
})).then((function (t) {
n(t)
})).catch(c);
else if ("function" == typeof r) {
var a = new r;
a.addEventListener("loadend", (function () {
this.responseText ? n(this.responseText) : c(new Error(""))
}));
["abort", "error", "timeout"].map((function (t) {
a.addEventListener(t, (function () {
c(new Error(""))
}))
})), a.open("GET", t), a.setRequestHeader("fa-kit-token", i), a.send()
} else {
c(new Error(""))
}
}))
}
function _(t, e) {
var n = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : function () { },
r = e.document || r,
a = c.bind(c, r, ["fa", "fab", "fas", "far", "fal", "fad", "fak"]);
t.autoA11y.enabled && n(a);
var u = [{
id: "fa-main",
addOn: void 0
}];
t.v4shim.enabled && u.push({
id: "fa-v4-shims",
addOn: "-v4-shims"
}), t.v4FontFaceShim.enabled && u.push({
id: "fa-v4-font-face",
addOn: "-v4-font-face"
});
var f = u.map((function (n) {
return new S((function (r, c) {
E(i(t, {
addOn: n.addOn,
minify: t.minify.enabled
}), e).then((function (i) {
r(P(i, o({}, e, {
baseUrl: t.baseUrl,
version: t.version,
id: n.id
})))
})).catch(c)
}))
}));
return S.all(f)
}
function P(t, e) {
var n = document.createElement("style"),
o = document.createTextNode(function (t, e, n) {
var o = t;
return [
[/(url\("?)\.\.\/\.\.\/\.\./g, function (t, n) {
return "".concat(n).concat(e)
}],
[/(url\("?)\.\.\/webfonts/g, function (t, o) {
return "".concat(o).concat(e, "/releases/v").concat(n, "/webfonts")
}],
[/(url\("?)https:\/\/kit-free([^.])*\.fontawesome\.com/g, function (t, n) {
return "".concat(n).concat(e)
}]
].forEach((function (t) {
var e = r(t, 2),
n = e[0],
i = e[1];
o = o.replace(n, i)
})), o
}(t, e.baseUrl, e.version));
return n.appendChild(o), n.media = "all", e.id && n.setAttribute("id", e.id), e && e.detectingConflicts && e.detectionIgnoreAttr && n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)), n
}
function F(t, e) {
e.autoA11y = t.autoA11y.enabled, "pro" === t.license && (e.autoFetchSvg = !0, e.fetchSvgFrom = t.baseUrl + "/releases/" + ("latest" === t.version ? "latest" : "v".concat(t.version)) + "/svgs", e.fetchUploadedSvgFrom = t.uploadsUrl);
var n = [];
return t.v4shim.enabled && n.push(new S((function (n, r) {
E(i(t, {
addOn: "-v4-shims",
minify: t.minify.enabled
}), e).then((function (t) {
n(T(t, o({}, e, {
id: "fa-v4-shims"
})))
})).catch(r)
}))), n.push(new S((function (n, r) {
E(i(t, {
minify: t.minify.enabled
}), e).then((function (t) {
var r = T(t, o({}, e, {
id: "fa-main"
}));
n(function (t, e) {
var n = e && void 0 !== e.autoFetchSvg ? e.autoFetchSvg : void 0,
o = e && void 0 !== e.autoA11y ? e.autoA11y : void 0;
void 0 !== o && t.setAttribute("data-auto-a11y", o ? "true" : "false");
n && (t.setAttributeNode(document.createAttribute("data-auto-fetch-svg")), t.setAttribute("data-fetch-svg-from", e.fetchSvgFrom), t.setAttribute("data-fetch-uploaded-svg-from", e.fetchUploadedSvgFrom));
return t
}(r, e))
})).catch(r)
}))), S.all(n)
}
function T(t, e) {
var n = document.createElement("SCRIPT"),
o = document.createTextNode(t);
return n.appendChild(o), n.referrerPolicy = "strict-origin", e.id && n.setAttribute("id", e.id), e && e.detectingConflicts && e.detectionIgnoreAttr && n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)), n
}
function C(t) {
var e, n = [],
o = document,
r = o.documentElement.doScroll,
i = (r ? /^loaded|^c/ : /^loaded|^i|^c/).test(o.readyState);
i || o.addEventListener("DOMContentLoaded", e = function () {
for (o.removeEventListener("DOMContentLoaded", e), i = 1; e = n.shift();) e()
}), i ? setTimeout(t, 0) : n.push(t)
}
function L(t) {
"undefined" != typeof MutationObserver && new MutationObserver(t).observe(document, {
childList: !0,
subtree: !0
})
}
try {
if (window.FontAwesomeKitConfig) {
var k = window.FontAwesomeKitConfig,
x = {
detectingConflicts: k.detectConflictsUntil && new Date <= new Date(k.detectConflictsUntil),
detectionIgnoreAttr: "data-fa-detection-ignore",
fetch: window.fetch,
token: k.token,
XMLHttpRequest: window.XMLHttpRequest,
document: document
},
I = document.currentScript,
U = I ? I.parentElement : document.head;
(function () {
var t = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {},
e = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
return "js" === t.method ? F(t, e) : "css" === t.method ? _(t, e, (function (t) {
C(t), L(t)
})) : void 0
})(k, x).then((function (t) {
t.map((function (t) {
U.insertBefore(t, I ? I.nextSibling : null)
})), x.detectingConflicts && I && C((function () {
I.setAttributeNode(document.createAttribute(x.detectionIgnoreAttr));
var t = function (t, e) {
var n = document.createElement("script");
return e && e.detectionIgnoreAttr && n.setAttributeNode(document.createAttribute(e.detectionIgnoreAttr)), n.src = i(t, {
baseFilename: "conflict-detection",
fileSuffix: "js",
subdir: "js",
minify: t.minify.enabled
}), n
}(k, x);
document.body.appendChild(t)
}))
})).catch((function (t) {
console.error("".concat("Font Awesome Kit:", " ").concat(t))
}))
}
} catch (t) {
console.error("".concat("Font Awesome Kit:", " ").concat(t))
}
}));
\ No newline at end of file
@import url('https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
html,body{
display: grid;
height: 100%;
place-items: center;
background: #000000;
}
.search-box{
position: relative;
height: 60px;
width: 60px;
border-radius: 50%;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
/* //박스 길이 조절 */
.search-box.active{
width: 700px;
}
.search-box input{
width: 100%;
height: 100%;
border: none;
border-radius: 50px;
background: #fff;
outline: none;
padding: 0 60px 0 20px;
font-size: 18px;
opacity: 0;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
/* 불투명도 */
.search-box input.active{
opacity: 1;
}
.search-box input::placeholder{
color: #a6a6a6;
}
.search-box .search-icon{
position: absolute;
/* 버튼위치 */
right: -380px;
top: 50%;
transform: translateY(-50%);
height: 60px;
width: 60px;
background: #fff;
border-radius: 50%;
text-align: center;
line-height: 60px;
font-size: 22px;
color: #CB25FF;
cursor: pointer;
z-index: 1;
/* transition: all 0.5s cubic-bezier(0.6, -0.28, 0.74, 0.05); */
/* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
transition-timing-function: linear;
}
.search-box .search-icon.active{
right: 5px;
height: 50px;
line-height: 50px;
width: 50px;
font-size: 20px;
background: #CB25FF;
color: #fff;
transform: translateY(-50%) rotate(360deg);
}
.search-box .cancel-icon{
position: absolute;
right: -380px;
top: 50%;
transform: translateY(-50%);
font-size: 25px;
color: #fff;
cursor: pointer;
/* transition: all 0.5s 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55); */
/* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
transition-timing-function: linear;
}
.search-box .cancel-icon.active{
right: -40px;
}
.search-box .search-data{
text-align: center;
padding-top: 7px;
color: #fff;
font-size: 18px;
word-wrap: break-word;
}
.search-box .search-data.active{
display: none;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>검색창 애니메이션</title>
</head>
<body>
<div class="searchBtn">
<link rel="stylesheet" href="btnstyle.css">
<script src="btnsource.js"></script>
<div class="search-box">
<input type="text" placeholder="검색어를 입력하세요 (ex. AAAI 2020)..">
<!-- encoded function for activating search-bar in lisensed resouce -->
<div class="search-icon">
<i class="fas fa-search"></i>
</div>
<div class="cancel-icon">
<i class="fas fa-times"></i>
</div>
<div class="search-data"></div>
</div>
<script src="btnClickEvent.js"></script>
</div>
</body>
</html>
\ No newline at end of file
<div class="searchBtn">
<link rel="stylesheet" href="btnstyle.css">
<script src="btnsource.js"></script>
<div class="search-box">
<input type="text" placeholder="검색어를 입력하세요 (ex. AAAI 2020)..">
<!-- encoded function for activating search-bar in lisensed resouce -->
<div class="search-icon">
<i class="fas fa-search"></i>
</div>
<div class="cancel-icon">
<i class="fas fa-times"></i>
</div>
<div class="search-data"></div>
</div>
<script src="btnClickEvent.js"></script>
</div>
\ No newline at end of file
const express = require('express');
const app = express();
app.get('/', (req, res) => {
//res.send('API SERVER IS WORKING');
console.log("api.js 실행");
});
\ No newline at end of file
const express = require('express');
const router = express.Router();
router.get('/', function (req, res) {
res.send("모든 공연 정보 리스트 반환")
});
module.exports = router;
\ No newline at end of file
<html>
<head>
<title>로그인 페이지</title>
<link rel="stylesheet" href="login_style.css" type="text/css">
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
</head>
<body>
<header>
<div class="nav-bar">
<img src="camera.png" alt="" class="logo">
<ul class="menu">
<li><a href="">Home</a></li>
<li><a href="">Services</a></li>
<li><a href="">Portfolio</a></li>
<li><a href="">Testimonimal</a></li>
<li><a href="">Career</a></li>
<li><a href="">Contact</a></li>
</ul>
</div>
<div class="welcome">
<h1>로그인</h1>
<a id="kakao-login-btn"></a>
</div>
</header>
</body>
<script>
Kakao.init('0678e32dab56db1c52ac63ab4ccb7663');
console.log(Kakao.isInitialized());
Kakao.Auth.createLoginButton({
container: '#kakao-login-btn',
success: function (authObj) {
console.log(JSON.stringify(authObj));
alert(JSON.stringify(authObj));//authObj -> 토큰임.
},
fail: function (err) {
alert(JSON.stringify(err));
}
})
</script>
</html>
\ No newline at end of file
<html>
<head>
<title>Webpage Design In HTML and CSS</title>
<link rel="stylesheet" href="main_style.css" type="text/css">
</head>
<body>
<header>
<div class="nav-bar">
<img src="camera.png" alt="" class="logo">
<ul class="menu">
<li><a href="">Home</a></li>
<li><a href="">Services</a></li>
<li><a href="">Portfolio</a></li>
<li><a href="">Testimonimal</a></li>
<li><a href="">Career</a></li>
<li><a href="">Contact</a></li>
</ul>
</div>
<div class="welcome">
<h1>어떤 공연을 찾으시나요?</h1>
<a href="#" class="btn btn1">나의 근처 공연</a>
<a href="#" class="btn btn2">검색하기</a>
<a href="login.html" class="btn btn3">로그인</a>
</div>
</header>
</body>
</html>
\ No newline at end of file
*
{
margin: 0;
padding: 0;
}
header
{
background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back1.jpg);
height: 100vh;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
transition: 5s;
animation-name: animate;
animation-direction: alternate-reverse;
animation-duration: 30s;
animation-fill-mode:forwards;
animation-iteration-count: infinite;
animation-play-state: running;
animation-timing-function:ease-in-out;
}
@keyframes animate{
0%{
background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back1.jpg);
}
33%{
background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back2.jpg);
}
66%{
background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(back3.jpg);
}
}
.nav-bar
{
background: rgb(0,0,0,0.5);
height: 80px;
}
.logo{
background-color: #fff;
margin: 10px 50px;
height: 60px;
}
.menu{
float: right;
list-style: none;
margin:20px;
}
.menu li{
display: inline-block;
margin: 10px 5px;
}
.menu li a{
text-decoration: none;
color: #fff;
padding: 5px 10px;
font-family: sans-serif;
letter-spacing: 2px;
border: 1px solid #fff;
}
.menu li a:hover{
background: #fff;
transition: .4s;
color: #000;
}
.welcome{
position:relative;
text-align:center;
font-family: sans-serif;
color:#fff;
top: 300px;
}
.welcome h1{
font-size: 42px;
margin: 25px;
}
.btn{
font-size:18px;
letter-spacing: 2px;
margin:5px;
padding:7px 10px;
text-decoration: none;
border: 1px solid #fff;
}
.btn{
color:#fff;
}
.btn:hover{
background: #fff;
color: #000;
transition: .4s;
}
\ No newline at end of file
var http = require('http');
var fs = require('fs');
var app = http.createServer(function(request,response){
var url=request.url;
if(url == '/'){
url = '/mapPage.html';
}
response.writeHead(200);
response.end(fs.readFileSync(__dirname+url));
});
app.listen(8080);
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title> map Page title </title>
</head>
<body>
<div id="map" style="width:500px;height:350px"></div>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script>
<script src="./mypos.js"></script>
<script src="./show_pos.js"></script>
</body>
</html>
\ No newline at end of file
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
// 지도를 표시할 div와 지도 옵션으로 지도를 생성합니다
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
level: 5 // 지도의 확대 레벨
};
var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
// HTML5의 geolocation으로 사용할 수 있는지 확인합니다
if (navigator.geolocation) {
// GeoLocation을 이용해서 접속 위치를 얻어옵니다
navigator.geolocation.getCurrentPosition(function(position) {
var lat = position.coords.latitude, // 위도
lon = position.coords.longitude; // 경도
var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
message = '<div style="padding:5px;">나의 위치!</div>'; // 인포윈도우에 표시될 내용입니다
// 마커와 인포윈도우를 표시합니다
displayMarker(locPosition, message);
});
} else { // HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
var locPosition = new kakao.maps.LatLng(33.450701, 126.570667),
message = 'geolocation을 사용할수 없어요..'
displayMarker(locPosition, message);
}
// 지도에 마커와 인포윈도우를 표시하는 함수입니다
function displayMarker(locPosition, message) {
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map,
position: locPosition
});
var iwContent = message, // 인포윈도우에 표시할 내용
iwRemoveable = true;
// 인포윈도우를 생성합니다
var infowindow = new kakao.maps.InfoWindow({
content : iwContent,
removable : iwRemoveable
});
// 인포윈도우를 마커위에 표시합니다
infowindow.open(map, marker);
// 지도 중심좌표를 접속위치로 변경합니다
map.setCenter(locPosition);
}
\ No newline at end of file
var positions = [
{
title: '카카오',
latlng: new kakao.maps.LatLng(37.2427865, 127.106767)
}
];
displayShows(positions);
function displayShows(positions){
var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
for (var i = 0; i < positions.length; i ++) {
// 마커 이미지의 이미지 크기 입니다
var imageSize = new kakao.maps.Size(24, 35);
// 마커 이미지를 생성합니다
var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map, // 마커를 표시할 지도
position: positions[i].latlng, // 마커를 표시할 위치
title : positions[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
image : markerImage // 마커 이미지
});
}
}
\ No newline at end of file
// git Ignore 할것!!!!!!!!!!!!!!!!!!!!!!
{
"host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
"user":"root",
"password": "dldbwp1207",
"port": "3306",
"database": "showdata"
}
\ No newline at end of file
//해당 아이디를 불러와서 lat lon 받아서 지도 출력
//지도 생성
//해당 위치 표시
const fs = require('fs');
const express = require('express');
const data = fs.readFileSync('./showData.json');
const conf = JSON.parse(data);
const mysql = require('mysql');
const connection = mysql.createConnection({
host: conf.host,
user: conf.user,
password: conf.password,
port: conf.port,
database: conf.database
});
connection.connect(); //연결
app.get('위치(에 접속한 경우 쿼리를 날려준다.)')
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>geolocation으로 마커 표시하기</title>
</head>
<body>
<p style="margin-top:-12px">
<b>Chrome 브라우저는 https 환경에서만 geolocation을 지원합니다.</b> 참고해주세요.
</p>
<div id="map" style="width:500px;height:350px;"></div>
<script type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script>
<script>
const near = require('study.js');
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
level: 10 // 지도의 확대 레벨
};
var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
// HTML5의 geolocation으로 사용할 수 있는지 확인합니다
if (navigator.geolocation) {
// GeoLocation을 이용해서 접속 위치를 얻어옵니다
navigator.geolocation.getCurrentPosition(function (position) {
var lat = position.coords.latitude, // 위도
lon = position.coords.longitude; // 경도
console.log(lat);
console.log(lon);
var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다
// 마커와 인포윈도우를 표시합니다
displayMarker(locPosition, message);
});
} else { // HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
var locPosition = new kakao.maps.LatLng(33.450701, 126.570667),
message = 'geolocation을 사용할수 없어요..'
displayMarker(locPosition, message);
}
displayShows();
function displayShows() {
var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
var near_list = near(lat, lon);
var positions = [];
for (var i = 0; i < near_list.length; i++) {
positions.push({
title: id,
lating: new kakao.maps.Lating(near_list[i][1], near_list[i][2])
})
}
for (var i = 0; i < positions.length; i++) {
// 마커 이미지의 이미지 크기 입니다
var imageSize = new kakao.maps.Size(24, 35);
// 마커 이미지를 생성합니다
var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map, // 마커를 표시할 지도
position: positions[i].latlng, // 마커를 표시할 위치
title: positions[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
image: markerImage // 마커 이미지
});
}
}
// 지도에 마커와 인포윈도우를 표시하는 함수입니다
function displayMarker(locPosition, message) {
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map,
position: locPosition
});
var iwContent = message, // 인포윈도우에 표시할 내용
iwRemoveable = true;
// 인포윈도우를 생성합니다
var infowindow = new kakao.maps.InfoWindow({
content: iwContent,
removable: iwRemoveable
});
// 인포윈도우를 마커위에 표시합니다
infowindow.open(map, marker);
// 지도 중심좌표를 접속위치로 변경합니다
map.setCenter(locPosition);
}
</script>
</body>
</html>
\ No newline at end of file
[
{
"id" : 1,
"oper_name" : "2020 파주포크페스티벌(취소)",
"oper_place" : "임진각 평화누리",
"description" : "포크뮤지션공연",
"start_day" : "2099/01/01",
"end_day" : "2099/01/01",
"start_time" : "17:30",
"end_time" : "22:00",
"is_free" : "유료",
"sponser" : "경기문화재단",
"spon_region" : "파주시",
"phone_num" : "031-853-9472",
"charge" : "30,000원+40,000원+50,000원+60,000원",
"age" : "누구나",
"homepage" : "http://www.pajufolk.com",
"parking" : "Y",
"where" : "경기도 파주시 문산읍 임진각로 148-40",
"latitude" : 37.89204327,
"longitude" : 126.7447918
},
{
"id" : 2,
"oper_name" : "시민가요제(잠정연기)",
"oper_place" : "파주시민회관 소공연장",
"description" : "파주시민노래경연대회",
"start_day" : "2099/01/01",
"end_day" : "2099/01/01",
"start_time" : "17:00",
"end_time" : "19:00",
"is_free" : "무료",
"sponser" : "(사)한국연예예술인총연합회 파주지회",
"spon_region" : "파주시",
"phone_num" : "031-944-3396",
"charge" : "무료",
"age" : "누구나",
"homepage" : "http://www.pajuart.or.kr/",
"parking" : "Y",
"where" : "경기도 파주시 시민회관길 33",
"latitude" : 37.75919299,
"longitude" : 126.7807224
},
{
"id" : 3,
"oper_name" : "구민화합체육대회",
"oper_place" : "인천아시아드주경기장",
"description" : "서구민 체육대회",
"start_day" : "2021/09/30",
"end_day" : "2021/09/30",
"start_time" : "9:00",
"end_time" : "17:00",
"is_free" : "무료",
"sponser" : "인천광역시 서구체육회",
"spon_region" : "인천광역시 서구청",
"phone_num" : "032-560-4133",
"charge" : "무료",
"age" : "전연령",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "인천광역시 서구 봉수대로 806",
"latitude" : 37.54518678,
"longitude" : 126.6650985
},
{
"id" : 4,
"oper_name" : "한여름밤의 야외음악회",
"oper_place" : "서동생활공원 다목적운동장",
"description" : "음악",
"start_day" : "2021/08/06",
"end_day" : "2021/08/06",
"start_time" : "20:00",
"end_time" : "22:00",
"is_free" : "무료",
"sponser" : "의령문화원+의령군",
"spon_region" : "의령군",
"phone_num" : "055-573-2034",
"charge" : "무료",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경상남도 의령군 의령읍 의병로8길 44",
"latitude" : 35.31545351,
"longitude" : 128.2558931
},
{
"id" : 5,
"oper_name" : "반려견을 위한 콘서트 (코로나19로 인한 2020년 행사 취소)",
"oper_place" : "청도야외공연장",
"description" : "반려동물과 함께 오케스트라 등의 음악 공연",
"start_day" : "2021/04/18",
"end_day" : "2021/04/18",
"start_time" : "0:00",
"end_time" : "0:00",
"is_free" : "무료",
"sponser" : "청도군",
"spon_region" : "청도군",
"phone_num" : "054-370-6376",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "경상북도 청도군 화양읍 청려로 1846",
"latitude" : 35.64838686,
"longitude" : 128.7186818
},
{
"id" : 6,
"oper_name" : "서흥 선비골 축제",
"oper_place" : "함현복지관 다목적홀",
"description" : "전국시조창경연대회 및 전국시조백일장",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "9:00~17:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "대한시조협회",
"spon_region" : "경기도 시흥시",
"phone_num" : "빈칸",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 정왕대로 266번길4, 2층 203호",
"latitude" : 37.34315896,
"longitude" : 126.7414021
},
{
"id" : 7,
"oper_name" : "테마가 있는 무용스케치",
"oper_place" : "시흥시청 늠내홀",
"description" : "무용공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "18:00~20:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "무용협회",
"spon_region" : "경기도 시흥시",
"phone_num" : "빈칸",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 옥구상가2길 4",
"latitude" : 37.35391394,
"longitude" : 126.7240013
},
{
"id" : 8,
"oper_name" : "시립전통예술단과 함께하는 청소년 연희축제",
"oper_place" : "ABC행복학습타운 ABC홀",
"description" : "시립전통예술단 연계 교육 결과발표회",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "14:00~16:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "시립전통예술단",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6738",
"charge" : "무료",
"age" : "초중",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "경기도 시흥시 소래산길 11",
"latitude" : 37.44850647,
"longitude" : 126.7846941
},
{
"id" : 9,
"oper_name" : "시립전통예술단과 함께하는 Hello 희희락락 콘서트 4회차",
"oper_place" : "ABC행복학습타운 ABC홀",
"description" : "시립전통예술단 연계 교육기획공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "10:00~11:30",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "시립전통예술단",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6738",
"charge" : "무료",
"age" : "초중",
"homepage" : "https://happyedu.siheung.go.kr",
"parking" : "Y",
"where" : "경기도 시흥시 소래산길 11",
"latitude" : 37.44850647,
"longitude" : 126.7846941
},
{
"id" : 10,
"oper_name" : "근로자와 함께하는 음악회",
"oper_place" : "주식회사 D&T",
"description" : "평일 및 외부 문화활동이 어려운 시흥시 재직 근로자들을 찾아가는 힐링 콘서트",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "16:00~17:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "경기도 시흥시",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-430-0169",
"charge" : "무료",
"age" : "전체관람가",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 경기과기대로 182",
"latitude" : 37.3310871,
"longitude" : 126.7309497
},
{
"id" : 11,
"oper_name" : "시립전통예술단과 함께하는 Hello 희희락락 콘서트 3회차",
"oper_place" : "ABC행복학습타운 ABC홀",
"description" : "시립전통예술단 연계 교육기획공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "10:00~11:30",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "시립전통예술단",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6738",
"charge" : "무료",
"age" : "초중",
"homepage" : "https://happyedu.siheung.go.kr",
"parking" : "Y",
"where" : "경기도 시흥시 소래산길 11",
"latitude" : 37.44850647,
"longitude" : 126.7846941
},
{
"id" : 12,
"oper_name" : "오페라 사랑의 묘약",
"oper_place" : "시흥시 여성비전센터",
"description" : "오페라 사랑의 묘약공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "14:00~22:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "시흥심포니오케스트라",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-499-0506",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 옥구상가2길 4",
"latitude" : 37.35391394,
"longitude" : 126.7240013
},
{
"id" : 13,
"oper_name" : "아마추어밴드 페스티벌",
"oper_place" : "월곶예술공판장 아트독",
"description" : "아마추어 밴드 공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "18:00~20:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "경기도 시흥시",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6733",
"charge" : "무료",
"age" : "전체관람가",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 월곶해안로 205",
"latitude" : 37.38623378,
"longitude" : 126.7406664
},
{
"id" : 14,
"oper_name" : "오이도박물관에서 예술과 놀다",
"oper_place" : "오이도박물관 야외무대",
"description" : "성악, 대북, 스트릿댄스 등 종합공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "18:00~19:30",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "예술누리",
"spon_region" : "경기도 시흥시",
"phone_num" : "070-8635-9228",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 중심상가로 349, 916동 502호",
"latitude" : 37.33561466,
"longitude" : 126.7510692
},
{
"id" : 15,
"oper_name" : "오이도 풍어제",
"oper_place" : "오이도 함상전망대",
"description" : "오이도 풍어제를 모티브로 한 창작곡 오케스트라연주 및 성악 공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "19:00~21:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "플루트콰르텟",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-313-2907",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 장현 능곡로 184",
"latitude" : 37.36940183,
"longitude" : 126.81066
},
{
"id" : 16,
"oper_name" : "연극 < 쑥부쟁이>",
"oper_place" : "ABC행복학습타운 어울림 소극장",
"description" : "80대 노부부의 삶의 마감에 대한 성찰연극",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "20:00~21:30",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "극단 기린",
"spon_region" : "경기도 시흥시",
"phone_num" : "빈칸",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 매화1로 30, 2층",
"latitude" : 37.41516469,
"longitude" : 126.8117784
},
{
"id" : 17,
"oper_name" : "마을활동가와 함께하는 버스킹",
"oper_place" : "정왕본동 행정복지센터 다목적실",
"description" : "정왕본동 마을활동가가 선보이는 버스킹 공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "18:00~19:30",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "정왕본동 행정복지센터",
"spon_region" : "정왕본동 행정복지센터",
"phone_num" : "031-310-4512",
"charge" : "무료",
"age" : "전체관람가",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 역전로 228",
"latitude" : 37.34940778,
"longitude" : 126.7460667
},
{
"id" : 18,
"oper_name" : "마을활동가와 함께하는 버스킹",
"oper_place" : "정왕역",
"description" : "정왕본동 마을활동가가 선보이는 버스킹 공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "18:00~19:30",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "정왕본동 행정복지센터",
"spon_region" : "정왕본동 행정복지센터",
"phone_num" : "031-310-4512",
"charge" : "무료",
"age" : "전체관람가",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 역전로 228",
"latitude" : 37.34940778,
"longitude" : 126.7460667
},
{
"id" : 19,
"oper_name" : "제29회 한국국악협회 시흥시지부 정기연주회",
"oper_place" : "ABC행복학습타운 ABC홀",
"description" : "국악공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "미정",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "국악협회",
"spon_region" : "경기도 시흥시",
"phone_num" : "빈칸",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 호현로 72",
"latitude" : 37.44623628,
"longitude" : 126.7868839
},
{
"id" : 20,
"oper_name" : "시흥시립소년소녀합창단 송년음악회",
"oper_place" : "ABC행복학습타운 ABC홀",
"description" : "겨울 및 크리스마스와 관련된 곡들로 구성된 합창 공연(사전 관람 신청 필요)",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "19:30~21:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "시흥시립소년소녀합창단",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6264",
"charge" : "무료",
"age" : "초등이상",
"homepage" : "http://www.culturesiheung.com/",
"parking" : "Y",
"where" : "경기도 시흥시 소래산길 11 시흥ABC행복학습타운",
"latitude" : 37.44850588,
"longitude" : 126.7846949
},
{
"id" : 21,
"oper_name" : "가족문화나들이 에필로그공연 어메이징 매직쇼",
"oper_place" : "시흥시청 늠내홀",
"description" : "가족과 즐기는 세계대회 수상자들의 마술공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "17:00~18:30",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "㈜엠에프컴퍼니",
"spon_region" : "경기도 시흥시",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "전체관람가",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "경기도 시흥시 시흥시청로20",
"latitude" : 37.38042323,
"longitude" : 126.8040654
},
{
"id" : 22,
"oper_name" : "올댓콘서트-홍경섭 Jazz Band",
"oper_place" : "월곶예술공판장 아트독",
"description" : "겨을을 느낄 수 있는 재즈 나잇 콘서트",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "19:30~21:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "앙상블온",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-320-6737",
"charge" : "빈칸",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "경기도 시흥시 월곶해안로 205",
"latitude" : 37.38623378,
"longitude" : 126.7406664
},
{
"id" : 23,
"oper_name" : "시립합창단 합창뮤지컬 소원택시",
"oper_place" : "시흥시청 늠내홀",
"description" : "시립합창단 뮤지컬 공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "15:00+14:00+18:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "경기도 시흥시",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6733",
"charge" : "무료",
"age" : "전체관람가",
"homepage" : "http://www.culturesiheung.com/",
"parking" : "Y",
"where" : "경기도 시흥시 시청로 20",
"latitude" : 37.38042164,
"longitude" : 126.8040627
},
{
"id" : 24,
"oper_name" : "시립합창단과 함께하는 청소년합창축제",
"oper_place" : "평생학습센터 대공연장",
"description" : "시립합창단 연계 교육 결과발표회",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "14:00~16:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "시립합창단",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6738",
"charge" : "무료",
"age" : "초중",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "경기도 시흥시 은행로 173길 14",
"latitude" : 37.445421,
"longitude" : 126.796807
},
{
"id" : 25,
"oper_name" : "제4회 늠내클래식축제 창작오페라 벼꽃 피다",
"oper_place" : "시흥시청 늠내홀",
"description" : "창작오페라 공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "18:00~20:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "음악협회",
"spon_region" : "경기도 시흥시",
"phone_num" : "빈칸",
"charge" : "5,000",
"age" : "제한없음",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "경기도 시흥시 호현로 72",
"latitude" : 37.44623628,
"longitude" : 126.7868839
},
{
"id" : 26,
"oper_name" : "제4회 시흥시합창페스티벌",
"oper_place" : "ABC행복학습타운",
"description" : "시립합창단 및 지역합창단 공연",
"start_day" : "2021/01/01",
"end_day" : "2021/01/01",
"start_time" : "14:00~16:00",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "경기도 시흥시",
"spon_region" : "경기도 시흥시",
"phone_num" : "031-310-6733",
"charge" : "무료",
"age" : "전체관람가",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "경기도 시흥시 소래산길 11",
"latitude" : 37.44850588,
"longitude" : 126.7846949
},
{
"id" : 27,
"oper_name" : "제야음악회",
"oper_place" : "수성아트피아 용지홀",
"description" : "음악회",
"start_day" : "2020/12/31",
"end_day" : "2020/12/31",
"start_time" : "22:00",
"end_time" : "0:30",
"is_free" : "유료",
"sponser" : "수성아트피아",
"spon_region" : "수성아트피아",
"phone_num" : "053-668-1800",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "http://www.ssartpia.kr",
"parking" : "Y",
"where" : "대구광역시 수성구 무학로 180",
"latitude" : 35.82928349,
"longitude" : 128.6282735
},
{
"id" : 28,
"oper_name" : "코로나로 미정(2020 시네마 콘서트)",
"oper_place" : "경기섬유종합지원센터",
"description" : "영화음악 공연",
"start_day" : "2020/12/31",
"end_day" : "2020/12/31",
"start_time" : "19:00",
"end_time" : "20:00",
"is_free" : "무료",
"sponser" : "사단법인 한국영화인협회 양주시지부",
"spon_region" : "사단법인 한국영화인협회 양주시지부",
"phone_num" : "031-836-5141",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "경기도 양주시 평화로 1215",
"latitude" : 37.79910946,
"longitude" : 127.0451678
},
{
"id" : 29,
"oper_name" : "제야음악회",
"oper_place" : "웅부홀",
"description" : "복합",
"start_day" : "2020/12/31",
"end_day" : "2020/12/31",
"start_time" : "21:00",
"end_time" : "23:00",
"is_free" : "유료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3600",
"charge" : "빈칸",
"age" : "초등학생이상",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 30,
"oper_name" : "하우스콘서트 8월",
"oper_place" : "군산예술의전당 대공연장",
"description" : "클래식",
"start_day" : "2020/12/30",
"end_day" : "2020/12/30",
"start_time" : "19:30",
"end_time" : "20:30",
"is_free" : "무료",
"sponser" : "군산예술의전당",
"spon_region" : "전라북도 군산시청",
"phone_num" : "063-454-5535",
"charge" : "무료",
"age" : "초등생이상관람가",
"homepage" : "http://arts.gunsan.go.kr/index.gunsan",
"parking" : "Y",
"where" : "전라북도 군산시 백토로203, (지곡동)",
"latitude" : 35.96078244,
"longitude" : 126.7070385
},
{
"id" : 31,
"oper_name" : "휴 콘서트 5. -노트르아미-",
"oper_place" : "중구문화회관",
"description" : "문화가 있는 날 공연",
"start_day" : "2020/12/30",
"end_day" : "2020/12/30",
"start_time" : "11:00",
"end_time" : "12:00",
"is_free" : "유료",
"sponser" : "인천광역시 중구",
"spon_region" : "인천광역시 중구",
"phone_num" : "032-760-6402",
"charge" : "10,000원",
"age" : "빈칸",
"homepage" : "http://www.icjg.go.kr/artcenter",
"parking" : "Y",
"where" : "인천광역시 중구 축항대로296번길 81",
"latitude" : 37.44017466,
"longitude" : 126.6294074
},
{
"id" : 32,
"oper_name" : "문화가 있는 날 <김준수x두번째달 판소리 춘향가>",
"oper_place" : "강원대학교 백령체육관",
"description" : "퓨전국악",
"start_day" : "2020/12/30",
"end_day" : "2020/12/30",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "춘천문화재단",
"spon_region" : "춘천문화재단",
"phone_num" : "033-259-5824",
"charge" : "20,000원",
"age" : "만7세이상",
"homepage" : "http://www.cccf.or.kr",
"parking" : "Y",
"where" : "강원도 춘천시 춘천로 112",
"latitude" : 37.87309646,
"longitude" : 127.727808
},
{
"id" : 33,
"oper_name" : "영도구 청소년오케스트라 정기연주회",
"oper_place" : "영도문화예술회관 대공연장",
"description" : "정기연주회",
"start_day" : "2020/12/29",
"end_day" : "2020/12/29",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5562",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 34,
"oper_name" : "코믹뮤지컬 ''프리즌''",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/29",
"end_day" : "2020/12/31",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "극단 가게",
"spon_region" : "극단 가게",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 35,
"oper_name" : "색소폰 연주",
"oper_place" : "백조홀",
"description" : "대중음악",
"start_day" : "2020/12/27",
"end_day" : "2020/12/27",
"start_time" : "14:30",
"end_time" : "16:30",
"is_free" : "무료",
"sponser" : "강변색소폰동우회",
"spon_region" : "강변색소폰동우회",
"phone_num" : "빈칸",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 36,
"oper_name" : "12월 문화가 있는 날",
"oper_place" : "해동문화예술촌",
"description" : "예술도가, 디지털 캔버스",
"start_day" : "2020/12/26",
"end_day" : "2020/12/26",
"start_time" : "19:00",
"end_time" : "20:30",
"is_free" : "무료",
"sponser" : "(재)담양군문화재단",
"spon_region" : "담양군",
"phone_num" : "061-380-2804",
"charge" : "무료",
"age" : "전연령",
"homepage" : "http://www.damyang.go.kr",
"parking" : "Y",
"where" : "전라남도 담양군 담양읍 지침1길 6",
"latitude" : 35.31755724,
"longitude" : 126.9838342
},
{
"id" : 37,
"oper_name" : "자체제작 뮤지컬 온새미로",
"oper_place" : "대구학생문화센터 대공연장",
"description" : "뮤지컬",
"start_day" : "2020/12/24",
"end_day" : "2020/12/25",
"start_time" : "19:30",
"end_time" : "20:50",
"is_free" : "무료",
"sponser" : "대구학생문화센터",
"spon_region" : "대구학생문화센터",
"phone_num" : "053-231-1333",
"charge" : "0",
"age" : "8세이상",
"homepage" : "www.dccs.go.kr",
"parking" : "Y",
"where" : "대구광역시 달서구 용산로 181",
"latitude" : 35.8530244,
"longitude" : 128.5295222
},
{
"id" : 38,
"oper_name" : "수능콘서트",
"oper_place" : "오산문화예술회관 대공연장",
"description" : "수능을 마친 학생들을 위한 공연",
"start_day" : "2020/12/24",
"end_day" : "2020/12/24",
"start_time" : "미정",
"end_time" : "빈칸",
"is_free" : "무료",
"sponser" : "오산시",
"spon_region" : "오산문화원",
"phone_num" : "031-375-7755",
"charge" : "무료",
"age" : "고3학생",
"homepage" : "http://www.oscc.or.kr/",
"parking" : "Y",
"where" : "경기도 오산시 경기동로 41",
"latitude" : 37.15954961,
"longitude" : 127.0768564
},
{
"id" : 39,
"oper_name" : "국립오페라단",
"oper_place" : "웅부홀",
"description" : "오페라",
"start_day" : "2020/12/24",
"end_day" : "2020/12/26",
"start_time" : "19:30",
"end_time" : "21:10",
"is_free" : "유료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3600",
"charge" : "빈칸",
"age" : "초등학생이상",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 40,
"oper_name" : "2020 우수창작활동지원사업 연극 ''두 가족 이야기''",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/24",
"end_day" : "2020/12/27",
"start_time" : "13:00",
"end_time" : "18:00",
"is_free" : "무료",
"sponser" : "극단청사",
"spon_region" : "극단청사",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 41,
"oper_name" : "연극 ''러브액츄얼리''",
"oper_place" : "청주예술의전당",
"description" : "대중공연",
"start_day" : "2020/12/24",
"end_day" : "2020/12/27",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "(주)플레이더부산",
"spon_region" : "(주)플레이더부산",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 42,
"oper_name" : "스페셜 와인 콘서트",
"oper_place" : "백조홀",
"description" : "클래식",
"start_day" : "2020/12/23",
"end_day" : "2020/12/23",
"start_time" : "19:30",
"end_time" : "21:30",
"is_free" : "유료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3600",
"charge" : "3만원",
"age" : "5세이상",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 43,
"oper_name" : "문화가있는날",
"oper_place" : "정읍시립중앙도서관",
"description" : "송년음악회",
"start_day" : "2020/12/23",
"end_day" : "2020/12/23",
"start_time" : "17:00",
"end_time" : "18:00",
"is_free" : "무료",
"sponser" : "정읍시립중앙도서관",
"spon_region" : "정읍시",
"phone_num" : "063-539-6435",
"charge" : "무료",
"age" : "전시민",
"homepage" : "https://lib.jeongeup.go.kr/",
"parking" : "Y",
"where" : "전라북도 정읍시 벚꽃로 511",
"latitude" : 35.557377,
"longitude" : 126.8669738
},
{
"id" : 44,
"oper_name" : "지구를 지켜라",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/23",
"end_day" : "2020/12/27",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "극단 늘품",
"spon_region" : "극단 늘품",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 45,
"oper_name" : "송년음악회",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/23",
"end_day" : "2020/12/23",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "충북도립교향악단",
"spon_region" : "충북도립교향악단",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 46,
"oper_name" : "홍지민&박완 찬란한 콘서트",
"oper_place" : "영도문화예술회관 대공연장",
"description" : "뮤지컬",
"start_day" : "2020/12/22",
"end_day" : "2020/12/22",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5571",
"charge" : "일반5만원",
"age" : "8세이상",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 47,
"oper_name" : "2020 (사)한국서예협회 경상북도 초대작가전",
"oper_place" : "전관",
"description" : "서예",
"start_day" : "2020/12/22",
"end_day" : "2020/12/27",
"start_time" : "10:00",
"end_time" : "19:00",
"is_free" : "무료",
"sponser" : "(사)한국서예협회 경상북도지회",
"spon_region" : "(사)한국서예협회 경상북도지회",
"phone_num" : "054-859-8886",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 48,
"oper_name" : "11시 브런치 콘서트",
"oper_place" : "금정문화회관 소공연장",
"description" : "댄싱 클래식",
"start_day" : "2020/12/22",
"end_day" : "2020/12/22",
"start_time" : "11:00",
"end_time" : "12:20",
"is_free" : "유료",
"sponser" : "금정문화회관",
"spon_region" : "금정문화회관",
"phone_num" : "051-519-5661",
"charge" : "1만5천원",
"age" : "초등학생 이상",
"homepage" : "http://art.geumjeong.go.kr/",
"parking" : "Y",
"where" : "부산광역시 금정구 체육공원로 7(구서동)",
"latitude" : 35.24591888,
"longitude" : 129.094474
},
{
"id" : 49,
"oper_name" : "제8회 SY chum Company 정기공연",
"oper_place" : "청주예술의전당",
"description" : "무용",
"start_day" : "2020/12/22",
"end_day" : "2020/12/22",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "SY chum Company",
"spon_region" : "SY chum Company",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 50,
"oper_name" : "제4회 아르떼플루트오케스트라 정기연주회",
"oper_place" : "청주아트홀",
"description" : "음악",
"start_day" : "2020/12/22",
"end_day" : "2020/12/22",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "아르데플루트오케스트라",
"spon_region" : "아르데플루트오케스트라",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 51,
"oper_name" : "체코소년합창단 보니푸에라 내한 청주공연",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/22",
"end_day" : "2020/12/22",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "문화예술기획CHO",
"spon_region" : "문화예술기획CHO",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 52,
"oper_name" : "제5회 크리스마스 페스티벌",
"oper_place" : "영도어린이영어도서관",
"description" : "크리스마스 주제 도서 전시 및 포토존 운영 등",
"start_day" : "2020/12/20",
"end_day" : "2020/12/20",
"start_time" : "9:00",
"end_time" : "18:00",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도도서관",
"phone_num" : "051-419-5672",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "http://www.yeongdo.go.kr/library.web",
"parking" : "Y",
"where" : "부산광역시 영도구 절영로71",
"latitude" : 35.08855631,
"longitude" : 129.0390522
},
{
"id" : 53,
"oper_name" : "영화상영",
"oper_place" : "정읍기적의도서관",
"description" : "영화상영",
"start_day" : "2020/12/20",
"end_day" : "2020/12/20",
"start_time" : "15:00",
"end_time" : "16:00",
"is_free" : "무료",
"sponser" : "정읍기적의도서관",
"spon_region" : "정읍시",
"phone_num" : "063-539-6453",
"charge" : "무료",
"age" : "전시민",
"homepage" : "https://lib.jeongeup.go.kr/",
"parking" : "Y",
"where" : "전라북도 정읍시 수성5로 45-5",
"latitude" : 35.58427178,
"longitude" : 126.8606536
},
{
"id" : 54,
"oper_name" : "2020 송년음악회",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/20",
"end_day" : "2020/12/20",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "충북음악협회",
"spon_region" : "충북음악협회",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 55,
"oper_name" : "2020 시군 특화지원사업 연극 ''노적활자''",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/19",
"end_day" : "2020/12/20",
"start_time" : "13:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "극단청사",
"spon_region" : "극단청사",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 56,
"oper_name" : "용암숙명바가노바발레무용학원 정기발표회",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/19",
"end_day" : "2020/12/19",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "용암숙명바가노바발레무용학원",
"spon_region" : "용암숙명바가노바발레무용학원",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 57,
"oper_name" : "Dance and the music",
"oper_place" : "싸리재홀",
"description" : "음악",
"start_day" : "2020/12/18",
"end_day" : "2020/12/18",
"start_time" : "19:00",
"end_time" : "20:30",
"is_free" : "유료",
"sponser" : "인천광역시교육청학생교육문화회관",
"spon_region" : "인천광역시교육청학생교육문화회관",
"phone_num" : "032-760-3400",
"charge" : "6000원",
"age" : "초등",
"homepage" : "www.iecs.go.kr/",
"parking" : "Y",
"where" : "인천광역시중구자유공원로12(인현동)",
"latitude" : 37.47571123,
"longitude" : 126.6296707
},
{
"id" : 58,
"oper_name" : "2020 송년음악회",
"oper_place" : "대구학생문화센터 대공연장",
"description" : "콘서트",
"start_day" : "2020/12/18",
"end_day" : "2020/12/18",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "대구학생문화센터",
"spon_region" : "대구학생문화센터",
"phone_num" : "053-231-1333",
"charge" : "0",
"age" : "8세이상",
"homepage" : "www.dccs.go.kr",
"parking" : "Y",
"where" : "대구광역시 달서구 용산로 181",
"latitude" : 35.8530244,
"longitude" : 128.5295222
},
{
"id" : 59,
"oper_name" : "영도구 소년소녀합창단 정기연주회",
"oper_place" : "영도문화예술회관 대공연장",
"description" : "정기연주회",
"start_day" : "2020/12/18",
"end_day" : "2020/12/18",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5562",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 60,
"oper_name" : "제2회 고운소리합창단 정기합창연주회",
"oper_place" : "청주아트홀",
"description" : "음악",
"start_day" : "2020/12/18",
"end_day" : "2020/12/18",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "고운소리합창단",
"spon_region" : "고운소리합창단",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 61,
"oper_name" : "어린이 대상 영양, 위생 뮤지컬",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/18",
"end_day" : "2020/12/18",
"start_time" : "10:00",
"end_time" : "15:00",
"is_free" : "무료",
"sponser" : "청주시흥덕청원어린급식관리지원센터",
"spon_region" : "청주시흥덕청원어린급식관리지원센터",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 62,
"oper_name" : "군산시립교향악단 제138회 정기연주회",
"oper_place" : "군산예술의전당대공연장",
"description" : "클래식",
"start_day" : "2020/12/17",
"end_day" : "2020/12/17",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "군산예술의전당",
"spon_region" : "전라북도 군산시청",
"phone_num" : "063-454-5528",
"charge" : "무료",
"age" : "초등생이상 관람가",
"homepage" : "http://arts.gunsan.go.kr/index.gunsan",
"parking" : "Y",
"where" : "전라북도 군산시 백토로203, (지곡동)",
"latitude" : 35.96078244,
"longitude" : 126.7070385
},
{
"id" : 63,
"oper_name" : "제5회 크리스마스 페스티벌",
"oper_place" : "영도어린이영어도서관",
"description" : "크리스마스 테마도서 전시, 포토존 운영, 공연 등",
"start_day" : "2020/12/17",
"end_day" : "2020/12/24",
"start_time" : "9:00",
"end_time" : "18:00",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도도서관",
"phone_num" : "051-419-5674",
"charge" : "무료",
"age" : "제한없음",
"homepage" : "http://www.yeongdo.go.kr/library.web",
"parking" : "Y",
"where" : "부산광역시 영도구 절영로71",
"latitude" : 35.08855631,
"longitude" : 129.0390522
},
{
"id" : 64,
"oper_name" : "복병연 플루트 리사이틀 ''In paris''",
"oper_place" : "청주아트홀",
"description" : "순수공연",
"start_day" : "2020/12/17",
"end_day" : "2020/12/17",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "복병연",
"spon_region" : "복병연",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 65,
"oper_name" : "춘천시립예술단 2020 송년음악회",
"oper_place" : "한림대일송아트홀(예정)",
"description" : "춘천시립예술단 송년음악회",
"start_day" : "2020/12/17",
"end_day" : "2020/12/17",
"start_time" : "19:30",
"end_time" : "21:30",
"is_free" : "무료",
"sponser" : "춘천시립예술단",
"spon_region" : "춘천시+춘천문화재단",
"phone_num" : "033-259-5869",
"charge" : "빈칸",
"age" : "만 7세 이상 입장가능",
"homepage" : "http://www.cccf.or.kr",
"parking" : "Y",
"where" : "강원도 춘천시 한림대학길 1",
"latitude" : 37.88542721,
"longitude" : 127.734959
},
{
"id" : 66,
"oper_name" : "영도명화극장",
"oper_place" : "영도문화예술회관 소공연장",
"description" : "영화",
"start_day" : "2020/12/16",
"end_day" : "2020/12/16",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5571",
"charge" : "무료",
"age" : "8세이상",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 67,
"oper_name" : "메디컬 콘서트",
"oper_place" : "백조홀",
"description" : "복합",
"start_day" : "2020/12/16",
"end_day" : "2020/12/16",
"start_time" : "19:30",
"end_time" : "20:50",
"is_free" : "유료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3600",
"charge" : "빈칸",
"age" : "5세이상",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 68,
"oper_name" : "원주시립예술단 정기연주회",
"oper_place" : "원주백운아트홀",
"description" : "클래식 연주회",
"start_day" : "2020/12/16",
"end_day" : "2020/12/16",
"start_time" : "19:30",
"end_time" : "21:30",
"is_free" : "유료",
"sponser" : "원주시립예술단",
"spon_region" : "원주시 문화예술과",
"phone_num" : "033-766-0067",
"charge" : "성인5000원+학생3천원",
"age" : "8세이상",
"homepage" : "www.arts.wonju.go.kr",
"parking" : "Y",
"where" : "강원도 원주시 시청로1 (무실동)",
"latitude" : 37.34192499,
"longitude" : 127.9197228
},
{
"id" : 69,
"oper_name" : "2020상주단체육성지원사업 미래필하모니오케스트라 제17회 정기연주회",
"oper_place" : "영도문화예술회관 대공연장",
"description" : "공연",
"start_day" : "2020/12/15",
"end_day" : "2020/12/15",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5571",
"charge" : "일반2만원",
"age" : "8세이상",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 70,
"oper_name" : "제39회 국립 안동대학교 미술학과 졸업작품전",
"oper_place" : "전관",
"description" : "종합",
"start_day" : "2020/12/15",
"end_day" : "2020/12/20",
"start_time" : "10:00",
"end_time" : "19:00",
"is_free" : "무료",
"sponser" : "안동대학교 미술학과",
"spon_region" : "안동대학교 미술학과",
"phone_num" : "054-820-5560",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 71,
"oper_name" : "제5회 2020 청소년페스티벌",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/15",
"end_day" : "2020/12/15",
"start_time" : "10:00",
"end_time" : "18:00",
"is_free" : "무료",
"sponser" : "청주시기독교연합회",
"spon_region" : "청주시기독교연합회",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 72,
"oper_name" : "코믹연극 ''죽여주는 이야기''",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/15",
"end_day" : "2020/12/16",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "극단 가게",
"spon_region" : "극단 가게",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 73,
"oper_name" : "국립발레단 호두까기인형",
"oper_place" : "수성아트피아 용지홀",
"description" : "발레",
"start_day" : "2020/12/14",
"end_day" : "2020/12/15",
"start_time" : "19:30",
"end_time" : "21:30",
"is_free" : "유료",
"sponser" : "수성아트피아",
"spon_region" : "수성아트피아",
"phone_num" : "053-668-1800",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "http://www.ssartpia.kr",
"parking" : "Y",
"where" : "대구광역시 수성구 무학로 180",
"latitude" : 35.82928349,
"longitude" : 128.6282735
},
{
"id" : 74,
"oper_name" : "어린이뮤지컬 ''렛잇고2''",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/13",
"end_day" : "2020/12/13",
"start_time" : "10:00",
"end_time" : "16:00",
"is_free" : "유료",
"sponser" : "극단예일",
"spon_region" : "극단예일",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 75,
"oper_name" : "뮤지컬 ''호두까기 인형''",
"oper_place" : "청주예술의전당",
"description" : "뮤지컬",
"start_day" : "2020/12/13",
"end_day" : "2020/12/13",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "진엔터컴",
"spon_region" : "진엔터컴",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 76,
"oper_name" : "송년콘서트",
"oper_place" : "군산예술의전당 대공연장",
"description" : "콘서트",
"start_day" : "2020/12/12",
"end_day" : "2020/12/12",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "군산예술의전당",
"spon_region" : "전라북도 군산시청",
"phone_num" : "063-454-5535",
"charge" : "유료",
"age" : "초등생이상관람가",
"homepage" : "http://arts.gunsan.go.kr/index.gunsan",
"parking" : "Y",
"where" : "전라북도 군산시 백토로203, (지곡동)",
"latitude" : 35.96078244,
"longitude" : 126.7070385
},
{
"id" : 77,
"oper_name" : "진주국제재즈페스티벌",
"oper_place" : "경남문화예술회관",
"description" : "국내외 재즈공연, 아트마켓, 재즈갤러리 등",
"start_day" : "2020/12/12",
"end_day" : "2020/12/12",
"start_time" : "19:30",
"end_time" : "21:30",
"is_free" : "유료",
"sponser" : "경남문화예술진흥원,진주국제재즈페스티벌추진위원회",
"spon_region" : "한국문화예술위원회,한국메세나협회",
"phone_num" : "빈칸",
"charge" : "책정중",
"age" : "제한없음",
"homepage" : "http://www.jinjujazz.com",
"parking" : "Y",
"where" : "경상남도 진주시 강남로 215",
"latitude" : 35.18727536,
"longitude" : 128.0917424
},
{
"id" : 78,
"oper_name" : "청주콘서트윈드오케스트라 제30회 정기연주회",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/12",
"end_day" : "2020/12/12",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "청주콘서트 윈드오케스트라",
"spon_region" : "청주콘서트 윈드오케스트라",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 79,
"oper_name" : "아리솔이 베토벤을 만나다",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/12",
"end_day" : "2020/12/12",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "아리솔",
"spon_region" : "아리솔",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 80,
"oper_name" : "국제탈공연예술촌 12월정기공연",
"oper_place" : "남해국제탈공연예술촌",
"description" : "연극실험실 늘 연극 공연 우주인 생존기",
"start_day" : "2020/12/12",
"end_day" : "2020/12/13",
"start_time" : "14:00",
"end_time" : "15:00",
"is_free" : "유료",
"sponser" : "경상남도 남해군",
"spon_region" : "남해국제탈공연예술촌",
"phone_num" : "055-860-3790",
"charge" : "성인 3,000원+청소년 2,000원+어린이 1,000원",
"age" : "12세 이상",
"homepage" : "http://tour.namhae.go.kr/00002875/00003544/00002878.web",
"parking" : "Y",
"where" : "경상남도 남해군 이동면 남해대로 2412",
"latitude" : 34.81773051,
"longitude" : 127.927175
},
{
"id" : 81,
"oper_name" : "윤봉길의사 창작뮤지컬 '워치'",
"oper_place" : "예산군 문예회관",
"description" : "뮤지컬공연",
"start_day" : "2020/12/11",
"end_day" : "2020/11/12",
"start_time" : "9:00",
"end_time" : "18:00",
"is_free" : "무료",
"sponser" : "(재)충남문화재단",
"spon_region" : "충청남도, 예산군",
"phone_num" : "빈칸",
"charge" : "무료",
"age" : "전군민",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청남도 예산군 예산읍 아리랑로 185-14",
"latitude" : 36.68548186,
"longitude" : 126.8491782
},
{
"id" : 82,
"oper_name" : "2020 송년 콘서트",
"oper_place" : "서천문예의 전당 대강당",
"description" : "서천군민을 위한 송년음악회",
"start_day" : "2020/12/11",
"end_day" : "2020/12/11",
"start_time" : "18:20",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "서천군",
"spon_region" : "서천군",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청남도 서천군 서천읍 서천로14번길 20",
"latitude" : 36.07636677,
"longitude" : 126.6983685
},
{
"id" : 83,
"oper_name" : "절영아리랑 영도의 사계절을 노래하다 ''봉래산의 겨울이야기''",
"oper_place" : "영도문화예술회관 대공연장",
"description" : "공연",
"start_day" : "2020/12/11",
"end_day" : "2020/12/11",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5571",
"charge" : "일반1만원",
"age" : "8세이상",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 84,
"oper_name" : "제54회 숲속의 열린음악회 <송년음악회>",
"oper_place" : "동래문화회관 대극장",
"description" : "음악",
"start_day" : "2020/12/11",
"end_day" : "2020/12/11",
"start_time" : "19:30",
"end_time" : "21:30",
"is_free" : "유료",
"sponser" : "한국문화예술회관연합회",
"spon_region" : "동래문화회관",
"phone_num" : "051-550-6611",
"charge" : "미정",
"age" : "13세이상",
"homepage" : "http://www.dongnae.go.kr/culture",
"parking" : "Y",
"where" : "부산광역시 동래구 문화로 80 (명륜동)",
"latitude" : 35.21195193,
"longitude" : 129.0905499
},
{
"id" : 85,
"oper_name" : "뮤지컬배우 양준모와 함께하는 ''영화속에서 만나는 클래식''",
"oper_place" : "청주예술의전당",
"description" : "대중공연",
"start_day" : "2020/12/11",
"end_day" : "2020/12/11",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "콘서트하우스",
"spon_region" : "콘서트하우스",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 86,
"oper_name" : "2020 송년음악회",
"oper_place" : "홍주문화회관 대공연장",
"description" : "음악",
"start_day" : "2020/12/11",
"end_day" : "2020/12/11",
"start_time" : "19:00",
"end_time" : "20:30",
"is_free" : "유료",
"sponser" : "홍성군역사문화시설관리사업소",
"spon_region" : "홍성군",
"phone_num" : "041-634-0021",
"charge" : "20,000원/10,000원",
"age" : "8세 이상",
"homepage" : "http://art.hongseung.go.kr",
"parking" : "Y",
"where" : "충청남도 홍성군 홍성읍 내포로 164",
"latitude" : 36.5947715,
"longitude" : 126.6518941
},
{
"id" : 87,
"oper_name" : "KBS교향악단",
"oper_place" : "웅부홀",
"description" : "클래식",
"start_day" : "2020/12/10",
"end_day" : "2020/12/10",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3600",
"charge" : "빈칸",
"age" : "초등학생이상",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 88,
"oper_name" : "루돌프와 산타클로스",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/10",
"end_day" : "2020/12/13",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "동그라미그리기",
"spon_region" : "동그라미그리기",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 89,
"oper_name" : "2020 연극의 해 ''수험생을 위한 특별공연''",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/10",
"end_day" : "2020/12/11",
"start_time" : "10:00",
"end_time" : "16:00",
"is_free" : "무료",
"sponser" : "(사)청주예총",
"spon_region" : "(사)청주예총",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 90,
"oper_name" : "원주시립합창단 제93회 정기연주회",
"oper_place" : "원주치악예술관",
"description" : "합창 공연",
"start_day" : "2020/12/10",
"end_day" : "2020/12/10",
"start_time" : "19:30",
"end_time" : "21:30",
"is_free" : "유료",
"sponser" : "원주시립합창단",
"spon_region" : "원주시",
"phone_num" : "033-766-6980",
"charge" : "성인5000원+학생3천원",
"age" : "8세이상",
"homepage" : "www.arts.wonju.go.kr",
"parking" : "Y",
"where" : "강원도 원주시 시청로1 (무실동)",
"latitude" : 37.34192499,
"longitude" : 127.9197228
},
{
"id" : 91,
"oper_name" : "<볼라레> 12월",
"oper_place" : "축제극장 몸짓",
"description" : "클래식",
"start_day" : "2020/12/10",
"end_day" : "2020/12/10",
"start_time" : "19:30",
"end_time" : "20:30",
"is_free" : "유료",
"sponser" : "춘천문화재단",
"spon_region" : "춘천문화재단",
"phone_num" : "033-259-5821",
"charge" : "20,000원",
"age" : "만7세이상",
"homepage" : "http://www.cccf.or.kr",
"parking" : "Y",
"where" : "강원도 춘천시 춘천로 112",
"latitude" : 37.8730965,
"longitude" : 127.7278377
},
{
"id" : 92,
"oper_name" : "12월 브런치 콘서트",
"oper_place" : "백조홀",
"description" : "클래식",
"start_day" : "2020/12/09",
"end_day" : "2020/12/09",
"start_time" : "11:00",
"end_time" : "12:00",
"is_free" : "유료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3600",
"charge" : "1만원",
"age" : "5세이상",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 93,
"oper_name" : "농심",
"oper_place" : "청주예술의전당",
"description" : "순수공연",
"start_day" : "2020/12/09",
"end_day" : "2020/12/09",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "연희패 벼리",
"spon_region" : "연희패 벼리",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 94,
"oper_name" : "수험생을 위한 특별 프로그램",
"oper_place" : "홍주문화회관 대공연장",
"description" : "전통",
"start_day" : "2020/12/09",
"end_day" : "2020/12/09",
"start_time" : "14:00",
"end_time" : "15:00",
"is_free" : "무료",
"sponser" : "홍성군역사문화시설관리사업소",
"spon_region" : "홍성군",
"phone_num" : "041-634-0021",
"charge" : "무료",
"age" : "수험생",
"homepage" : "http://art.hongseung.go.kr",
"parking" : "Y",
"where" : "충청남도 홍성군 홍성읍 내포로 164",
"latitude" : 36.5947715,
"longitude" : 126.6518941
},
{
"id" : 95,
"oper_name" : "Pop con",
"oper_place" : "광산문화예술회관",
"description" : "풍선이벤트, 마술쇼와 함께 전 연령층이 즐길 수 있는 클래식 공연",
"start_day" : "2020/12/08",
"end_day" : "2020/12/08",
"start_time" : "19:30",
"end_time" : "20:30",
"is_free" : "무료",
"sponser" : "팝페라 사과나무",
"spon_region" : "광주광역시 광산구",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "광주광역시 광산구 광산로68번길 13",
"latitude" : 35.14050122,
"longitude" : 126.7992317
},
{
"id" : 96,
"oper_name" : "2020 문화가 있는 날 영도051콘서트 - 수능생맞춤공연 뮤지컬''복순이할배''(예정)",
"oper_place" : "영도문화예술회관 대공연장",
"description" : "공연",
"start_day" : "2020/12/08",
"end_day" : "2020/12/09",
"start_time" : "10:00",
"end_time" : "11:30",
"is_free" : "무료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5571",
"charge" : "무료",
"age" : "8세이상",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 97,
"oper_name" : "제40회 국립 안동대학교 미술학과 교수작품전",
"oper_place" : "34갤러리",
"description" : "종합",
"start_day" : "2020/12/08",
"end_day" : "2020/12/13",
"start_time" : "10:00",
"end_time" : "19:00",
"is_free" : "무료",
"sponser" : "안동대학교 미술학과",
"spon_region" : "안동대학교 미술학과",
"phone_num" : "054-820-5560",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 98,
"oper_name" : "천아트. 핸드페인팅 그림 전시",
"oper_place" : "5갤러리",
"description" : "텍스타일",
"start_day" : "2020/12/08",
"end_day" : "2020/12/13",
"start_time" : "10:00",
"end_time" : "19:00",
"is_free" : "무료",
"sponser" : "구삼상 핸드페인팅",
"spon_region" : "구삼상 핸드페인팅",
"phone_num" : "빈칸",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 99,
"oper_name" : "제82회 안동미술협회전",
"oper_place" : "35갤러리",
"description" : "복합",
"start_day" : "2020/12/08",
"end_day" : "2020/12/13",
"start_time" : "10:00",
"end_time" : "19:00",
"is_free" : "무료",
"sponser" : "한국미술협회 안동지부",
"spon_region" : "한국미술협회 안동지부",
"phone_num" : "054-848-8809",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 100,
"oper_name" : "어린이연극 ''크리스마스캐롤 스쿠루지''",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/08",
"end_day" : "2020/12/08",
"start_time" : "10:00",
"end_time" : "16:00",
"is_free" : "유료",
"sponser" : "극단유니콘",
"spon_region" : "극단유니콘",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 101,
"oper_name" : "연극 ''쉬어매드니스''",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/08",
"end_day" : "2020/12/09",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "예술나눔",
"spon_region" : "예술나눔",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 102,
"oper_name" : "이은미 플루트 독주회 ''Interpreter''",
"oper_place" : "청주예술의전당",
"description" : "순수공연",
"start_day" : "2020/12/08",
"end_day" : "2020/12/08",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "이은미",
"spon_region" : "이은미",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 103,
"oper_name" : "유자 왕 피아노 리사이틀",
"oper_place" : "수성아트피아 용지홀",
"description" : "클래식",
"start_day" : "2020/12/06",
"end_day" : "2020/12/06",
"start_time" : "17:00",
"end_time" : "19:00",
"is_free" : "유료",
"sponser" : "수성아트피아",
"spon_region" : "수성아트피아",
"phone_num" : "053-668-1800",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "http://www.ssartpia.kr",
"parking" : "Y",
"where" : "대구광역시 수성구 무학로 180",
"latitude" : 35.82928349,
"longitude" : 128.6282735
},
{
"id" : 104,
"oper_name" : "안동 MBC 창사 50주년 기념 어린이합창단 정기발표회",
"oper_place" : "웅부홀",
"description" : "클래식",
"start_day" : "2020/12/06",
"end_day" : "2020/12/06",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "안동 MBC",
"spon_region" : "안동 MBC",
"phone_num" : "054-851-7046",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 105,
"oper_name" : "영화상영",
"oper_place" : "정읍기적의도서관",
"description" : "영화상영",
"start_day" : "2020/12/06",
"end_day" : "2020/12/06",
"start_time" : "15:00",
"end_time" : "16:00",
"is_free" : "무료",
"sponser" : "정읍기적의도서관",
"spon_region" : "정읍시",
"phone_num" : "063-539-6453",
"charge" : "무료",
"age" : "전시민",
"homepage" : "https://lib.jeongeup.go.kr/",
"parking" : "Y",
"where" : "전라북도 정읍시 수성5로 45-5",
"latitude" : 35.58427178,
"longitude" : 126.8606536
},
{
"id" : 106,
"oper_name" : "서영은 콘서트 ''만9,900원의 행복''",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/06",
"end_day" : "2020/12/06",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "(주)피아트엔터테인먼트",
"spon_region" : "(주)피아트엔터테인먼트",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 107,
"oper_name" : "청주악성, 박팔괘",
"oper_place" : "청주예술의전당",
"description" : "순수공연",
"start_day" : "2020/12/06",
"end_day" : "2020/12/06",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "예미향",
"spon_region" : "예미향",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 108,
"oper_name" : "제4회 무심콰이어합창단 정기연주회",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/06",
"end_day" : "2020/12/06",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "무심콰이어",
"spon_region" : "무심콰이어",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 109,
"oper_name" : "아카펠라DIA",
"oper_place" : "싸리재홀",
"description" : "아카펠라",
"start_day" : "2020/12/05",
"end_day" : "2020/12/05",
"start_time" : "16:00",
"end_time" : "17:00",
"is_free" : "유료",
"sponser" : "인천광역시교육청학생교육문화회관",
"spon_region" : "인천광역시교육청학생교육문화회관",
"phone_num" : "032-760-3400",
"charge" : "6000원",
"age" : "5세",
"homepage" : "www.iecs.go.kr/",
"parking" : "Y",
"where" : "인천광역시중구자유공원로12(인현동)",
"latitude" : 37.47571123,
"longitude" : 126.6296707
},
{
"id" : 110,
"oper_name" : "송년음악회",
"oper_place" : "공주문예회관 대공연장",
"description" : "기획공연",
"start_day" : "2020/12/05",
"end_day" : "2020/12/05",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "공주문예회관",
"spon_region" : "공주문예회관",
"phone_num" : "041-840-2203",
"charge" : "미정",
"age" : "초등학생 이상",
"homepage" : "www.gongju.go.kr",
"parking" : "Y",
"where" : "충청남도 공주시 고마나루길 5",
"latitude" : 36.460177,
"longitude" : 127.1117218
},
{
"id" : 111,
"oper_name" : "크리스마스 선물로 목걸이가 언제나 옳아요",
"oper_place" : "서울특별시 강북구 강북문화예술회관 대공연장",
"description" : "뮤지컬",
"start_day" : "2020/12/05",
"end_day" : "2020/12/05",
"start_time" : "0:00",
"end_time" : "0:00",
"is_free" : "유료",
"sponser" : "서울특별시 강북구청(문화관광체육과)",
"spon_region" : "서울특별시 강북구청(문화관광체육과)+서울시",
"phone_num" : "02-901-6232",
"charge" : "무료",
"age" : "8세 이상",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "서울특별시 강북구 삼각산로 85",
"latitude" : 37.64098943,
"longitude" : 127.0138774
},
{
"id" : 112,
"oper_name" : "해설이 있는 동화발레 오즈의 마법사 도로시의 모험",
"oper_place" : "화랑관",
"description" : "무용",
"start_day" : "2020/12/05",
"end_day" : "2020/12/05",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "전북발레시어터",
"spon_region" : "진천군",
"phone_num" : "043-539-3603",
"charge" : "무료",
"age" : "전체관람가능",
"homepage" : "http://www.jincheon.go.kr",
"parking" : "Y",
"where" : "충청북도 진천군 진천읍 문화로 69-4",
"latitude" : 36.8495432,
"longitude" : 127.440132
},
{
"id" : 113,
"oper_name" : "국제탈공연예술촌 12월정기공연",
"oper_place" : "남해국제탈공연예술촌",
"description" : "경기도립국악단 전통국악 공연",
"start_day" : "2020/12/05",
"end_day" : "2020/12/06",
"start_time" : "14:00",
"end_time" : "15:00",
"is_free" : "유료",
"sponser" : "경상남도 남해군",
"spon_region" : "남해국제탈공연예술촌",
"phone_num" : "055-860-3790",
"charge" : "성인 3,000원+청소년 2,000원+어린이 1,000원",
"age" : "12세 이상",
"homepage" : "http://tour.namhae.go.kr/00002875/00003544/00002878.web",
"parking" : "Y",
"where" : "경상남도 남해군 이동면 남해대로 2412",
"latitude" : 34.81773051,
"longitude" : 127.927175
},
{
"id" : 114,
"oper_name" : "베토벤 탄생 250주년 갈라콘서트",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/05",
"end_day" : "2020/12/05",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "청주챔버오케스트라",
"spon_region" : "청주챔버오케스트라",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 115,
"oper_name" : "어울림 상설Series21 수요상설공연 - 레자미와 함께하는 베토벤 낭만여행",
"oper_place" : "영도문화예술회관 소공연장",
"description" : "공연",
"start_day" : "2020/12/04",
"end_day" : "2020/12/04",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "영도구청",
"spon_region" : "영도문화예술회관",
"phone_num" : "051-419-5571",
"charge" : "일반1만원",
"age" : "8세이상",
"homepage" : "http://www.yeongdo.go.kr/culture.web",
"parking" : "Y",
"where" : "부산광역시 영도구 함지로79번길 6",
"latitude" : 35.075268,
"longitude" : 129.066862
},
{
"id" : 116,
"oper_name" : "2020 강서구립극단 제38회 정기공연",
"oper_place" : "강서구민회관",
"description" : "2020 강서구립극단 제38회 정기공연",
"start_day" : "2020/12/04",
"end_day" : "2020/12/06",
"start_time" : "16:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "강서구청",
"spon_region" : "강서구청",
"phone_num" : "02-2600-6634",
"charge" : "2000",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "빈칸",
"where" : "서울특별시 강서구 우장산로 66",
"latitude" : 37.55343651,
"longitude" : 126.8436485
},
{
"id" : 117,
"oper_name" : "60분간의 음악일주",
"oper_place" : "금산다락원 생명의집",
"description" : "어린이 권장도서 및 베스트셀러 작품을 음악화한 공연",
"start_day" : "2020/12/04",
"end_day" : "2020/12/04",
"start_time" : "10:30",
"end_time" : "11:30",
"is_free" : "무료",
"sponser" : "금산군 금산다락원",
"spon_region" : "한국문화예술회관연합회",
"phone_num" : "014-750-4424",
"charge" : "-",
"age" : "전체관람가",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청남도 금산군 금산읍 금산로 1559",
"latitude" : 36.11206754,
"longitude" : 127.4916373
},
{
"id" : 118,
"oper_name" : "연극시리즈",
"oper_place" : "백조홀",
"description" : "연극",
"start_day" : "2020/12/04",
"end_day" : "2020/12/05",
"start_time" : "19:30",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3600",
"charge" : "2만원",
"age" : "5세이상",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 119,
"oper_name" : "지역작가 회고전",
"oper_place" : "상설",
"description" : "평면",
"start_day" : "2020/12/04",
"end_day" : "2020/12/27",
"start_time" : "10:00",
"end_time" : "19:00",
"is_free" : "무료",
"sponser" : "안동문화예술의전당",
"spon_region" : "안동문화예술의전당",
"phone_num" : "054-840-3601",
"charge" : "무료",
"age" : "전연령",
"homepage" : "www.andongart.go.kr",
"parking" : "Y",
"where" : "경상북도 안동시 축제장길 66",
"latitude" : 36.5594096,
"longitude" : 128.7250766
},
{
"id" : 120,
"oper_name" : "김범수 콘서트",
"oper_place" : "청주예술의전당",
"description" : "공연",
"start_day" : "2020/12/04",
"end_day" : "2020/12/05",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "유료",
"sponser" : "(주)충북일보",
"spon_region" : "(주)충북일보",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 흥덕로 69",
"latitude" : 36.64209999,
"longitude" : 127.469668
},
{
"id" : 121,
"oper_name" : "국제로타리3740 로타리합창단 제5회 정기연주회 및 자선공연",
"oper_place" : "청주아트홀",
"description" : "공연",
"start_day" : "2020/12/04",
"end_day" : "2020/12/04",
"start_time" : "19:00",
"end_time" : "21:00",
"is_free" : "무료",
"sponser" : "국제로타리3740지구 로타리합창단",
"spon_region" : "국제로타리3740지구 로타리합창단",
"phone_num" : "빈칸",
"charge" : "빈칸",
"age" : "빈칸",
"homepage" : "빈칸",
"parking" : "Y",
"where" : "충청북도 청주시 서원구 예체로 118-1",
"latitude" : 36.636924,
"longitude" : 127.469428
},
{
"id" : 122,
"oper_name" : "춘천시립인형극단 창단공연 1회차",
"oper_place" : "춘천인형극장",
"description" : "시립인형극단 창단공연",
"start_day" : "2020/12/04",
"end_day" : "2020/12/05",
"start_time" : "15:00",
"end_time" : "16:30",
"is_free" : "유료",
"sponser" : "춘천시립예술단",
"spon_region" : "춘천시+춘천문화재단",
"phone_num" : "070-4633-5746",
"charge" : "창단 공연에 따른 티켓가격 및 할인내용 협의 중",
"age" : "빈칸",
"homepage" : "http://www.cccf.or.kr",
"parking" : "Y",
"where" : "강원도 춘천시 영서로 3017",
"latitude" : 37.92101552,
"longitude" : 127.7201052
},
{
"id" : 123,
"oper_name" : "춘천시립인형극단 창단공연 2회차",
"oper_place" : "춘천인형극장",
"description" : "시립인형극단 창단공연",
"start_day" : "2020/12/04",
"end_day" : "2020/12/05",
"start_time" : "19:30",
"end_time" : "20:30",
"is_free" : "유료",
"sponser" : "춘천시립예술단",
"spon_region" : "춘천시+춘천문화재단",
"phone_num" : "070-4633-5746",
"charge" : "창단 공연에 따른 티켓가격 및 할인내용 협의 중",
"age" : "빈칸",
"homepage" : "http://www.cccf.or.kr",
"parking" : "Y",
"where" : "강원도 춘천시 영서로 3017",
"latitude" : 37.92101552,
"longitude" : 127.7201052
}
]
var mysql = require('mysql');
var near_show_list = [];
var connection = mysql.createConnection({
"host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
"user": "root",
"password": "dldbwp1207",
"port": "3306",
"database": "showdata"
});
connection.connect();
// 데이터 길이 파악 //
var dataNum=0;
connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
if (error) {
console.log(error);
}
dataNum = results[0].cnt;
console.log(dataNum);
});
connection.query('SELECT start_day FROM SHOW_DATA WHERE start_day>=2021/01/01 ORDER BY start_day',function(error,results,field){
if(error){
console.log(error);
}
console.log(results);
})
connection.end();
\ No newline at end of file
var mysql = require('mysql');
module.exports = {
nearShow: function (lat, lon) {
var near_show_list = [];
var connection = mysql.createConnection({
"host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
"user": "root",
"password": "dldbwp1207",
"port": "3306",
"database": "showdata"
});
connection.connect();
var dataNum = 0;
connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
if (error) {
console.log(error);
}
console.log(results[0].cnt);
dataNum = results[0].cnt;
});
connection.query('SELECT id,latitude,longitude FROM SHOW_DATA', function (error, results, field) {
if (error) {
console.log(error);
}
console.log([lat, lon]);
for (var i = 0; i < dataNum; i++) {
var latgap = (lat - results[i].latitude) * 110;
var longap = (lon - results[i].longitude) * 91;
var cal = latgap * latgap + longap * longap;
if (cal <= 1600) {
console.log(results[i].id);
near_show_list.push([results[i].id, results[i].latitude, results[i].longitude]);
}
}
});
connection.end();
// return near_show_list;
}
}
@import url('https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
html,body{
display: grid;
height: 100%;
place-items: center;
background: #664AFF;
}
::selection{
color: #fff;
background: #664AFF;
}
.search-box{
position: relative;
height: 60px;
width: 60px;
border-radius: 50%;
box-shadow: 5px 5px 30px rgba(0,0,0,.2);
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
.search-box.active{
width: 350px;
}
.search-box input{
width: 100%;
height: 100%;
border: none;
border-radius: 50px;
background: #fff;
outline: none;
padding: 0 60px 0 20px;
font-size: 18px;
opacity: 0;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
.search-box input.active{
opacity: 1;
}
.search-box input::placeholder{
color: #a6a6a6;
}
.search-box .search-icon{
position: absolute;
right: 0px;
top: 50%;
transform: translateY(-50%);
height: 60px;
width: 60px;
background: #fff;
border-radius: 50%;
text-align: center;
line-height: 60px;
font-size: 22px;
color: #664AFF;
cursor: pointer;
z-index: 1;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
.search-box .search-icon.active{
right: 5px;
height: 50px;
line-height: 50px;
width: 50px;
font-size: 20px;
background: #664AFF;
color: #fff;
transform: translateY(-50%) rotate(360deg);
}
.search-box .cancel-icon{
position: absolute;
right: 20px;
top: 50%;
transform: translateY(-50%);
font-size: 25px;
color: #fff;
cursor: pointer;
transition: all 0.5s 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
.search-box .cancel-icon.active{
right: -40px;
transform: translateY(-50%) rotate(360deg);
}
.search-box .search-data{
text-align: center;
padding-top: 7px;
color: #fff;
font-size: 18px;
word-wrap: break-word;
}
.search-box .search-data.active{
display: none;
}
*
{
margin: 0;
padding: 0;
@import url('https://fonts.googleapis.com/css?family=Poppins:400,500,600,700&display=swap');
*{
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
.search-box{
position: relative;
height: 60px;
width: 60px;
border-radius: 50%;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
/* //박스 길이 조절 */
.search-box.active{
width: 700px;
}
.search-box input{
width: 100%;
height: 100%;
border: none;
border-radius: 50px;
background: #fff;
outline: none;
padding: 0 60px 0 20px;
font-size: 18px;
opacity: 0;
transition: all 0.5s cubic-bezier(0.68, -0.55, 0.265, 1.55);
}
/* 불투명도 */
.search-box input.active{
opacity: 1;
}
.search-box input::placeholder{
color: #a6a6a6;
}
.search-box .search-icon{
position: absolute;
/* 버튼위치 */
right: -380px;
top: 50%;
transform: translateY(-50%);
height: 60px;
width: 60px;
background: #fff;
border-radius: 50%;
text-align: center;
line-height: 60px;
font-size: 22px;
color: #CB25FF;
cursor: pointer;
z-index: 1;
/* transition: all 0.5s cubic-bezier(0.6, -0.28, 0.74, 0.05); */
/* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
transition-timing-function: linear;
}
.search-box .search-icon.active{
right: 5px;
height: 50px;
line-height: 50px;
width: 50px;
font-size: 20px;
background: #CB25FF;
color: #fff;
transform: translateY(-50%) rotate(360deg);
}
.search-box .cancel-icon{
position: absolute;
right: -380px;
top: 50%;
transform: translateY(-50%);
font-size: 25px;
color: #fff;
cursor: pointer;
/* transition: all 0.5s 0.2s cubic-bezier(0.68, -0.55, 0.265, 1.55); */
/* transition: cubic-bezier(0.39, 0.575, 0.565, 1); */
transition-timing-function: linear;
}
.search-box .cancel-icon.active{
right: -40px;
}
.search-box .search-data{
text-align: center;
padding-top: 7px;
color: #fff;
font-size: 18px;
word-wrap: break-word;
}
.search-box .search-data.active{
display: none;
}
header
{
background-image:linear-gradient(rgba(0,0,0,0.5),rgba(0,0,100,0.5)), url(/images/back1.jpg);
......@@ -73,11 +159,15 @@ header
}
.welcome{
position:relative;
position: absolute;
top:50%;
left: 50%;
width: 700px; height: 160px;
margin-top: -80px;
margin-left: -350px;
text-align:center;
font-family: sans-serif;
color:#fff;
top: 30%;
}
.welcome h1{
......@@ -102,4 +192,5 @@ header
background: #fff;
color: #000;
transition: .4s;
}
\ No newline at end of file
}
......
*
{
margin: 0;
padding: 0;
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Poppins', sans-serif;
}
.nav-bar
{
background: #000;
position: relative;
background: rgb(0,0,0,0.5);
height: 80px;
}
......@@ -44,15 +47,12 @@
}
.welcome{
position:relative;
position: absolute;
top:20%;
left: 50%;
width: 700px; height: 160px;
text-align:center;
font-family: sans-serif;
color:#000;
top: 300px;
}
.welcome h1{
font-size: 42px;
margin: 25px;
}
}
\ No newline at end of file
......
var mysql = require('mysql');
var database = mysql.createConnection({
host: "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
user: "root",
password: "dldbwp1207",
port: 3306,
database: "showdata"
});
database.connect();
module.exports = database;
\ No newline at end of file
var express = require('express');
var router = express.Router();
var mysql = require('mysql');
var fs = require('fs');
var ejs = require('ejs');
//추후 key 암호화 필요함
var connection = mysql.createConnection({
"host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
"user": "root",
"password": "dldbwp1207",
"port": "3306",
"database": "showdata"
})
connection.connect();
var mapPage = fs.readFileSync('routes/mapPage.ejs', 'utf8');
var dataNum = 0;
router.get('/mappage', (req, res) => {
connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
if (error) {
console.log(error);
}
console.log(results[0].cnt);
dataNum = results[0].cnt;
});
////
connection.query('SELECT id,oper_name,latitude,longitude FROM SHOW_DATA', function (error, results, field) {
if (error) {
console.log(error);
} else {
var show_list = [];
for (var i = 0; i < dataNum; i++) {
show_list.push([results[i].id, results[i].oper_name, results[i].latitude, results[i].longitude]);
var page = ejs.render(mapPage, {
title: "show data",
data: show_list,
dataNum: dataNum,
});
}
res.send(page);
}
});
});
//루트 페이지 (메인페이지)에서 실행됨 : title 할당하고 main.html 띄워줌.
router.get('/', function (req, res, next) {
......@@ -12,14 +58,13 @@ router.get('/login', function (req, res, next) {
res.render('login.html', { title: 'Login' });
console.log('로그인 페이지 접속 성공');
});
// router.get('/login/:id', function (req, res) {
// var id = req.params.id;
// console.log('id 할당 접속 성공');
// });
router.get('/search', function (req, res, next) {
res.render('search.html', { title: '검색 결과' });
console.log('검색 결과 페이지 접속 성공');
})
router.get('/send', function (req, res, next) {
res.render('send.html', { title: 'Send message' });
console.log('카카오톡 공유 메시지 접속 성공');
})
module.exports = router;
\ No newline at end of file
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>geolocation으로 마커 표시하기</title>
</head>
<body>
<p style="margin-top:-12px">
<b>Chrome 브라우저는 https 환경에서만 geolocation을 지원합니다.</b> 참고해주세요.
</p>
<div id="map" style="width:500px;height:350px;"></div>
<head>
<title>
<%= title%>
</title>
<link rel="stylesheet" href='/stylesheets/mapPage_style.css' type="text/css">
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script>
<script>
</head>
<body>
<header>
<div class="nav-bar">
<img src="../images/camera.png" alt="" class="logo">
<ul class="menu">
<li><a href="">Home</a></li>
<li><a href="">Services</a></li>
<li><a href="">Portfolio</a></li>
<li><a href="">Testimonimal</a></li>
<li><a href="">Career</a></li>
<li><a href="">Contact</a></li>
</ul>
</div>
<div class="welcome">
<h1>어떤 공연을 찾으시나요?</h1>
<a href="mappage" class="btn btn1">나의 근처 공연</a>
<a href="#" class="btn btn2">검색하기</a>
<a href="login" class="btn btn3">로그인</a>
</div>
</header>
<div id="map"
style="
position: absolute;
border-radius: 5%;
width:500px; height:350px;
top:50%;
left: 50%;
"></div>
<div>
</div>
<script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c"></script>
<script>
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
......@@ -29,13 +56,32 @@ if (navigator.geolocation) {
var lat = position.coords.latitude, // 위도
lon = position.coords.longitude; // 경도
console.log(lat);
console.log(lon);
var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다
displayMarker(locPosition, message);
var data=[];
var strData = "<%= data %>";
var splitData=strData.split(',');
for(var i=0;i<splitData.length;i+=4){
data.push([Number(splitData[i]),splitData[i+1],Number(splitData[i+2]),Number(splitData[i+3])]);
}
for (var i = 0; i < data.length; i++) {
var latgap = (lat - data[i][2]) * 110;
var longap = (lon - data[i][3]) * 91;
var cal = latgap * latgap + longap * longap;
if (cal <= 1600) {
var locP=new kakao.maps.LatLng(data[i][2], data[i][3]),
message = data[i][1];
displayShowMarker(locP,message);
console.log("near_show:"+data[i]);
}
}
// 마커와 인포윈도우를 표시합니다
displayMarker(locPosition, message);
});
......@@ -46,36 +92,24 @@ if (navigator.geolocation) {
displayMarker(locPosition, message);
}
var positions = [
{
title: '카카오',
latlng: new kakao.maps.LatLng(37.2427865, 127.106767)
}
];
displayShows(positions);
function displayShows(positions){
var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
for (var i = 0; i < positions.length; i ++) {
function displayShowMarker(locPosition,message){
var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
// 마커 이미지의 이미지 크기 입니다
var imageSize = new kakao.maps.Size(24, 35);
// 마커 이미지를 생성합니다
var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
var marker = new kakao.maps.Marker({
map: map,
position: locPosition,
title: message,
image: markerImage
});
// 마커 이미지를 생성합니다
var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map, // 마커를 표시할 지도
position: positions[i].latlng, // 마커를 표시할 위치
title : positions[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
image : markerImage // 마커 이미지
});
}
// 지도 중심좌표를 접속위치로 변경합니다
map.setCenter(locPosition);
}
// 지도에 마커와 인포윈도우를 표시하는 함수입니다
function displayMarker(locPosition, message) {
......@@ -100,7 +134,7 @@ function displayMarker(locPosition, message) {
// 지도 중심좌표를 접속위치로 변경합니다
map.setCenter(locPosition);
}
}
</script>
</body>
</body>
</html>
\ No newline at end of file
......
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Culture Gallery</title>
<link rel="stylesheet" href='/stylesheets/login_style.css' type="text/css">
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
</head>
<body>
<header>
<div class="nav-bar">
<img src="../images/camera.png" alt="" class="logo">
<ul class="menu">
<li><a href="/">Home</a></li>
<li><a href="">Services</a></li>
<li><a href="">Portfolio</a></li>
<li><a href="">Testimonimal</a></li>
<li><a href="">Career</a></li>
<li><a href="">Contact</a></li>
</ul>
</div>
</header>
<h1>검색하기</h1>
<hr>
<form action="/search" method="POST">
<table>
<tr>
<td><input type="text" name="name" placeholder="장소를 입력하세요."></td>
</tr>
<tr>
<td><input type="text" name="modelnumber" placeholder="모델넘버를 입력하세요."></td>
</tr>
<tr>
<td><input type="text" name="series" placeholder="시리즈를 입력하세요."></td>
</tr>
</table>
<input type="submit" value="전송하기">
</form>
</body>
</html>
\ No newline at end of file
var template = require('./template.js');
var qs = require('querystring');
var db = require('./database.js');
exports.foodInfo = function (request, response) {
var title = '식품 영양정보';
var description = '입력한 음식의 영양 정보(칼로리, 단백질, 지방, 탄수화물, 나트륨)를 알려드립니다!';
var html = template.html(title, `
<div style= "font-size:25px; background-color:#ffffff">
<h2><font color="black">${title}<div style= "font-size:10px;"><br><div style= "font-size:20px;">${description}</font></div></h2>
<form action="/foodInfo_search" method="post">
<input type = 'text' name = 'search' placeholder = '검색어 입력' maxlength = 255 value = "" autocomplete = "off" style="width:300px;height:20px;font-size:20px;">
<button type = "submit" name = "click" style="font-size:20px;">검색</button>
</form>
</div>
`);
response.writeHead(200);
response.end(html);
}
function foodTable(foodInfo, list, num) {
var tag = '';
tag += `<table style='width:100%;'`;
tag += `
<tr>
<td>이름</td>
<td>종류</td>
<td>지역/제조사</td>
<td>1회 제공량(g)</td>
<td>칼로리(kcal)</td>
<td>단백질(g)</td>
<td>지방(g)</td>
<td>탄수화물(g)</td>
<td>나트륨(mg)</td>
</tr>
`
for (var i = 0; i < num; i++) {
tag += `
<tr>
<td>${foodInfo[list[i]].name}</td>
<td>${foodInfo[list[i]].type}</td>
<td>${foodInfo[list[i]].company}</td>
<td>${foodInfo[list[i]].servingSize}</td>
<td>${foodInfo[list[i]].kcal}</td>
<td>${foodInfo[list[i]].protein}</td>
<td>${foodInfo[list[i]].fat}</td>
<td>${foodInfo[list[i]].carbohydrate}</td>
<td>${foodInfo[list[i]].natrium}</td>
</tr>
`
}
tag += `</table>
<style>
table{
border-collapse: collapse;
}
td{
border:1px solid black;
}
</style>
`;
return tag;
}
exports.foodInfo_search = function (request, response) {
var body = '';
request.on('data', function (data) {
body = body + data;
});
request.on('end', function () {
var post = qs.parse(body);
db.query(`SELECT * FROM fooddb`, function (error, foodInfo) {
var title = '식품 영양정보';
var description = '입력한 음식의 영양 정보(칼로리, 단백질, 지방, 탄수화물, 나트륨)를 알려드립니다!';
var search = post.search; // 검색어
var num = 0; // 검색된 개수
var foodName = '';
var list = [];
//console.log(foodInfo[0]);
for (var i = 0; i < foodInfo.length; i++) {
foodName = foodInfo[i].name;
if (foodName.indexOf(search) >= 0) {
list.push(i);
num += 1;
}
}
var html = template.html(title, `
<div style= "font-size:25px; background-color:#ffffff">
<h2><font color="black">${title}<div style= "font-size:10px;"><br><div style= "font-size:20px;">${description}</font></div></h2>
<form action="/foodInfo_search" method="post">
<input type = 'text' name = 'search' placeholder = '검색어 입력' maxlength = 255 value = "" autocomplete = "off" style="width:300px;height:20px;font-size:20px;">
<button type = "submit" name = "click" style="font-size:20px;">검색</button>
</form>
<p style= "font-size:20px;">${search}(으)로 검색된 결과 : ${num}개</p>
</div>
${foodTable(foodInfo, list, num)}
<br><br>
`);
response.writeHead(200);
response.end(html);
});
});
}
\ No newline at end of file
<html>
<head>
<title>로그인 페이지</title>
<title>Culture Gallery</title>
<link rel="stylesheet" href='/stylesheets/login_style.css' type="text/css">
<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>
......
<!DOCTYPE html>
<html>
<head>
<title>login main page title</title>
</head>
</html>
\ No newline at end of file
......@@ -9,7 +9,6 @@
<header>
<div class="nav-bar">
<img src="../images/camera.png" alt="" class="logo">
<ul class="menu">
<li><a href="">Home</a></li>
<li><a href="">Services</a></li>
......@@ -18,17 +17,14 @@
<li><a href="">Career</a></li>
<li><a href="">Contact</a></li>
</ul>
</div>
<div class="welcome">
<h1>어떤 공연을 찾으시나요?</h1>
<a href="#" class="btn btn1">나의 근처 공연</a>
<a href="#" class="btn btn2">검색하기</a>
<a href="login" class="btn btn3">로그인</a>
</div>
</header>
<div class="welcome">
<h1>어떤 공연을 찾으시나요?</h1>
<a href="mappage" class="btn btn1">나의 근처 공연</a>
<a href="#" class="btn btn2">검색하기</a>
<a href="login" class="btn btn3">로그인</a>
</div>
</body>
</html>
\ No newline at end of file
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>geolocation으로 마커 표시하기</title>
</head>
<body>
<p style="margin-top:-12px">
<b>Chrome 브라우저는 https 환경에서만 geolocation을 지원합니다.</b> 참고해주세요.
</p>
<div id="map" style="width:500px;height:350px;"></div>
<script type="text/javascript"
src="//dapi.kakao.com/v2/maps/sdk.js?appkey=a3386042ab2e0550ea06d265855b452c">//kakao map api 주소 받아옴</script>
<script>
var mysql = require('mysql');
var mapContainer = document.getElementById('map'), // 지도를 표시할 div
mapOption = {
center: new kakao.maps.LatLng(33.450701, 126.570667), // 지도의 중심좌표
level: 10 // 지도의 확대 레벨
};
var map = new kakao.maps.Map(mapContainer, mapOption); // 지도를 생성합니다
// HTML5의 geolocation으로 사용할 수 있는지 확인합니다
if (navigator.geolocation) {
// GeoLocation을 이용해서 접속 위치를 얻어옵니다
navigator.geolocation.getCurrentPosition(function (position) {
var lat = position.coords.latitude, // 위도
lon = position.coords.longitude; // 경도
console.log(lat);
console.log(lon);
var locPosition = new kakao.maps.LatLng(lat, lon), // 마커가 표시될 위치를 geolocation으로 얻어온 좌표로 생성합니다
message = '<div style="padding:5px;">여기에 계신가요?!</div>'; // 인포윈도우에 표시될 내용입니다
// 마커와 인포윈도우를 표시합니다
displayMarker(locPosition, message);
});
} else { // HTML5의 GeoLocation을 사용할 수 없을때 마커 표시 위치와 인포윈도우 내용을 설정합니다
var locPosition = new kakao.maps.LatLng(33.450701, 126.570667),
message = 'geolocation을 사용할수 없어요..'
displayMarker(locPosition, message);
}
/////////// sql 데이터 불러옴 /////////////////
var near_show_list = [];
var connection = mysql.createConnection({
"host": "culturegallery.cm2bwcuyukrm.us-east-1.rds.amazonaws.com",
"user": "root",
"password": "dldbwp1207",
"port": "3306",
"database": "showdata"
});
connection.connect();
var dataNum = 0;
connection.query('SELECT COUNT (*) AS cnt FROM SHOW_DATA', function (error, results, field) {
if (error) {
console.log(error);
}
console.log(results[0].cnt);
dataNum = results[0].cnt;
});
connection.query('SELECT id,latitude,longitude FROM SHOW_DATA', function (error, results, field) {
if (error) {
console.log(error);
}
console.log([lat, lon]);
for (var i = 0; i < dataNum; i++) {
var latgap = (lat - results[i].latitude) * 110;
var longap = (lon - results[i].longitude) * 91;
var cal = latgap * latgap + longap * longap;
//내 위치 반경 키로수 ^ 2만큼 cal 값 push -> content 위치
if (cal <= 1600) {
console.log(results[i].id);
near_show_list.push([results[i].id, results[i].latitude, results[i].longitude]);
}
}
});
connection.end();
////////////////////////////////////////////////
displayShows(near_show_list);
//// displayShows() 정의 ////
function displayShows(near_list) {
var imageSrc = "https://t1.daumcdn.net/localimg/localimages/07/mapapidoc/markerStar.png";
var kakao_near_list = [];
for (var i = 0; i < near_list.length; i++) {
kakao_near_list.push({
title: id,
lating: new kakao.maps.Lating(near_list[i][1], near_list[i][2])
})
}
for (var i = 0; i < kakao_near_list.length; i++) {
// 마커 이미지의 이미지 크기 입니다
var imageSize = new kakao.maps.Size(24, 35);
// 마커 이미지를 생성합니다
var markerImage = new kakao.maps.MarkerImage(imageSrc, imageSize);
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map, // 마커를 표시할 지도
position: kakao_near_list[i].latlng, // 마커를 표시할 위치
title: kakao_near_list[i].title, // 마커의 타이틀, 마커에 마우스를 올리면 타이틀이 표시됩니다
image: markerImage // 마커 이미지
});
}
}
/// displayMarker 함수 정의 ///
// 지도에 마커와 인포윈도우를 표시하는 함수입니다
function displayMarker(locPosition, message) {
// 마커를 생성합니다
var marker = new kakao.maps.Marker({
map: map,
position: locPosition
});
var iwContent = message, // 인포윈도우에 표시할 내용
iwRemoveable = true;
// 인포윈도우를 생성합니다
var infowindow = new kakao.maps.InfoWindow({
content: iwContent,
removable: iwRemoveable
});
// 인포윈도우를 마커위에 표시합니다
infowindow.open(map, marker);
// 지도 중심좌표를 접속위치로 변경합니다
map.setCenter(locPosition);
}
</script>
</body>
</html>
\ No newline at end of file