From 292d59a92b6cbb1857e6adf8a16f70bc89cc0252 Mon Sep 17 00:00:00 2001 From: zhaoq Date: Thu, 28 Jan 2021 16:01:25 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90update=E3=80=911)=20webmap=E6=94=B9?= =?UTF-8?q?=E5=8F=98=E4=BA=92=E8=81=94=E7=BD=91=E8=B0=B7=E6=AD=8C=E5=9C=B0?= =?UTF-8?q?=E5=9B=BE=E7=9A=84=E5=9C=B0=E5=9D=80=E3=80=82=E4=B9=8B=E5=89=8D?= =?UTF-8?q?=E5=9C=B0=E5=9D=80=E4=B8=8D=E5=8F=AF=E8=AE=BF=E9=97=AE=E4=BA=86?= =?UTF-8?q?=20=20=20=20=20=20=20=20=20=20=202=EF=BC=89=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E4=BC=A0=E5=85=A5google=20api=E7=9A=84key,=E8=AE=BF=E9=97=AE?= =?UTF-8?q?=E7=93=A6=E7=89=87=E6=97=B6=E5=8A=A0=E4=B8=8A=20=20=20=20=20=20?= =?UTF-8?q?=20=20=20=20=203=EF=BC=89=E8=B0=B7=E6=AD=8C=E5=BA=95=E5=9B=BE?= =?UTF-8?q?=E7=9A=84=E6=A0=87=E6=B3=A8=E6=A0=B9=E6=8D=AEcookie=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=AF=AD=E8=A8=80=E6=88=96=E8=80=85=E6=98=AF=E6=B5=8F?= =?UTF-8?q?=E8=A7=88=E5=99=A8=E8=AF=AD=E8=A8=80=EF=BC=8C=E8=80=8C=E7=8E=B0?= =?UTF-8?q?=E5=AE=9E=E5=AF=B9=E5=BA=94=E8=AF=AD=E8=A8=80=E7=9A=84=E6=A0=87?= =?UTF-8?q?=E6=B3=A8=20=EF=BC=88reviewed=20by=20yuzy=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/openlayers/mapping/WebMap.js | 161 ++++++++++++++++++++++++++++++- 1 file changed, 160 insertions(+), 1 deletion(-) diff --git a/src/openlayers/mapping/WebMap.js b/src/openlayers/mapping/WebMap.js index 37aa1a7c5e..effdf63482 100644 --- a/src/openlayers/mapping/WebMap.js +++ b/src/openlayers/mapping/WebMap.js @@ -85,6 +85,7 @@ const dpiConfig = { * @param {boolean} [options.excludePortalProxyUrl] - server传递过来的url是否带有代理 * @param {Object} [options.serviceProxy] - iportal内置代理信息, 仅矢量瓦片图层上图才会使用 * @param {string} [options.tiandituKey] - 天地图的key + * @param {string} [options.googleMapsAPIKey] - 谷歌底图需要的key * @param {string} [options.proxy] - 代理地址,当域名不一致,请求会加上代理。避免跨域 * @param {string} [options.tileFormat] - 地图瓦片出图格式,png/webp * @param {function} [options.mapSetting.mapClickCallback] - 地图被点击的回调函数 @@ -114,6 +115,7 @@ export class WebMap extends Observable { this.excludePortalProxyUrl = options.excludePortalProxyUrl || false; this.serviceProxy = options.serviceProxy || null; this.tiandituKey = options.tiandituKey; + this.googleMapsAPIKey = options.googleMapsAPIKey || ''; this.proxy = options.proxy; //计数叠加图层,处理过的数量(成功和失败都会计数) this.layerAdded = 0; @@ -973,7 +975,7 @@ export class WebMap extends Observable { baseLayerInfo.iserverUrl = 'https://www.openstreetmap.org'; break; case ('GOOGLE'): - baseLayerInfo.url = 'https://www.google.cn/maps/vt/pb=!1m4!1m3!1i{z}!2i{x}!3i{y}!2m3!1e0!2sm!3i380072576!3m8!2szh-CN!3scn!5e1105!12m4!1e68!2m2!1sset!2sRoadmap!4e0!5m1!1e0'; + baseLayerInfo.url = `https://maps.googleapis.com/maps/vt?pb=!1m5!1m4!1i{z}!2i{x}!3i{y}!4i256!2m3!1e0!2sm!3i540264686!3m12!2s${this.getLang()}!3sUS!5e18!12m4!1e68!2m2!1sset!2sRoadmap!12m3!1e37!2m1!1ssmartmaps!4e0&key=${this.googleMapsAPIKey}`; baseLayerInfo.epsgCode = 'EPSG:3857'; baseLayerInfo.minZoom = 1; baseLayerInfo.maxZoom = 22; @@ -4856,4 +4858,161 @@ export class WebMap extends Observable { const layer = new olLayer.Graticule(graticuleOptions); this.map.addLayer(layer); } + /** + * @private + * @function ol.supermap.WebMap.prototype.getLang + * @description 检测当前cookie中的语言或者浏览器所用语言 + * @returns {string} 语言名称,如zh-CN + */ + getLang() { + if(this.getCookie('language')) { + const cookieLang = this.getCookie('language'); + return this.formatCookieLang(cookieLang); + } else { + const browerLang = navigator.language || navigator.browserLanguage; + return browerLang; + } + } + /** + * @private + * @function ol.supermap.WebMap.prototype.getCookie + * @description 获取cookie中某个key对应的值 + * @returns {string} 某个key对应的值 + */ + getCookie(key) { + key = key.toLowerCase(); + let value = null; + let cookies = document.cookie.split(';'); + cookies.forEach(function (cookie) { + const arr = cookie.split('='); + if (arr[0].toLowerCase().trim() === key) { + value = arr[1].trim(); + return; + } + }); + return value; + } + /** + * @private + * @function ol.supermap.WebMap.prototype.formatCookieLang + * @description 将从cookie中获取的lang,转换成全称,如zh=>zh-CN + * @returns {string} 转换后的语言名称 + */ + formatCookieLang(cookieLang) { + let lang; + switch(cookieLang) { + case 'zh': + lang = 'zh-CN'; + break; + case 'ar': + lang = 'ar-EG'; + break; + case 'bg': + lang = 'bg-BG'; + break; + case 'ca': + lang = 'ca-ES'; + break; + case 'cs': + lang = 'cs-CZ'; + break; + case 'da': + lang = 'da-DK'; + break; + case 'de': + lang = 'de-DE'; + break; + case 'el': + lang = 'el-GR'; + break; + case 'es': + lang = 'es-ES'; + break; + case 'et': + lang = 'et-EE'; + break; + case 'fa': + lang = 'fa-IR'; + break; + case 'fl': + lang = 'fi-FI'; + break; + case 'fr': + lang = 'fr-FR'; + break; + case 'he': + lang = 'he-IL'; + break; + case 'hu': + lang = 'hu-HU'; + break; + case 'id': + lang = 'id-ID'; + break; + case 'is': + lang = 'is-IS'; + break; + case 'it': + lang = 'it-IT'; + break; + case 'ja': + lang = 'ja-JP'; + break; + case 'ko': + lang = 'ko-KR'; + break; + case 'ku': + lang = 'ku-IQ'; + break; + case 'mn': + lang = 'mn-MN'; + break; + case 'nb': + lang = 'nb-NO'; + break; + case 'ne': + lang = 'ne-NP'; + break; + case 'nl': + lang = 'nl-NL'; + break; + case 'pl': + lang = 'pl-PL'; + break; + case 'pt': + lang = 'pt-PT'; + break; + case 'ru': + lang = 'ru-RU'; + break; + case 'sk': + lang = 'sk-SK'; + break; + case 'sl': + lang = 'sl-SI'; + break; + case 'sr': + lang = 'sr-RS'; + break; + case 'sv': + lang = 'sv-SE'; + break; + case 'th': + lang = 'th-TH'; + break; + case 'tr': + lang = 'tr-TR'; + break; + case 'uk': + lang = 'uk-UA'; + break; + case 'vi': + lang = 'vi-VN'; + break; + default: + lang = 'en-US'; + break; + } + return lang; + } }