What technologies and skill sets should one who wants to do web GIS development study/acquire?
One skill/technology per answer please.
What technologies and skill sets should one who wants to do web GIS development study/acquire?
One skill/technology per answer please.
I can tell you about my experience, which started as a simple geographer, trying to use GIS products to do spatial analysis.
As I said, I'm a geographer, and from the beginning in college I started working with GIS as a user. After that, I started to research on how to automate tedious tasks I had to do often. That came as passion, and after 3 three years, I'm employed by a multinational software house, that works with many GIS systems and developing custom solutions.
My steps were:
Learn GIS well. Don't start out learning programming without having the fundamental right. Projections and transformations, spatial analysis, differences between the raster and vector model, etc.
Learn the database fundamentals: Introduction to Database Systems,Fundamentals of Database Systems. The two books are a bit different. The first is heavy on theory, the second one takes a more practical approach.
Learn SQL. This is actually a second part to the first. It will help you a great deal if you start to think in a "sqlish" manner. SQL changes from vendor to vendor. I can recommend you with PostgreSQL, which , is the vendor that follows the standard the most. If you need to learn specific dialects, do it later, when you actually need it.
Object Oriented Programming. It seems a challenge, but it's quite easy once you grasp the basics. Choose a easy language to do it. Python is by far the easiest one. Learning Python is an excellent starting point. There are open-source/free Python books, like Dive into Python. After Python, interesting choices are: .NET, Java, and C/C++.
Study programming. Read code, write code. Read geospatial code. Write geospatial code. Study the classic APIs: GEOS, JTS, GDAL, ArcObjects (if you are an ESRI fan - and it's a big plus in the market), etc.
- Take a geospatial problem and write code to solve it. I cannot stress how useful this is. This will make you crazy, but it's a very good way to confirm that you learned the programming side and to make sure your geo-spatial skills are up to date. In my case I wrote a small PostgreSQL application to geocode traffic accidents.
Keep on studying. OGC standards are a nice choice here.
Know your way around databases. Any GIS developer will use them extensively.
Most notably:
Assuming you already have the GIS side of things covered (cartographic principles, etc), I would first take a trip to http://www.w3schools.com/ - Run through the tutorials in HTML, Javascript, XML, etc
Then you have a number of different platforms to choose from.
I am a bit biased towards ESRI, and I would recommend starting off by playing about the APIs
http://resources.arcgis.com/content/web/web-apis
- Running through the concepts/samples gives you a real sense of what you can achieve.
I find downloading the code samples and reverse engineering them to work with your own services (assuming you have an instance of ArcGIS Server, otherwise you can use ESRIs sample servers) is a good way to learn.
There is also plenty of videos, take a look at this years dev conference videos Id recommend An Overview of the ArcGIS APIs for JavaScript, Best Practices for Designing Effective Map Services, Redesigning Desktop Applications for the Web and Using the ArcGIS Server REST API.
Which web platform would you choose? Id ignore looking at the WebADF (Java/NET) as this is going to get phased out.
Who are your clients? what browsers will they be using? Can they install Silverlight or Flash plugins? Do you have any IDEs to develop in? e.g Flex is best in FlashBuilder ($$) but you could also use FlashDevelop which is an open source alternative.
Are you more comfortable with established technologies or emerging technologies?
Weigh up the risks.
- .NET/Java have been around for ages
- Silverlight & Flex are fairly new and there is some debate on if HTML 5 will wipe these platforms out
Both Silverlight and Flex have more interactivity out-of-the box, where as Javascript makes up for this gap by relying on the Dojo.Framework.
The big difference in functionality between Web ADFs and Web APIs is the fact that ArcGIS Web APIs are entirely client-side.
I will leave someone else to give a less-ESRI specific answer, but the obvious choice is to start having a play with the Google Maps API - There are plenty of resources/tutorials for learning this.
Javascript, HTML DOM, CSS, HTTP
If you master these, you can do anything on the web. Adding in nice APIs like SVG will maybe make it easier and your web applications nicer, but IMO you'll never be able to quite get around the four listed above.
Assuming that you managed to sort out your spatial DB and map server [described in other answers here] and brushed up your knowledge of HTML, CSS and JavaScript you might start tinkering with client libraries that will consume and display map components inside user's web browser.
OpenLayers seems to be by far the most referenced and used library. It has pretty good documentation and examples, and you can find some tutorials, for example here. BostonGIS pages will be useful for you here as well, not only for OpenLayers stuff.
Depending on your knowledge / willingness to learn Python MapFish is very graceful solution as well. Or you can dive into GeoDjango, however I cannot comment much on this solution myself.
Alternatively you could look at ther OSGeo web mapping solutions, turn to Flash, or use something commercial like ESRI Web APIs.
I agree with Adam that spatial DB and SQL should be a starting point.
After that it might be worth looking at the second tier of your future web geostack. You will need something to act as a bridge 'serving' your data from spatial DB to the client in your users' browser.
Make sure you understand WFS and WMS concepts.
Install and start playing locally with your own server. Two well known projects embraced by Open Source Geospatial Foundation are GeoServer and MapServer. QGIS mapserver might be worth a look as well. ArcGIS server would be [costly!] commercial equivalent here.
Once you sort out this part you might start playing with client libraries.
Mapnik or any other map rendering tool for creating map tiles.
Almost any GIS web developer would need to use map rendering tools, or at least understand the basic concepts of layers and tiles.
Know your server OS, your web server (IIS, Apache, whatever) and how to secure your stuff - even if someone is doing it all for you.
You can work through my course (https://www.e-education.psu.edu/geog585/) which (I think) gives a good introduction and should get you up and running.
I can't emphasize George's second to the last comment enough. Pick a geospatial and/or Web problem that interests you and learn about the required technologies as you solve it.
If you take the time to become proficient in all of the areas listed above, it will be forever before you actually start building a project that scratches your itch.
I would suggest starting out with building an app using OpenLayers to build an app maps data from some existing data services. You could then move on to creating your own data sources or services. If you stick with the FLOSS technologies, you will be able to build and use your apps anywhere without license costs an issues.