Monday, December 01, 2008
Posted on Monday, December 01, 2008 12:02:10 PM (Mountain Standard Time, UTC-07:00)  Comments [9] | 
Categories: GeoWeb | Javascript

Every project is different, so it makes sense to revisit the available tools and select the right one for the job. Here's the landscape as I see it. But first...

Guiding Principal: Keep it simple!

I think this should be everyone's starting position, but it's important to reiterate the importance of keeping things as simple as possible - both for you as a developer and for the end users. Adding in extra "stuff" is not a good idea. Take a read through "Getting Real" by the 37Signals team. They are all about building less, and keeping things simple. This is a major "Web 2.0" idea - keep a tight reign on features - make them prove their worth before letting them into the app.

With that in mind, here's how I look at things...

1) Can I use Google Maps or Virtual Earth?

Since the general public is most familiar with these systems, it makes sense to build on them if you can. Sure there are licensing/advertising issues, but that's to be expected - there is no free lunch when it comes to high-resolution global data sets.

The thing I look at next is data - can the problem be solved with push-pins? If so, we'd write custom data services against a SQL table with Lat/Lon columns. This is blazing fast, and a great solution if it works for your problem.

For non-point data, I'd see if we are talking about lots of features or just a few at a time. If it's just a few at a time, we can send them as geometry (GeoJSON etc) otherwise we'll need a rendering engine to create images, and I'd look at using ArcGIS Server (9.3!) or GeoServer (which incidentally now has support for SQL Server 2008). You can create tile caches, or (with Google) dynamically render a layer. Since the UI and server calls are all under your control, the sky is the limit in terms of what you can do.

2) Can I use OpenLayers?

Even if you are using the ESRI platform, OpenLayers is still a compelling front-end. It can natively consume other WMS/WMS Cache services, GeoRSS, GeoJSON, and a whole host of other things. It has vector editing tools, and support for WFS-T if you have a back-end server that speaks that dialect. It is also open source, has a mountain of unit tests, and is pretty easy to develop with. I'd expect to see someone write extensions for this that can consume layers and features from the ESRI REST API.

3) Can I use the ESRI Javascript API?

If you don't need to pull in non-ESRI external data, then the ESRI Javascript API is pretty compelling. The ArcGIS Online tile caches make for a good starting point, and the map control itself is very nice to work with. To do anything complex, you'll need to get serious with the Dojo Toolkit, but that's worth it regardless of the map canvas you choose. The REST back-end is pretty smooth for simple apps, and when things get more complex, you can always roll your own services (you can read more about that here.)

4) Must I use the WebADF?

Although 9.3 has led to some performance increases, the API is still a huge maze. I think that the breadth of knowledge required to get started with the javascript options often scare off developers. From our experience, while the initial learning curve for the javascript options may seem higher, the effort of developing and debugging even a moderately complex WebADF application vastly exceeds learning  javascript, Dojo/jQuery/ExtJs/YUI, the zen of REST, miscellaneous "HTTP Goodness" and JSON Web Services.

Developing complex sites any any platform is complex, and I'd argue that at least with the javascript options you can "see" everything that's going on (although this has *improved* with 9.3), and have much more control over the UI and service tiers.  Some may disagree with me on that, but that's how I see it. I'm sure you can build a high-performance, user friendly, rock-solid application on the WebADF, but I have not seen such a thing (send Urls if you know of any).

Conclusion...

Keep an open mind, and accept that to build compelling Web 2.0 app, you are going to get some javascript on your shirt. Use some good tooling (Aptana or Visual Studio have reasonable to good javascript support) and it's just not that daunting. Whatever you do, do not pick a technology because it's easier to "get started" with. Look at the longer term, and accept that you'll have to gain some new skills - it's actually pretty fun ;-)

Hey - What about Flash/Flex/Silverlight?

Honestly, I'm just not a Flash/Flex/Silverlight kinda guy - while these technologies can do some compelling things, I'm just not "feeling" it. With the performance increases in Javascript (John Resig compares V8 and TraceMonkey - the "guts" of the newer javascript engines), and the large community of developers working on jQuery, Dojo, YUI, ExtJs and other frameworks, I just don't see a need to graft a client-control into the page. This is not to say you should not do this - if you like it / need it, go for it!

Monday, December 01, 2008 2:18:05 PM (Mountain Standard Time, UTC-07:00)
Dave if you're interested in checking out a Silverlight solution come see our opens source DeepEarth project over at codeplex:
http://codeplex.com/deepearth
Demo site here:
http://deepearth.soulsolutions.com.au
I hope you will agree it is one of the smoothest web based map experiences out there. We're using the MSI (DeepZoom) control and are busily working away added features and supporting many data providers.
I've done a tonne of work on pushpin clustering for performance and visualisation of large datasets and really hope to get a lot more out of Silverlight in the months to come.
John.
Monday, December 01, 2008 2:26:37 PM (Mountain Standard Time, UTC-07:00)
You know Dave I used to agree with you about Flash/Flex/Silverlight but then I started to work on a project where I wanted to put a lot of "live" polygons on a VE/GMaps base map and JS still can't handle more than 500-1000 "objects". I don't really see change coming fast enough in the JS space to accommodate this and Flash/Flex eats these kind of problems for lunch. I know there is a size of data transmission issue but that would be common to both platforms.

In terms of JS libaries, it is ALL ABOUT Jquery! Love using, love the community, and really enjoying it.

Finally, I definitely agree with you about the order of looking at solutions except I might add geoserver/featureserver/mapserver in between 1 and 2. OpenLayers also interacts great with these mapping platforms and these platforms are much easier to install and manage than AGS Server. I would return to Server if those other platforms can't meet your needs.
Monday, December 01, 2008 2:40:44 PM (Mountain Standard Time, UTC-07:00)
@John - DeepEarth is pretty sweet! I've also see a DeepZoom demo from ESRI, and while it's smooth, I guess I'm more of a pragmatist - unless you need streaming video on moving elements and lots of vectors, I'm not sold on how Flex/Sliverlight improves the actual usability of the app. That said, it's sexy as hell! ;-)

@Steve - exactly - there are some situations where you need the powerful vector capabilities of Flex/Silverlight. However, I think these are quite rare, so we have not jumped into that technology at this time. I would agree on GeoServer/FeatureServer/MapServer, except this article was more focused on the "canvas" side of things rather than the back end.

Cheers!

Dave


Monday, December 01, 2008 5:54:35 PM (Mountain Standard Time, UTC-07:00)
I'm impressed with the rapidity that people are building very awesome silverlight applications. That said, I'm with you on the traditional web technologies. For 99% of what you need to do, an OpenLayers type application will work. The problem i think is that working with these tools is kind of obtuse. I'm working on an open source project that's a .Net mapping framework. It attempts to help easily do that 99%, and does things like generate tiles for google maps/OpenLayers and create KML.

http://code.google.com/p/cumberland/

Any help is welcome
Monday, December 01, 2008 11:03:53 PM (Mountain Standard Time, UTC-07:00)
On the topic of Flash/Silverlight... code speed may not be the final issue in what makes a good GIS client.

Fast drawing (http://thunderheadxpler.blogspot.com/2007/11/10000-markers.html), binary data support, and cross-domain POSTs all come to mind.
Tuesday, December 02, 2008 11:43:21 PM (Mountain Standard Time, UTC-07:00)
To point 3 please check out Openlayers 2.6! It works with the REST API version 1.0 and for further information look at a posted message at http://www.nabble.com/Samples-using-new-ArcGIS-JavaScript-API-in-OpenLayers-td19164779.html#a19164779

Frank
Frank
Wednesday, December 03, 2008 8:00:36 AM (Mountain Standard Time, UTC-07:00)
Nice post at right time. As you said Web ADF learning curve is higher and also requires basic understanding of ArcObjects to some extent, those who are from pure web development background Web ADF is really pain otherwise, for traditional GIS developers it certainly helps. One thing which I would say is integration with MOSS using Web ADF is cool feature,which is not available with other API's. But personally I vote for Flex API, pretty interesting to work with and gives rich UI (ex Boston City Map), though they have limited functionalities as of now. I dont work with JS/Google Map API hence no comments on this. As I grow with ESRI products REST API is damn good and satisfies client with rich look and feel,as long as you dont require complex GIS functionalities

Cheers



Tuesday, December 09, 2008 8:47:11 AM (Mountain Standard Time, UTC-07:00)

Dave,

The most User-friendly WebADF application I've seen so far is the one we've built (I know, I'm biased). Still in development, but you can see what we're going for. Very heavy on the Ext-JS.

http://gis.nrgsteward.com
Ian Hogan
Friday, December 12, 2008 8:46:06 PM (Mountain Standard Time, UTC-07:00)
Anyone who cares to, please take a look at www.parcelatlas.com. This is built using MapDotNet UX, Silverlight and SQL 08. MapDotNet supports VE, Google Maps, OpenLayers, WMS, and easily supports other map sources.

If you're a .NET developer, it is a much simpler approach than anything in javascript.
Comments are closed.