2022-08-26 17:00:08 -04:00
package com.geeksville.mesh.model
import org.osmdroid.tileprovider.tilesource.ITileSource
import org.osmdroid.tileprovider.tilesource.OnlineTileSourceBase
import org.osmdroid.tileprovider.tilesource.TileSourceFactory
import org.osmdroid.tileprovider.tilesource.TileSourcePolicy
import org.osmdroid.util.MapTileIndex
2022-09-30 16:25:27 -04:00
import org.osmdroid.wms.WMSTileSource
2022-08-26 17:00:08 -04:00
class CustomTileSource {
companion object {
2022-09-30 16:25:27 -04:00
// Map Server information: https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer
// Arcgis Information: https://www.arcgis.com/home/item.html?id=10df2279f9684e4a9f6a7f08febac2a9
private val ESRI _IMAGERY = object : OnlineTileSourceBase (
" ESRI World Overview " , 0 , 18 , 256 , " .jpg " , arrayOf (
" https://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer/tile/ "
) , " Esri, Maxar, Earthstar Geographics, and the GIS User Community " ,
2022-08-26 17:00:08 -04:00
TileSourcePolicy (
2022-09-30 16:25:27 -04:00
2 ,
TileSourcePolicy . FLAG _NO _BULK
2022-08-26 17:00:08 -04:00
or TileSourcePolicy . FLAG _NO _PREVENTIVE
or TileSourcePolicy . FLAG _USER _AGENT _MEANINGFUL
or TileSourcePolicy . FLAG _USER _AGENT _NORMALIZED
)
) {
override fun getTileURLString ( pMapTileIndex : Long ) : String {
return baseUrl + ( MapTileIndex . getZoom ( pMapTileIndex )
. toString ( ) + " / " + MapTileIndex . getY ( pMapTileIndex )
+ " / " + MapTileIndex . getX ( pMapTileIndex )
+ mImageFilenameEnding )
}
}
2022-09-30 16:25:27 -04:00
//https://nowcoast.noaa.gov/arcgis/rest/services/nowcoast/radar_meteo_imagery_nexrad_time/MapServer
private val NOAA _RADAR = object : OnlineTileSourceBase (
" NOAA GOES Radar " ,
0 ,
18 ,
256 ,
" " ,
arrayOf (
" https://earthlive.maptiles.arcgis.com/arcgis/rest/services/GOES/GOES31C/MapServer/tile/ "
) ,
" Dataset Citation: GOES-R Calibration Working Group and GOES-R Series Program, (2017): NOAA GOES-R Series Advanced Baseline Imager (ABI) Level 1b Radiances Band 13. NOAA National Centers for Environmental Information. doi:10.7289/V5BV7DSR " ,
TileSourcePolicy (
2 ,
TileSourcePolicy . FLAG _NO _PREVENTIVE
or TileSourcePolicy . FLAG _USER _AGENT _MEANINGFUL
or TileSourcePolicy . FLAG _USER _AGENT _NORMALIZED
)
) {
override fun getTileURLString ( pMapTileIndex : Long ) : String {
return baseUrl + ( MapTileIndex . getZoom ( pMapTileIndex )
. toString ( ) + " / " + MapTileIndex . getY ( pMapTileIndex )
+ " / " + MapTileIndex . getX ( pMapTileIndex )
+ mImageFilenameEnding )
}
}
/ * *
* WMS TILE SERVER
* More research is required to get this to function correctly with overlays
* /
val NOAA _RADAR _WMS = NOAAWmsTileSource (
" Recent Weather Radar " ,
arrayOf ( " https://new.nowcoast.noaa.gov/arcgis/services/nowcoast/radar_meteo_imagery_nexrad_time/MapServer/WmsServer? " ) ,
" 1 " ,
" 1.3.0 " ,
" " ,
" EPSG%3A3857 " ,
" " ,
" image/png "
)
val NOAA _SATELLITE _RADAR _WMS = NOAAWmsTileSource (
" Weather Satellite Imagery " ,
arrayOf ( " https://new.nowcoast.noaa.gov/arcgis/services/nowcoast/sat_meteo_imagery_time/MapServer/WmsServer? " ) ,
" 1,5,9,13,17,21,25 " ,
" 1.3.0 " ,
" " ,
" EPSG%3A3857 " ,
" " ,
" image/png "
)
/ * *
* === === === === === === === === === === === === === === === === === === === === === === === === === === === === === === === ==
* /
private val MAPNIK : OnlineTileSourceBase = TileSourceFactory . MAPNIK
private val USGS _TOPO : OnlineTileSourceBase = TileSourceFactory . USGS _TOPO
private val USGS _SAT : OnlineTileSourceBase = TileSourceFactory . USGS _SAT
2022-08-26 17:00:08 -04:00
val DEFAULT _TILE _SOURCE : OnlineTileSourceBase = TileSourceFactory . DEFAULT _TILE _SOURCE
2022-08-27 08:57:01 -04:00
/ * *
* The order in this list must match that in the arrays . xml under map _styles
* /
2022-08-26 17:00:08 -04:00
val mTileSources : List < ITileSource > =
2022-09-30 16:25:27 -04:00
listOf (
MAPNIK ,
USGS _TOPO ,
USGS _SAT ,
ESRI _IMAGERY ,
NOAA _RADAR
)
2022-08-26 17:00:08 -04:00
fun getTileSource ( aName : String ) : ITileSource {
for ( tileSource : ITileSource in mTileSources ) {
if ( tileSource . name ( ) . equals ( aName ) ) {
return tileSource ;
}
}
throw IllegalArgumentException ( " No such tile source: $aName " )
}
}
}