mirror of
https://github.com/mayswind/ezbookkeeping.git
synced 2026-05-20 17:54:30 +08:00
map provider supports CartoDB
This commit is contained in:
@@ -160,6 +160,7 @@ func startWebServer(c *cli.Context) error {
|
|||||||
config.MapProvider == settings.OpenTopoMapProvider ||
|
config.MapProvider == settings.OpenTopoMapProvider ||
|
||||||
config.MapProvider == settings.OPNVKarteMapProvider ||
|
config.MapProvider == settings.OPNVKarteMapProvider ||
|
||||||
config.MapProvider == settings.CyclOSMMapProvider ||
|
config.MapProvider == settings.CyclOSMMapProvider ||
|
||||||
|
config.MapProvider == settings.CartoDBMapProvider ||
|
||||||
config.MapProvider == settings.TomTomMapProvider ||
|
config.MapProvider == settings.TomTomMapProvider ||
|
||||||
config.MapProvider == settings.CustomProvider {
|
config.MapProvider == settings.CustomProvider {
|
||||||
proxyRoute.GET("/map/tile/:zoomLevel/:coordinateX/:fileName", bindProxy(api.MapImages.MapTileImageProxyHandler))
|
proxyRoute.GET("/map/tile/:zoomLevel/:coordinateX/:fileName", bindProxy(api.MapImages.MapTileImageProxyHandler))
|
||||||
|
|||||||
@@ -153,6 +153,7 @@ enable_export = true
|
|||||||
# "opentopomap": https://opentopomap.org
|
# "opentopomap": https://opentopomap.org
|
||||||
# "opnvkarte": https://publictransportmap.org
|
# "opnvkarte": https://publictransportmap.org
|
||||||
# "cyclosm": https://www.cyclosm.org
|
# "cyclosm": https://www.cyclosm.org
|
||||||
|
# "cartodb": https://carto.com/basemaps
|
||||||
# "tomtom": https://www.tomtom.com
|
# "tomtom": https://www.tomtom.com
|
||||||
# "googlemap": https://map.google.com
|
# "googlemap": https://map.google.com
|
||||||
# "baidumap": https://map.baidu.com
|
# "baidumap": https://map.baidu.com
|
||||||
@@ -161,7 +162,7 @@ enable_export = true
|
|||||||
# Leave blank if you want to disable map
|
# Leave blank if you want to disable map
|
||||||
map_provider = openstreetmap
|
map_provider = openstreetmap
|
||||||
|
|
||||||
# Set to true to use the ezbookkeeping server to proxy map data requests, for "openstreetmap", "openstreetmap_humanitarian", "opentopomap", "opnvkarte", "cyclosm", "tomtom" or "custom"
|
# Set to true to use the ezbookkeeping server to proxy map data requests, for "openstreetmap", "openstreetmap_humanitarian", "opentopomap", "opnvkarte", "cyclosm", "cartodb", "tomtom" or "custom"
|
||||||
map_data_fetch_proxy = false
|
map_data_fetch_proxy = false
|
||||||
|
|
||||||
# For "tomtom" only, TomTom map API key, please visit https://developer.tomtom.com/how-to-get-tomtom-api-key
|
# For "tomtom" only, TomTom map API key, please visit https://developer.tomtom.com/how-to-get-tomtom-api-key
|
||||||
|
|||||||
@@ -11,12 +11,13 @@ import (
|
|||||||
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
"github.com/mayswind/ezbookkeeping/pkg/settings"
|
||||||
)
|
)
|
||||||
|
|
||||||
const openStreetMapTileImageUrlFormat = "https://tile.openstreetmap.org/{z}/{x}/{y}.png" // https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
const openStreetMapTileImageUrlFormat = "https://tile.openstreetmap.org/{z}/{x}/{y}.png" // https://tile.openstreetmap.org/{z}/{x}/{y}.png
|
||||||
const openStreetMapHumanitarianStyleTileImageUrlFormat = "https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png" // https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png
|
const openStreetMapHumanitarianStyleTileImageUrlFormat = "https://a.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png" // https://{s}.tile.openstreetmap.fr/hot/{z}/{x}/{y}.png
|
||||||
const openTopoMapTileImageUrlFormat = "https://tile.opentopomap.org/{z}/{x}/{y}.png" // https://tile.opentopomap.org/{z}/{x}/{y}.png
|
const openTopoMapTileImageUrlFormat = "https://tile.opentopomap.org/{z}/{x}/{y}.png" // https://tile.opentopomap.org/{z}/{x}/{y}.png
|
||||||
const opnvKarteMapTileImageUrlFormat = "https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png" // https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png
|
const opnvKarteMapTileImageUrlFormat = "https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png" // https://tileserver.memomaps.de/tilegen/{z}/{x}/{y}.png
|
||||||
const cyclOSMMapTileImageUrlFormat = "https://a.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png" // https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png
|
const cyclOSMMapTileImageUrlFormat = "https://a.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png" // https://{s}.tile-cyclosm.openstreetmap.fr/cyclosm/{z}/{x}/{y}.png
|
||||||
const tomtomMapTileImageUrlFormat = "https://api.tomtom.com/map/1/tile/basic/main/{z}/{x}/{y}.png" // https://api.tomtom.com/map/{versionNumber}/tile/{layer}/{style}/{z}/{x}/{y}.png?key={key}&language={language}
|
const cartoDBMapTileImageUrlFormat = "https://a.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}{scale}.png" // https://{s}.basemaps.cartocdn.com/{style}/{z}/{x}/{y}{scale}.png
|
||||||
|
const tomtomMapTileImageUrlFormat = "https://api.tomtom.com/map/1/tile/basic/main/{z}/{x}/{y}.png" // https://api.tomtom.com/map/{versionNumber}/tile/{layer}/{style}/{z}/{x}/{y}.png?key={key}&language={language}
|
||||||
|
|
||||||
// MapImageProxy represents map image proxy
|
// MapImageProxy represents map image proxy
|
||||||
type MapImageProxy struct {
|
type MapImageProxy struct {
|
||||||
@@ -41,6 +42,7 @@ func (p *MapImageProxy) MapTileImageProxyHandler(c *core.Context) (*httputil.Rev
|
|||||||
fileName := c.Param("fileName")
|
fileName := c.Param("fileName")
|
||||||
fileNameParts := strings.Split(fileName, ".")
|
fileNameParts := strings.Split(fileName, ".")
|
||||||
coordinateY := fileNameParts[0]
|
coordinateY := fileNameParts[0]
|
||||||
|
scale := c.Query("scale")
|
||||||
|
|
||||||
if len(fileNameParts) != 2 || fileNameParts[len(fileNameParts)-1] != "png" {
|
if len(fileNameParts) != 2 || fileNameParts[len(fileNameParts)-1] != "png" {
|
||||||
return nil, errs.ErrImageExtensionNotSupported
|
return nil, errs.ErrImageExtensionNotSupported
|
||||||
@@ -56,6 +58,8 @@ func (p *MapImageProxy) MapTileImageProxyHandler(c *core.Context) (*httputil.Rev
|
|||||||
targetUrl = opnvKarteMapTileImageUrlFormat
|
targetUrl = opnvKarteMapTileImageUrlFormat
|
||||||
} else if mapProvider == settings.CyclOSMMapProvider {
|
} else if mapProvider == settings.CyclOSMMapProvider {
|
||||||
targetUrl = cyclOSMMapTileImageUrlFormat
|
targetUrl = cyclOSMMapTileImageUrlFormat
|
||||||
|
} else if mapProvider == settings.CartoDBMapProvider {
|
||||||
|
targetUrl = cartoDBMapTileImageUrlFormat
|
||||||
} else if mapProvider == settings.TomTomMapProvider {
|
} else if mapProvider == settings.TomTomMapProvider {
|
||||||
targetUrl = tomtomMapTileImageUrlFormat + "?key=" + settings.Container.Current.TomTomMapAPIKey
|
targetUrl = tomtomMapTileImageUrlFormat + "?key=" + settings.Container.Current.TomTomMapAPIKey
|
||||||
language := c.Query("language")
|
language := c.Query("language")
|
||||||
@@ -74,6 +78,7 @@ func (p *MapImageProxy) MapTileImageProxyHandler(c *core.Context) (*httputil.Rev
|
|||||||
imageRawUrl = strings.Replace(imageRawUrl, "{z}", zoomLevel, -1)
|
imageRawUrl = strings.Replace(imageRawUrl, "{z}", zoomLevel, -1)
|
||||||
imageRawUrl = strings.Replace(imageRawUrl, "{x}", coordinateX, -1)
|
imageRawUrl = strings.Replace(imageRawUrl, "{x}", coordinateX, -1)
|
||||||
imageRawUrl = strings.Replace(imageRawUrl, "{y}", coordinateY, -1)
|
imageRawUrl = strings.Replace(imageRawUrl, "{y}", coordinateY, -1)
|
||||||
|
imageRawUrl = strings.Replace(imageRawUrl, "{scale}", scale, -1)
|
||||||
imageUrl, _ := url.Parse(imageRawUrl)
|
imageUrl, _ := url.Parse(imageRawUrl)
|
||||||
|
|
||||||
req.URL = imageUrl
|
req.URL = imageUrl
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ func ServerSettingsCookie(config *settings.Config) core.MiddlewareHandlerFunc {
|
|||||||
config.MapProvider == settings.OpenTopoMapProvider ||
|
config.MapProvider == settings.OpenTopoMapProvider ||
|
||||||
config.MapProvider == settings.OPNVKarteMapProvider ||
|
config.MapProvider == settings.OPNVKarteMapProvider ||
|
||||||
config.MapProvider == settings.CyclOSMMapProvider ||
|
config.MapProvider == settings.CyclOSMMapProvider ||
|
||||||
|
config.MapProvider == settings.CartoDBMapProvider ||
|
||||||
config.MapProvider == settings.TomTomMapProvider ||
|
config.MapProvider == settings.TomTomMapProvider ||
|
||||||
config.MapProvider == settings.CustomProvider) {
|
config.MapProvider == settings.CustomProvider) {
|
||||||
settingsArr = append(settingsArr, buildBooleanSetting("mp", config.EnableMapDataFetchProxy))
|
settingsArr = append(settingsArr, buildBooleanSetting("mp", config.EnableMapDataFetchProxy))
|
||||||
|
|||||||
@@ -74,8 +74,9 @@ const (
|
|||||||
OpenTopoMapProvider string = "opentopomap"
|
OpenTopoMapProvider string = "opentopomap"
|
||||||
OPNVKarteMapProvider string = "opnvkarte"
|
OPNVKarteMapProvider string = "opnvkarte"
|
||||||
CyclOSMMapProvider string = "cyclosm"
|
CyclOSMMapProvider string = "cyclosm"
|
||||||
GoogleMapProvider string = "googlemap"
|
CartoDBMapProvider string = "cartodb"
|
||||||
TomTomMapProvider string = "tomtom"
|
TomTomMapProvider string = "tomtom"
|
||||||
|
GoogleMapProvider string = "googlemap"
|
||||||
BaiduMapProvider string = "baidumap"
|
BaiduMapProvider string = "baidumap"
|
||||||
AmapProvider string = "amap"
|
AmapProvider string = "amap"
|
||||||
CustomProvider string = "custom"
|
CustomProvider string = "custom"
|
||||||
@@ -541,10 +542,12 @@ func loadMapConfiguration(config *Config, configFile *ini.File, sectionName stri
|
|||||||
config.MapProvider = OPNVKarteMapProvider
|
config.MapProvider = OPNVKarteMapProvider
|
||||||
} else if mapProvider == CyclOSMMapProvider {
|
} else if mapProvider == CyclOSMMapProvider {
|
||||||
config.MapProvider = CyclOSMMapProvider
|
config.MapProvider = CyclOSMMapProvider
|
||||||
} else if mapProvider == GoogleMapProvider {
|
} else if mapProvider == CartoDBMapProvider {
|
||||||
config.MapProvider = GoogleMapProvider
|
config.MapProvider = CartoDBMapProvider
|
||||||
} else if mapProvider == TomTomMapProvider {
|
} else if mapProvider == TomTomMapProvider {
|
||||||
config.MapProvider = TomTomMapProvider
|
config.MapProvider = TomTomMapProvider
|
||||||
|
} else if mapProvider == GoogleMapProvider {
|
||||||
|
config.MapProvider = GoogleMapProvider
|
||||||
} else if mapProvider == BaiduMapProvider {
|
} else if mapProvider == BaiduMapProvider {
|
||||||
config.MapProvider = BaiduMapProvider
|
config.MapProvider = BaiduMapProvider
|
||||||
} else if mapProvider == AmapProvider {
|
} else if mapProvider == AmapProvider {
|
||||||
|
|||||||
@@ -39,6 +39,14 @@ const leafletTileSources = {
|
|||||||
defaultZoomLevel: 14,
|
defaultZoomLevel: 14,
|
||||||
attribution : '<a href="https://github.com/cyclosm/cyclosm-cartocss-style/releases" title="CyclOSM - Open Bicycle render" class="external" target="_blank">CyclOSM</a> | Map data: © <a href="https://www.openstreetmap.org/copyright" class="external" target="_blank">OpenStreetMap</a> contributors'
|
attribution : '<a href="https://github.com/cyclosm/cyclosm-cartocss-style/releases" title="CyclOSM - Open Bicycle render" class="external" target="_blank">CyclOSM</a> | Map data: © <a href="https://www.openstreetmap.org/copyright" class="external" target="_blank">OpenStreetMap</a> contributors'
|
||||||
},
|
},
|
||||||
|
'cartodb': {
|
||||||
|
tileUrlFormat: 'https://{s}.basemaps.cartocdn.com/rastertiles/voyager/{z}/{x}/{y}.png',
|
||||||
|
tileUrlSubDomains: 'abcd',
|
||||||
|
minZoom: 1,
|
||||||
|
maxZoom: 20,
|
||||||
|
defaultZoomLevel: 14,
|
||||||
|
attribution : '© <a href="http://www.openstreetmap.org/copyright" class="external" target="_blank">OpenStreetMap</a>, © <a href="https://carto.com/attributions" class="external" target="_blank">CARTO</a>'
|
||||||
|
},
|
||||||
'tomtom': {
|
'tomtom': {
|
||||||
tileUrlFormat: 'https://{s}.api.tomtom.com/map/1/tile/basic/main/{z}/{x}/{y}.png',
|
tileUrlFormat: 'https://{s}.api.tomtom.com/map/1/tile/basic/main/{z}/{x}/{y}.png',
|
||||||
tileUrlSubDomains: 'abcd',
|
tileUrlSubDomains: 'abcd',
|
||||||
|
|||||||
Reference in New Issue
Block a user