support custom map tile server url

This commit is contained in:
MaysWind
2023-10-29 00:31:56 +08:00
parent acc9bf77fb
commit f673677c2a
8 changed files with 102 additions and 23 deletions
+6 -6
View File
@@ -40,7 +40,7 @@ import {
} from './amap.js';
export function loadMapAssets(language) {
if (mapConstants.leafletTileSources[getMapProvider()]) {
if (mapConstants.leafletTileSources[getMapProvider()] || getMapProvider() === 'custom') {
return loadLeafletMapAssets(language);
} else if (getMapProvider() === 'googlemap') {
return loadGoogleMapAssets(language);
@@ -52,7 +52,7 @@ export function loadMapAssets(language) {
}
export function createMapHolder() {
if (mapConstants.leafletTileSources[getMapProvider()]) {
if (mapConstants.leafletTileSources[getMapProvider()] || getMapProvider() === 'custom') {
return createLeafletMapHolder(getMapProvider());
} else if (getMapProvider() === 'googlemap') {
return createGoogleMapHolder(getMapProvider());
@@ -70,7 +70,7 @@ export function initMapInstance(mapHolder, mapContainer, options) {
return;
}
if (mapConstants.leafletTileSources[getMapProvider()]) {
if (mapConstants.leafletTileSources[getMapProvider()] || getMapProvider() === 'custom') {
createLeafletMapInstance(mapHolder, mapContainer, options);
} else if (mapHolder.mapProvider === 'googlemap') {
createGoogleMapInstance(mapHolder, mapContainer, options);
@@ -86,7 +86,7 @@ export function setMapCenterTo(mapHolder, center, zoomLevel) {
return;
}
if (mapConstants.leafletTileSources[getMapProvider()]) {
if (mapConstants.leafletTileSources[getMapProvider()] || getMapProvider() === 'custom') {
setLeafletMapCenterTo(mapHolder, center, zoomLevel);
} else if (mapHolder.mapProvider === 'googlemap') {
setGoogleMapCenterTo(mapHolder, center, zoomLevel);
@@ -102,7 +102,7 @@ export function setMapCenterMarker(mapHolder, position) {
return;
}
if (mapConstants.leafletTileSources[getMapProvider()]) {
if (mapConstants.leafletTileSources[getMapProvider()] || getMapProvider() === 'custom') {
setLeafletMapCenterMaker(mapHolder, position);
} else if (mapHolder.mapProvider === 'googlemap') {
setGoogleMapCenterMaker(mapHolder, position);
@@ -118,7 +118,7 @@ export function removeMapCenterMarker(mapHolder) {
return;
}
if (mapConstants.leafletTileSources[getMapProvider()]) {
if (mapConstants.leafletTileSources[getMapProvider()] || getMapProvider() === 'custom') {
removeLeafletMapCenterMaker(mapHolder);
} else if (mapHolder.mapProvider === 'googlemap') {
removeGoogleMapCenterMaker(mapHolder);
+28 -5
View File
@@ -1,5 +1,12 @@
import mapConstants from '@/consts/map.js';
import { isMapDataFetchProxyEnabled, getTomTomMapAPIKey } from '@/lib/server_settings.js';
import {
isMapDataFetchProxyEnabled,
getCustomMapTileServerUrl,
getCustomMapMinZoomLevel,
getCustomMapMaxZoomLevel,
getCustomMapDefaultZoomLevel,
getTomTomMapAPIKey
} from '@/lib/server_settings.js';
import services from '@/lib/services.js';
const leafletHolder = {
@@ -16,7 +23,7 @@ export function loadLeafletMapAssets() {
export function createLeafletMapHolder(mapProvider) {
const mapTileSource = mapConstants.leafletTileSources[mapProvider];
if (!mapTileSource) {
if (mapProvider !== 'custom' && !mapTileSource) {
return null;
}
@@ -24,8 +31,8 @@ export function createLeafletMapHolder(mapProvider) {
mapProvider: mapProvider,
dependencyLoaded: !!leafletHolder.leaflet,
inited: false,
defaultZoomLevel: mapTileSource.defaultZoomLevel,
minZoomLevel: mapTileSource.minZoom,
defaultZoomLevel: mapProvider !== 'custom' ? mapTileSource.defaultZoomLevel : getCustomMapDefaultZoomLevel(),
minZoomLevel: mapProvider !== 'custom' ? mapTileSource.minZoom : getCustomMapMinZoomLevel(),
leafletInstance: null,
leafletTileLayer: null,
leafletZoomControl: null,
@@ -46,7 +53,13 @@ export function createLeafletMapInstance(mapHolder, mapContainer, options) {
attributionControl: false,
zoomControl: false
});
let mapTileSource = Object.assign({}, mapConstants.leafletTileSources[mapHolder.mapProvider]);
let mapTileSource = null;
if (mapHolder.mapProvider !== 'custom') {
mapTileSource = Object.assign({}, mapConstants.leafletTileSources[mapHolder.mapProvider]);
} else {
mapTileSource = createCustomMapSource();
}
if (isMapDataFetchProxyEnabled()) {
mapTileSource.tileUrlFormat = services.generateMapProxyTileImageUrl(mapHolder.mapProvider, options.language);
@@ -137,3 +150,13 @@ export function removeLeafletMapCenterMaker(mapHolder) {
mapHolder.leafletCenterMarker.remove();
mapHolder.leafletCenterMarker = null;
}
function createCustomMapSource() {
return {
tileUrlFormat: getCustomMapTileServerUrl(),
tileUrlSubDomains: '',
minZoom: getCustomMapMinZoomLevel(),
maxZoom: getCustomMapMaxZoomLevel(),
defaultZoomLevel: getCustomMapDefaultZoomLevel()
};
}
+19
View File
@@ -53,6 +53,25 @@ export function isMapDataFetchProxyEnabled() {
return getServerSetting('mp') === '1';
}
export function getCustomMapTileServerUrl() {
return getServerDecodedSetting('cmsu');
}
export function getCustomMapMinZoomLevel() {
const zoomLevelSettings = (getServerSetting('cmzl') || '').split('-');
return (zoomLevelSettings && zoomLevelSettings[0]) ? parseInt(zoomLevelSettings[0]) : 1;
}
export function getCustomMapMaxZoomLevel() {
const zoomLevelSettings = (getServerSetting('cmzl') || '').split('-');
return (zoomLevelSettings && zoomLevelSettings[1]) ? parseInt(zoomLevelSettings[1]) : 18;
}
export function getCustomMapDefaultZoomLevel() {
const zoomLevelSettings = (getServerSetting('cmzl') || '').split('-');
return (zoomLevelSettings && zoomLevelSettings[2]) ? parseInt(zoomLevelSettings[2]) : 14;
}
export function getTomTomMapAPIKey() {
return getServerDecodedSetting('tmak');
}