Create WMS Maps When Internet Access Is Intermittent
Reading data from WMS servers requires Internet access. However, once you read data from a server, you can save the data as a MAT or GeoTIFF file. Then, you can load the data without reading it again from the server. Saving WMS data to files is useful when you have intermittent Internet access, or when you want to share data with someone without Internet access.
This example shows how to create a WMS map for an area around Boston. The behavior of the example depends on whether you have Internet access, but the resulting map is the same.
Throughout the example, specify whether you have Internet access by using the logical scalar useInternet
.
If
useInternet
istrue
, read data from the WMS server and update the saved files.If
useInternet
isfalse
, read data from the saved files.
useInternet = false;
If you use this example as a model to create your own WMS maps, you must create the saved files the first time you run the example by setting useInternet
to true
.
Search the WMS Database for basemap layers from the USGS National Map [1]. Refine the search to find a layer containing only orthoimagery. This step does not require Internet access, because the WMS Database is installed with Mapping Toolbox™.
bmapLayers = wmsfind("basemap.nationalmap","SearchFields","ServerURL"); usgsImageryLayer = refine(bmapLayers,"USGSImageryOnly","SearchFields","ServerURL");
Synchronize the layer with the server. The wmsupdate
function adds an abstract, the attribute and style information, and the coordinate reference system information to the layer.
If
useInternet
istrue
, synchronize the layer with the server. Save the layer to a MAT file.If
useInternet
isfalse
, load the MAT file.
if useInternet usgsImageryLayer = wmsupdate(usgsImageryLayer); save("usgsImageryLayer.mat","usgsImageryLayer") else load usgsImageryLayer.mat end
Specify the geographic limits and the image size. For this example, specify the limits for a region around Boston and a square image with a side length of 750 pixels.
latlim = [42.3453 42.3711]; lonlim = [-71.099 -71.0454]; s = 750;
Read the image from the server.
If
useInternet
istrue
, then read the map as an array and aGeographicCellsReference
object. Save the array and reference object to a GeoTIFF file.If
useInternet
isfalse
, then read the GeoTIFF file.
if useInternet [A,R] = wmsread(usgsImageryLayer,"Latlim",latlim,"Lonlim",lonlim, ... "ImageHeight",s,"ImageWidth",s); geotiffwrite("usgsImageryLayer.tif",A,R) else [A,R] = readgeoraster("usgsImageryLayer.tif"); end
Create a map with appropriate latitude and longitude limits for the data. Display the map.
figure usamap(A,R) geoshow(A,R)
[1] Data available from U.S. Geological Survey, National Geospatial Program.