[v-world] μλ, κ²½λ λ° v-world μ’ν μΆμΆ
νμ¬ μ§ννκ³ μλ νλ‘μ νΈμμ λλ‘ μ’νλ₯Ό μΆμΆν νμκ° μμ΄ v-worldλ‘ μ§ννμλ€
μ°μ htmlκ³Ό jsλ‘ λ§΅μ μμ±νκ³ ν΄λ¦νμμ λ v-worldμ μ’νμ μ, κ²½λλ₯Ό μ½μμ°½μ μΆλ ₯ν μ μλλ‘ κ΅¬ννλ€
(λν κ²μ κΈ°λ₯λ !)
μΌλ¨ v-world μ¬μ΄νΈμμ νμκ°μ ν μΈμ¦ν€ λ°κΈ μ μ²μ ν΄μ£Όμ΄μΌ νλ€
곡κ°μ 보 μ€ννλ«νΌ μ€νAPI
μ€ν API λꡬλ μ¬μ©ν μ μλ μ§λ μ€ννλ«νΌμ μ€ν API μλΉμ€λ κ΅κ° 곡κ°μ 보μ κ°λ°©, 곡μ , μ°Έμ¬λ₯Ό ν΅ν΄ 곡κ°μ 보μ μμ¨μ μ΄κ³ μ°½μ‘°μ μΈ λ€μν μ ν리μΌμ΄μ μ κ°λ°ν μ μλλ‘ κΈ°μ
www.vworld.kr
λμ κ²½μ° λ°λ‘ μΈμ¦ν€κ° λ°κΈλμλ€
μ°μ κ²°κ³Όλ μλμ κ°λ€
- html μ½λ
<script type="text/javascript" src="http://map.vworld.kr/js/vworldMapInit.js.do?version=2.0&apiKey=[μΈμ¦ν€]"></script>
<div class='title'>
<p></p>
</div>
<article class="at_1">
<div class="search_div">
<span>
<select class='search_type'>
<option value="road">λλ‘λͺ
</option>
<option value="parcel" selected>μ§λ²</option>
</select>
</span>
<span><input type="text" id="search" placeholder="μ°Ύκ³ μνλ κ²μ μ
λ ₯νμΈμ."></span>
<span><button class="search_btn">κ²μ</button>
</div>
<div class="map_wrap">
<div id='vMap'></div>
<div class="custom_typecontrol radius_border">
<span id="btnRoadmap" class="selected_btn active">μ§λ</span>
<span id="btnSkyview" class="selected_btn">λ‘λλ·°</span>
<span id="btnCommercial" class="selected_btn">μκΆ</span>
</div>
</div>
</article>
<script src="map.js"></script>
- JavaScript μ½λ
var vmap; // κΈ°λ³Έ μ§λλ₯Ό λ°μ λ³μ
var markerLayer; // λ§μ»€ λ μ΄μ΄λ₯Ό λ°μ λ³μ
var x,y; // ν΄λ¦ν μκ²½λλ₯Ό λ°μ λ³μ
var checkRoadView = false;
var key = "[μΈμ¦ν€]"; // λΈμ΄μλ μΈμ¦ν€
var titleName; // λ§μ»€μ νμλ κ²μλ°©λ² νμ΄ν
vw.ol3.CameraPosition.center = [14145868.603246644, 4516117.737187111]; // κΈ°λ³Έ μ§λ μμ μ€μ¬ μ’ν μ§μ (μΈμ’
λ)
vw.ol3.CameraPosition.zoom = 17; // μμ Zoom λ 벨
vw.ol3.MapOptions = { // κΈ°λ³Έμ§λμ μ΅μ
basemapType: vw.ol3.BasemapType.GRAPHIC
, controlDensity: vw.ol3.DensityType.EMPTY
, interactionDensity: vw.ol3.DensityType.BASIC
, controlsAutoArrange: true
, homePosition: vw.ol3.CameraPosition
, initPosition: vw.ol3.CameraPosition
};
vmap = new vw.ol3.Map("vMap", vw.ol3.MapOptions); // κΈ°λ³Έ μ§λ μμ±
// μ§λ ν΄λ¦ μ΄λ²€νΈ
vmap.on('click', function(event) {
var feature = vmap.forEachFeatureAtPixel(event.pixel, function (feature,layer) {// ν΄λ¦ν μ’νλ₯Ό 첫λ²μ§Έ μΈμλ‘ μ£Όμ΄ ν΄λΉ μμΉμ μλ featureλ₯Ό ꡬνκ³ λλ²μ¨° μΈμ(ν¨μ)λ‘ λ겨μ€λ€.
if(layer != null && layer.className == 'vw.ol3.layer.Marker'){ // ν΄λΉ μ’νμ λ§μ»€ λ μ΄μ΄κ° μλ€λ©΄
return feature;
}else{
return false;
}
});
if (!feature) {
var coord = vmap.getCoordinateFromPixel(event.pixel); // λ§μ°μ€ 컀μ μλμ μ’νκ° κ΅¬νκΈ°
x = coord[0];
y = coord[1];
if(checkRoadView){ // λ‘λλ·° μ€ν
var tansform = ol.proj.transform([x,y], 'EPSG:3857', 'EPSG:4326') // λΈμ΄μλ μ’νκ³μμ λ€μ μ§λ μ’νκ³λ‘ λ³ν EPSG:3857=>EPSG:4326
location.href="https://map.kakao.com/link/roadview/"+tansform[1]+","+tansform[0]; // λ‘λλ·° λΆλ¬μ€κΈ°
}else{
addMarker(x, y); // addMarkerν¨μμ μκ²½λ λ³μ λκΈ°κ³ μ€ν
var tansform = ol.proj.transform([x,y], 'EPSG:3857', 'EPSG:4326')
console.log("v-world μ’ν :\n", x, y, "\nμλ, κ²½λ :\n", tansform[0], tansform[1])
}
}
});
function addMarker(lon ,lat) {
vmap.removeLayer(markerLayer); // κΈ°μ‘΄μ λ§μ»€κ° μλ€λ©΄ μ κ±°
markerLayer = new vw.ol3.layer.Marker(vmap); // λ§μ»€ κ°μ²΄ μμ±
var typeName = $('.search_type option:selected').val(); // μ νν κ²μ μ’
λ₯ κ°
if(typeName == "road"){titleName = "λλ‘λͺ
μ£Όμ";}
else if(typeName == "parcel"){titleName = "μ§λ² μ£Όμ";}
// (λΉλκΈ°)μ’νλ₯Ό μ£Όμλ‘ λ³ννλ api, λλ‘λͺ
μ£Όμ κ²μμ κ²½μ° κ±΄λ¬Όμ geometry κΈ°λ°μΌλ‘ λλ‘λͺ
μ£Όμκ°μ κ°μ§κ³ μ€κΈ° λλ¬Έμ
// 건물 μΈμ κ²μ ν΄λ¦νλ©΄ κ°μ΄ μμ μ μμ΅λλ€.
// λΈμ΄μλ μ§λμλΉμ€μμ νμ μ£Όμ λμ€ λλ‘λͺ
μ£Όμ건물 μ£Όμ λμ ν΄λΉ μ’νκ°μ΄ λ€μ΄μμΌλ§ λλ‘λͺ
μ£Όμκ°μ λ¦¬ν΄ λ°μ μ μμ΅λλ€.
$.ajax({
type: 'GET',
url: 'http://api.vworld.kr/req/address?',
dataType : "jsonp", // CORS λ¬Έμ λ‘ μΈν΄ λΈμ΄μλμμ jsonpλ₯Ό μ¬μ©νλ€κ³ ν¨
data: {
service: "address",
version: "2.0",
request: "getaddress",
format: "json", // κ²°κ³Ό ν¬λ©§μΌλ‘ xml λλ json νμ
μΌλ‘ λ°μλ³Ό μ μλ€.
key: key, // λΈμ΄μλ μΈμ¦ν€
type: typeName, // κ²μ νμ
μΌλ‘ 'λλ‘λͺ
:road' λλ 'μ§λ²:parcel' λλ 'λλ€:both' μ€ μ ν
crs: "epsg:3857", // λΈμ΄μλ κΈ°λ³Έ μ’νκ³
point: lon+","+lat, // μ’ν
zipcode: true, // μ°νΈλ²νΈ μ¬λΆ
simple: false // κ°λ΅ κ²°κ³Ό μ¬λΆ
},
success: function(json_data){
if(json_data.response.status == "NOT_FOUND"){
text = "κ²μ κ²°κ³Όκ° μμ΅λλ€.";
}else{
text = json_data.response.result[0].text; // λ°μμ¨ jsonλ°μ΄ν°μμ μ£Όμλ₯Ό μΆμΆ
}
vw.ol3.markerOption = { // λ§μ»€ μ΅μ
μ€μ
x : lon,
y : lat,
epsg : "EPSG:3857",
title : titleName,
contents : text,
iconUrl : 'http://map.vworld.kr/images/ol3/marker_blue.png'
};
markerLayer.addMarker(vw.ol3.markerOption); // λ§μ»€ μ΅μ
μ λ§μ»€μ μ μ©
vmap.addLayer(markerLayer); // λ§μ»€λ₯Ό vmapμ λ±λ‘
},
error: function(xtr,status,error){
alert(xtr +" : "+status+" : "+error);
}
});
};
// μ§λ κ²μ
$('.search_btn').on('click',function(){
vmap.removeLayer(markerLayer); // κΈ°μ‘΄μ λ§μ»€ μ κ±°
markerLayer = new vw.ol3.layer.Marker(vmap); // λ§μ»€ κ°μ²΄ μμ±
var contents_data;
var typeName = $('.search_type option:selected').val(); // μ νν κ²μ μ’
λ₯ κ°
$.ajax({
type: "get",
url: "http://api.vworld.kr/req/search",
data : {
page: 1,
type: 'address', // μ£Όμ κ²μλ°©λ²
category: typeName, // λλ‘λͺ
: road, μ§λ² : parcel
request: 'search',
apiKey: key, // λΈμ΄μλ μ§λ μΈμ¦κΈ°
domain: 'λ³ΈμΈμ mapμ 보μ¬μ£Όλ λλ©μΈ ex) http://111.111.111.111/map.html',
crs : 'EPSG:3857', // λΈμ΄μλ μ’νκ³
query : $('#search').val() // μ¬μ©μκ° μ
λ ₯ν text
},
dataType: 'jsonp',
async: false,
success: function(data) {
if(data.response.status =="NOT_FOUND"){
alert("κ²μκ²°κ³Όκ° μμ΅λλ€.");
}else{
for(var o in data.response.result.items){
if(o==0){
move(data.response.result.items[o].point.x*1,data.response.result.items[o].point.y*1);
if(typeName == "road"){
titleName = "λλ‘λͺ
μ£Όμ";
contents_data = data.response.result.items[o].address.road;
}
else if(typeName == "parcel"){
titleName = "μ§λ² μ£Όμ";
contents_data = data.response.result.items[o].address.parcel;
}
}
vw.ol3.markerOption = { // λ§μ»€ μ΅μ
μ€μ
x : data.response.result.items[o].point.x,
y : data.response.result.items[o].point.y,
epsg : "EPSG:3857",
title : titleName,
contents : contents_data,
iconUrl : 'http://map.vworld.kr/images/ol3/marker_blue.png'
};
markerLayer.addMarker(vw.ol3.markerOption); // λ§μ»€ μ΅μ
μ λ§μ»€μ μ μ©
}
}
},
complete:function(){
vmap.addLayer(markerLayer) // λ§μ»€λ₯Ό vmapμ λ±λ‘
},
error: function(xhr, status, error) {
console.log(xhr, status, error);
}
});
var move = function(x,y){
vmap.getView().setCenter([ x, y ]); // μ§λ μ΄λ
vmap.getView().setZoom(17); // μ€λ 벨 μ€μ
}
});
μΌλ¨ ν΄λ¦νμ λμ μ’νλ€μ μΆμΆλλλ° λλ‘μ μμ μΌμ κ°κ²©μ λκ³ μ’νλ₯Ό λ½μλ΄λ λ°©λ²μ κ³ λ―Όν΄ λ΄μΌ ν κ² κ°λ€