name_daum_요청경로_수정.js
· 4.3 KiB · JavaScript
Sin formato
// 설정값 링크: http://www.gisdeveloper.co.kr/?p=12587
// 요청경로 참고: 네이버 + 카카오 맵, 대구 2d 지도 서비스
// RsMapCore 네이버 설정
this.__getLayerNaverMap = function (tileType){
proj4.defs('EPSG:3857', '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs');
ol.proj.setProj4 = proj4;
var resolutions = [78000, 39000, 19600, 9800, 4900, 2400, 1222.9924523925781, 611.4962261962891, 305.74811309814453, 152.87405654907226, 76.43702827453613, 38.218514137268066, 19.109257068634033, 9.554628534317017, 4.777314267158508, 2.388657133579254, 1.194328566789627, 0.5971642833948135];
var extent = [-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244]; // 4 * 3
var projection = new ol.proj.Projection({
code: 'EPSG:3857',
extent: extent,
units: 'm'
});
var _id = this.ServiceType.BaseLayer.name + '-naver-' + tileType;
var tileLayer = new ol.layer.Tile({
id : _id,
title : 'Naver ' + tileType + ' Map',
visible : false,
type : 'base',
source : new ol.source.XYZ({
projection: projection,
crossOrigin : "anonymous",
tileSize: 256,
tilePixelRatio: 1.5, // 타일 이미지 화질 (1 ~ 2)
minZoom: 0,
maxZoom: resolutions.length - 1,
tileGrid: new ol.tilegrid.TileGrid({
extent: extent,
origin: [extent[0], extent[2]], // y축 역배열 보정
resolutions: resolutions
}),
tileUrlFunction: function (tileCoord, pixelRatio, projection) {
if (tileCoord == null) return undefined;
var z = tileCoord[0] + 1;
var x = tileCoord[1];
var y = tileCoord[2] + 1; // y축 보정값
if (tileType === 'Base') {
// 기본지도
// * only http 요청만 -> return '//nrbe.map.naver.net/styles/basic/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko';
return '//map.pstatic.net/nrb/styles/basic/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko'; // mt= 파라미터 삭제 시 피쳐 x
} else {
// 항공지도
// * only http 요청만 -> return '//nrbe.map.naver.net/styles/satellite/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko';
return '//map.pstatic.net/nrb/styles/satellite/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko'; // mt= 파라미터 삭제 시 피쳐 x
}
}
})
});
return tileLayer;
};
// RsMapCore 카카오 설정
this.__getLayerDaumMap = function (tileType){
proj4.defs("EPSG:5181","+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
ol.proj.setProj4 = proj4;
var resolutions = [2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0.5, 0.25];
var extent = [-30000, -60000, 494288, 988576];
var projection = new ol.proj.Projection({
code: 'EPSG:5181',
extent: extent,
units: 'm'
});
var _id = this.ServiceType.BaseLayer.name + '-daum-' + tileType;
var tileLayer = new ol.layer.Tile({
id : _id,
title : 'Daum Street Map',
visible : false,
type : 'base',
source : new ol.source.XYZ({
projection: projection,
tileSize: 512,
tilePixelRatio: 1.5, // 타일 이미지 화질 (1 ~ 2)
minZoom: 0,
maxZoom: resolutions.length - 1,
tileGrid: new ol.tilegrid.TileGrid({
origin: [extent[0], extent[1]],
resolutions: resolutions
}),
tileUrlFunction: function (tileCoord, pixelRatio, projection) {
if (tileCoord == null) return undefined;
var s = Math.floor(Math.random() * 4); // 0 ~ 3
var z = resolutions.length - tileCoord[0];
var x = tileCoord[1];
var y = tileCoord[2];
// 카카오는 http, https 둘 다 가능
// https가 적용된 웹페이지에서는 http 요청 자동으로 https로 업그레이드
var _tileUrl = 'http://map.daumcdn.net/map_k3f_prod/bakery/image_map_png/PNG01/v29_9jh91/' + z + '/' + y + '/' + x + '.png';
if (tileType === 'Satellite') {
_tileUrl = 'http://map' + s + '.daumcdn.net/map_skyview_hd/L' + z + '/' + y + '/' + x + '.jpg?v=160107'; // 카카오는 피쳐레이어 별도로 제공
} else if (tileType == 'Roadview') {
_tileUrl = 'http://map.daumcdn.net/map_k3f_prod/bakery/image_map_png/PNG_RV01/v16_fs8a9/' + z + '/' + y + '/' + x + '.png';
}
return _tileUrl;
}
})
});
return tileLayer;
};
| 1 | // 설정값 링크: http://www.gisdeveloper.co.kr/?p=12587 |
| 2 | // 요청경로 참고: 네이버 + 카카오 맵, 대구 2d 지도 서비스 |
| 3 | |
| 4 | // RsMapCore 네이버 설정 |
| 5 | this.__getLayerNaverMap = function (tileType){ |
| 6 | proj4.defs('EPSG:3857', '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs'); |
| 7 | ol.proj.setProj4 = proj4; |
| 8 | |
| 9 | var resolutions = [78000, 39000, 19600, 9800, 4900, 2400, 1222.9924523925781, 611.4962261962891, 305.74811309814453, 152.87405654907226, 76.43702827453613, 38.218514137268066, 19.109257068634033, 9.554628534317017, 4.777314267158508, 2.388657133579254, 1.194328566789627, 0.5971642833948135]; |
| 10 | var extent = [-20037508.342789244, -20037508.342789244, 20037508.342789244, 20037508.342789244]; // 4 * 3 |
| 11 | |
| 12 | var projection = new ol.proj.Projection({ |
| 13 | code: 'EPSG:3857', |
| 14 | extent: extent, |
| 15 | units: 'm' |
| 16 | }); |
| 17 | |
| 18 | var _id = this.ServiceType.BaseLayer.name + '-naver-' + tileType; |
| 19 | var tileLayer = new ol.layer.Tile({ |
| 20 | id : _id, |
| 21 | title : 'Naver ' + tileType + ' Map', |
| 22 | visible : false, |
| 23 | type : 'base', |
| 24 | source : new ol.source.XYZ({ |
| 25 | projection: projection, |
| 26 | crossOrigin : "anonymous", |
| 27 | tileSize: 256, |
| 28 | tilePixelRatio: 1.5, // 타일 이미지 화질 (1 ~ 2) |
| 29 | minZoom: 0, |
| 30 | maxZoom: resolutions.length - 1, |
| 31 | tileGrid: new ol.tilegrid.TileGrid({ |
| 32 | extent: extent, |
| 33 | origin: [extent[0], extent[2]], // y축 역배열 보정 |
| 34 | resolutions: resolutions |
| 35 | }), |
| 36 | tileUrlFunction: function (tileCoord, pixelRatio, projection) { |
| 37 | if (tileCoord == null) return undefined; |
| 38 | |
| 39 | var z = tileCoord[0] + 1; |
| 40 | var x = tileCoord[1]; |
| 41 | var y = tileCoord[2] + 1; // y축 보정값 |
| 42 | |
| 43 | |
| 44 | if (tileType === 'Base') { |
| 45 | // 기본지도 |
| 46 | // * only http 요청만 -> return '//nrbe.map.naver.net/styles/basic/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko'; |
| 47 | return '//map.pstatic.net/nrb/styles/basic/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko'; // mt= 파라미터 삭제 시 피쳐 x |
| 48 | } else { |
| 49 | // 항공지도 |
| 50 | // * only http 요청만 -> return '//nrbe.map.naver.net/styles/satellite/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko'; |
| 51 | return '//map.pstatic.net/nrb/styles/satellite/1717723233/' + z + '/' + x + '/' + -y + '@2x.png?mt=bg.ol.sw.ar.lko'; // mt= 파라미터 삭제 시 피쳐 x |
| 52 | } |
| 53 | } |
| 54 | }) |
| 55 | }); |
| 56 | |
| 57 | return tileLayer; |
| 58 | }; |
| 59 | |
| 60 | // RsMapCore 카카오 설정 |
| 61 | this.__getLayerDaumMap = function (tileType){ |
| 62 | proj4.defs("EPSG:5181","+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs"); |
| 63 | ol.proj.setProj4 = proj4; |
| 64 | |
| 65 | var resolutions = [2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0.5, 0.25]; |
| 66 | var extent = [-30000, -60000, 494288, 988576]; |
| 67 | |
| 68 | var projection = new ol.proj.Projection({ |
| 69 | code: 'EPSG:5181', |
| 70 | extent: extent, |
| 71 | units: 'm' |
| 72 | }); |
| 73 | |
| 74 | var _id = this.ServiceType.BaseLayer.name + '-daum-' + tileType; |
| 75 | var tileLayer = new ol.layer.Tile({ |
| 76 | id : _id, |
| 77 | title : 'Daum Street Map', |
| 78 | visible : false, |
| 79 | type : 'base', |
| 80 | source : new ol.source.XYZ({ |
| 81 | projection: projection, |
| 82 | tileSize: 512, |
| 83 | tilePixelRatio: 1.5, // 타일 이미지 화질 (1 ~ 2) |
| 84 | minZoom: 0, |
| 85 | maxZoom: resolutions.length - 1, |
| 86 | tileGrid: new ol.tilegrid.TileGrid({ |
| 87 | origin: [extent[0], extent[1]], |
| 88 | resolutions: resolutions |
| 89 | }), |
| 90 | tileUrlFunction: function (tileCoord, pixelRatio, projection) { |
| 91 | if (tileCoord == null) return undefined; |
| 92 | |
| 93 | var s = Math.floor(Math.random() * 4); // 0 ~ 3 |
| 94 | var z = resolutions.length - tileCoord[0]; |
| 95 | var x = tileCoord[1]; |
| 96 | var y = tileCoord[2]; |
| 97 | |
| 98 | // 카카오는 http, https 둘 다 가능 |
| 99 | // https가 적용된 웹페이지에서는 http 요청 자동으로 https로 업그레이드 |
| 100 | var _tileUrl = 'http://map.daumcdn.net/map_k3f_prod/bakery/image_map_png/PNG01/v29_9jh91/' + z + '/' + y + '/' + x + '.png'; |
| 101 | if (tileType === 'Satellite') { |
| 102 | _tileUrl = 'http://map' + s + '.daumcdn.net/map_skyview_hd/L' + z + '/' + y + '/' + x + '.jpg?v=160107'; // 카카오는 피쳐레이어 별도로 제공 |
| 103 | } else if (tileType == 'Roadview') { |
| 104 | _tileUrl = 'http://map.daumcdn.net/map_k3f_prod/bakery/image_map_png/PNG_RV01/v16_fs8a9/' + z + '/' + y + '/' + x + '.png'; |
| 105 | } |
| 106 | |
| 107 | return _tileUrl; |
| 108 | } |
| 109 | }) |
| 110 | }); |
| 111 | |
| 112 | return tileLayer; |
| 113 | }; |