Web Mapping without a server: an easy setup and deployment
Updated: May 18
In a previous post, I showed the new Internet mapping API from Manifold GIS that allows users to deploy their GIS data on the Internet without the need for a map server or web server. While it is still new, in the experimental stage, and limited, it does illustrate a very important concept: that an Internet map application can be deployed relatively easily with very little software required. And most importantly, a user doesn't have to concern themselves with setting up a web server like IIS or Apache. If you have an IP address, you can publish a web map. As georeference.org user adamw (a developer for Manifold) described:
In 9, we no longer need IIS or anything else to process HTTP requests, we do this ourselves. There's no COM object and no API for two parts of the server side to communicate over, because the server side now consists of just one part, Manifold, all necessary communication happens internally.
The approach used by Manifold makes the application very nimble, and theoretically, should be easy to deliver Internet map products for a person with limited resources (for example, a sole proprietor who runs an environmental inspection company could web enable their projects for existing customers) or limited computing skills. With that in mind, I wanted to see what it would take to publish a web map with Manifold 9 using very limited resources.
Making the web map public
If you recall my previous post, I only implemented the web map using my localhost 127.0.0.1. The map could not be seen by other users on the Internet. Wanting to see a sort of soup to nuts implementation with really limited resources, I borrowed an old laptop from Salisbury University's IT Department, and decided to serve the app from my kitchen using my Xfinity cable modem.
The entire process, including the download, took about 5 minutes (I already had an existing Manifold .map project), and required the following steps:
Enable port forwarding on my home cable modem from my Xfinity iPhone app. This gives me a generic IP address of 10.0.0.100 on port 80.
Once port forwarding was set up, I used ipchicken.com to identify the IP address that Xfinity assigned to my computer (that address will be the IP address that Xfinity exposes to the world, not the 10.0.0.100 that port forwarding gave me).
I downloaded and copied the latest Manifold GIS application (a 34MB .zip file) to my laptop. This is an important point - we aren't talking about a 1GB download, so it's easy for the user to install this for themselves.
Finally, I issued the Manifold Server command in the CMD prompt to publish the application on the Internet.
c:\temp\manifold\manifoldsrv.exe -addr:http://10.0.0.100/ -port:80 -type:http -component:parcels "c:\temp\delgis\delgis_web.map"
That was it.
This video shows the responsiveness of the web site:
while this next video shows how I simply downloaded and ran the Manifold Server application to serve up my map.
As I explained in the video, the original web application I created and show in the video included connections to Esri geodatabases, Postgres, and a geopackage database. These linked connections, while providing a lot of flexibility by connecting to the original sources, did come with a price that slowed down the response. If it is desired to improve the performance, you can move the data to a locally into a Manifold .map project file as I show in this this video.
While the videos illustrate the process I used, the following provides a little more detail into the data, hardware, and software that I experimented with.
For the data, I wanted to provide something moderately challenging, so I grabbed my usual Tompkins County GIS data, that included well over 100,000 points, lines and areas (about 250MB of data).
But to make it even more interesting, I had the data stored in the following formats:
Tompkins County parcels - objects inside the Manifold GIS .map file.
Tompkins County soils - data stored in an Esri geodatabase.
City of Ithaca parks, trees, and waterways - stored in a Postgres database.
Tompkins County school districts in a geopackage .gpkg file.
OpenStreetMap tile server, served by OSM over the Internet.
The laptop I borrowed was pretty limited: an i7 with only 8GB for RAM. I served the data using my Xfinity home cable account. So, this is certainly a low-budget implementation.
With very little effort, I got a web map published that was doing some relatively sophisticated things: serving data connected to different sources (gpkg, Postgres, gdb, native Manifold, OSM). That's a lot of tunneling into different data sources! But, it did come at a price - the rate limiting factor was that Manifold had to wait until the data from OSM was streamed in, and there are some delays when diving directly into a .gdb and even accessing Postgres.
Stay tuned. Using this same low powered laptop and my cable provider, I'm going to experiment with multiple simultaneous users accessing the map, and also show how to improve the response time.