Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

I just wanted to ask an advice from the open source GIS gurus on a recommended stack to use for my envisioned project, as I do not fully understand the limits of the possible with most packages. I know I can do what I want using ESRI's various packages, but I want cheaper and open for the world to see. I am confident I can take on any challenge and learn pieces well enough to make a project happen, I just want to avoid going down the wrong path in the first place.

My site vision: In terms of UI, a NON-GIS looking site! Something more along the lines of whereis.com with everything (or almost everything) being done on boxes hovering above a base map. The specifics are not important now, just emphasizing no GIS-layers with tick boxes in a separate pane, etc. In terms of user interaction, registered users can create features (like drinking fountain locations, walking paths, etc) on top of the base map, and edit their own features. If possible, edit ONLY their own features that they created. A collaborative map, really.

I am still mostly in research mode, playing around with various packages but only for the sake of general familiarization and not real testing (which would require learning them in detail first!). PostGIS definitely seems like the right way to go as the underlying DB(s), with Geoserver/Mapserver as most likely middleware. Openlayers is almost definitely going to be the slippy map, as I am already comfortable with it and know its power.

So that brings me to two main issues requiring the bulk of advice:

1) What is the best top layer UI for a site like this? Is it a customized instance of Django (or even Django-CMS), or simply a pieced together instance of GeoExt or other library (not sure if you can make a login/registration/full UI with it), a different CMS/framework (no, not drupal or anything that limiting!), or something totally different?

2) Is it even possible to have registered site users edit just their own features? I want to avoid the mass “graffiti” places like OSM and other collaborative projects experience. It seems from my reading and advice previously that Geoserver cannot have feature-level user authentication. Can Mapserver? Heck, I don't even know if a site's user population (from a CMS, or framework) can even directly link to geoserver/mapserver... If such a concept is not possible with open source solutions, is there another way to achieve that goal? Have authenticated users edit a non-published version of the main feature layer (so as not to mess up the original) and automatically merge it to the published version every 24 hours while maintaining a daily backup of the original? Sort of lost on how to achieve this intent.

And yes, I've looked at GeoNode too, but I only want one overall map (keep it simple) and its UI is either not interactive enough (before going into GeoExplorer) or too GIS-like in GeoExplorer. Seems like too canned a solution for this project.

Sorry to be so open ended here and vague, but I'm hoping to be able to start down a path in which the above is possible and not run into the wall several months from now, just to have to start all over again because path #1 never had that functionality from the start! Thanks so much and I am excited to get into this realm of open source GIS!

Edit: One of the best examples I can find is http://www.gpsies.com I know this uses leaflet, but not sure the underlying framework and database. Users can create/upload their own features, but not edit others'.

share|improve this question
5  
The bit about OpenStreetMap graffiti is probably a bit misguided; OSM has occasional vandalism but it's the exception, not the norm. Per-user permissions have the obvious flaw that most users are transient and thus you'll have unfinished or junk data, with no way for others to complete or remove it. –  tmcw Jun 26 '12 at 17:20
    
That is a very valid point, and one I will keep in mind. With proper back-up processes in place, a wide open model could be the most rewarding. I'm so far from even developing at this point, I have lots of room to learn and grow ideas. Thanks! –  Jeremy Jun 29 '12 at 3:07

4 Answers 4

up vote 7 down vote accepted
+50

Since I am building something somewhat similar right now, I am going to tell you how I am doing it and you can choose to change whatever you want from it for another piece.

Django (with GeoDjango) is pretty good for this as a basic framework for python (again, if that is your thing, you could do this in another language).

My approach for user-level edits is similar to what CaptDragon described. I am using the django authentication framework. For this project, my APIs are being created using Django's Tasty Pie which already has a framework that allows you create proper RESTful APIs with authentication taken in consideration quite easily.

My Mapserver (or Geoserver or whatever you choose to use) are never exposed directly to the outside world (only the local server has access to those)... all the tiles get served out using a tile server (geowebcache, tilecache, tilestache whatever).

I don't need to mention Openlayers, since you already picked that. Good choice.

PostgreSQL/PostGIS was another no-brainer. :)

As a javascript library, you can never go wrong with jQuery. If you are going to do allow several edits, you may benefit from having some structure of your javascript objects using something like backbone.js. Take this with a grain of salt. Some people love it - others hate it.

If you don't want your site to look so ugly, do yourself a favor and use a css framework like Bootstrap or Compass or alternative, for $20, just buy one from themeforest or wrapstrap (if you are going to open source it you may want to look at the license if you are going to buy it though). Hooking one of these up take around a day and make a huge difference on how your site looks!

Personally, I have looked at Django-cms (and Pinax) several times and I can never convince myself that it is worth the trouble. I have never regretted that decision yet.

Since you are picking a project that will require various versions of your schema (the more you develop, the more it will change), just use south. Don't even hesitate about it! Seriously.

That is what I would use, but the lovely thing about Open Source is that you can change parts to suit your own needs.

share|improve this answer
    
Thanks for the great info, along with everyone else. This definitely helps narrow my focus as I move forward. –  Jeremy Jun 29 '12 at 2:59
    
Bootstrap looks excellent. Can you point us to any example mapping sites which use it? –  Stephen Lead Jul 22 '12 at 8:21

I'm using an stack similar to Ragi's I'm near the alpha version of my application and at this point it seems that the choices where right. Here is my solution:

At the server:

  • Ubuntu server + apache web server + apache tomcat.
  • Postgresql + postgis as database.
  • Geoserver, (in my case I use it only for rasters).
  • Django Framework + Tastypie. Tastypie serves all the vectors through the API and the users have 'per object' permission.
  • python-gsconfig to control geoserver from python.
  • jasper reports to generate pdfs.
  • pyjasper to control jasper reports from python.
  • High performance geostatistical library for interpolation.

At the client:

  • ExtJs 4 -> That's fantastic, extjs works very well with tastypie and you have many things working out of the box, like windows and tables. I started using it in pure code but nou I use Sencha Architect 2 which helps a lot.
  • OpenLayers -> With two methods inserted one in a extjs store and one in a openlayers layer you have them update each other on data change.
share|improve this answer
    
I'll definitely be researching the tastypie option, looks promising. Very helpful! –  Jeremy Jun 29 '12 at 3:00

Is it even possible to have registered site users edit just their own features?

It appears that this is possible using Cartaro. It is based on Drupal (I know, you said nothing limiting like Drupal, but hear me out!) and it allows for users to only edit their own features, among other options. Here's a screenshot taken from the People page when logged in as an admin, that shows the types of permissions that can be set for users:

Cartaro permissions

Also, Cartaro runs on PostGIS, GeoServer, and OpenLayers, so it potentially could have all that you're looking for.

What is the best top layer UI for a site like this?

I don't know what the "best" top layer is, but it looks like Cartaro could provide what you're looking for since Drupal has many UI options. It looks like Cartaro is early in development (I don't personally know of anyone who's using it), but it has potential.

share|improve this answer
1  
I appreciate the info, I didn't know Cartaro had that capability. For now I'll stick to the basic model the others mentioned (at least from a research/learning perspective), but I may look a little deeper into this CMS. I did give it about an hours worth of time a few months back and was less than impressed initially, but to be fair, I did not give it much chance at the time. –  Jeremy Jun 29 '12 at 3:04

I'm going to address question #2 This is how I get around the issue of allowing users to edit their own records.

I create my own web services RESTFUL or SOAP(your choice) such as UpdateUserRecord(string WKTLocation, string otherArg) which ties into the authentication mechanism of your website.

OpenLayers and PostGIS both read and write Well-Known-Text (WKT) as well as GML and other standard formats but I personally use WKT to pass geometry information back and form from my application, through the web service and into the PostGIS DB.

Also my web methods like UpdateUserRecord can only be called by an authenticated session user. A 401 Unauthorized is returned if anyone else tries to call this web service. In my case I use .NET and FormsAuthentication with the option of authenticating using OpenAuth2 (Google, Facebook, Twitter, etc). This can also be done in PHP, Java, etc.

So you can create web methods that call PostGIS database directly and update or insert records however you want. And that's how I did it.

Then I used GeoServer for the WFS, WMS query abilities and ease of displaying the information on the map where I would supply a UserID if the query called for it.

Hope this helps.

share|improve this answer
    
This did help a lot, alongside multiple takes on the same basic principles. I have a bit more confidence I can make this happen with the right learning focus. Thanks also! –  Jeremy Jun 29 '12 at 3:02

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.