A GeoNode primer.
Garner, Tyler
GeoNode is a web-based extendable platform for the management and publication of geospatial data. It brings together mature and stable open-source software projects under a consistent and easy-to-use interface allowing users, with little training, to quickly and easily share data and create interactive maps. This talk will be a high-level overview, suitable for new users, of the application's functionality including examples of the creative ways organizations are using GeoNode. This talk will also cover new functionality being added in the 2.1 release and the status of that release.
 All right, so let's go ahead and get started. My name is Tyler Garner. This is a GeoNode primer, a high-level overview of the GeoNode application, which is a web application for creating and sharing geospatial data and maps. Again, my name is Tyler. I'm a web developer and geospatial analyst at Nobles NSP, go by Garner TV on the internet, most internet sites, and I'm a committer on the GeoNode project. So GeoNode's primary purpose is to reduce barriers that exist between creating, publishing, cataloging, and using geospatial data. And I could kind of talk to GeoNode, but I thought it'd be better if I start off with a high-level demo just so you can see what all GeoNode is and what it does. So this is demo.geoNode.org. This is a site that we keep up with or up to date with the latest stable version of GeoNode. So if you download GeoNode, this is what you get just out of the box, essentially. Here you can see when you first come to the application, you have a list of the latest layers, the latest maps. Every first class object in GeoNode has a layer or a list view. So here's the layers list view. And these are all the layers that are stored within the application. Users can upload new layers just by going to the Upload Layers tab and dragging and dropping their geospatial data. So each layer also has what's called a detail view. And so if you click on any of those layers from this list view, you will get this detail view. The detail view provides a map of the layer. But also you can take some actions on it. You can download the layer in all these different formats. So you have tiles. You can view it in Google Earth. You can download a KML, GeoJSON, et cetera, and that essentially replicates GeoServer writes of. Any format you can get out of GeoServer, essentially we just provide the link here in GeoNode shape file and whatnot as well. Also, you can download the metadata straight from this page. So typically I'd work with a TC211 format. But again, some desktop applications, working with the metadata is a little bit more complicated than in a web environment. So in traditional workflows, you'd have your desktop application where you'd work with your data. You'd have your cataloging system where you'd work with your metadata. And that kind of workflow has kind of been improved a little bit in more recent desktop applications. But from this web environment, you simply hit just Edit Metadata. And then you have kind of like a high level view to actually go through and manage your metadata. So it's much more kind of intuitive and streamlined than traditional geospatial desktop applications. And this is stuff that's really easy to do on the web, but could be a little bit more complicated on desktop environment. So the Layer Detail page also has just some generic information about the layer. So a title, the abstract, if it's provided, that comes from the metadata, the publication date. We also store all the attributes about the layer. So right now, you can see that there's nothing in there. But if this was numeric data, they'd actually have those statistics calculated. So it had the range, the average, the median, and the standard deviation. We optionally expose a Share tab so that you can share this layer page on Google+, Facebook, or Twitter. You can also disable this, which I see a lot of implementations doing. We have a rating functionality. So this kind of provides your users with a way to provide some feedback to the actual layer owner or maintainer about maybe the quality of the data. And then the average here is just the average of all the ratings that the layer has received. Finally, we also maintain a comment section for each layer, each map, and each document. So just to provide another way for your users to kind of have a dialogue with the layer owner. And this has been really successful for, usually, when I see people using this as disaster response geonodes where different organizations are working within the same infrastructure. And it's not always clear who's doing what or where the data came from or accuracy issues with the data or something like that. So this kind of functionality can become helpful there. Down below, we show the legend for the layer. We get that directly from GeoServer by default. In the latest geonode, you can actually disable GeoServer completely, but all this stuff will still work just with internal Django geospatial logic. Here you see a list of all the maps that are using the layer. So you can quickly kind of go from a layer to see if there's any maps that you may find interesting that are already using it. You can create a new map from the layer and also modify the permissions and the style all from this one page. And the best thing about geonode and Django, which is the underlying web framework in general, is all this stuff is completely extensible and completely overriding. So you can override just portions of these templates or the entire page itself and have a completely custom look and feel to your geonode, which I'll show here in a little while. That's about it for the layer detail page. We'll open a new map with this layer. So when I click that button, this just goes to the map viewer and then adds that one layer in. That's the only layer. Let me see if I have one already. No, this one's take one second. Here we go. So this is what the view will look like when it loads. It looks very similar to the traditional geospatial exploitation tools. You have essentially a table of contents on the left with some tools up here on the top. This is using a technology called GeoExplorer, which has a lot of interesting capabilities and powerful capabilities just right out of the box. For example, you can print your geospatial data and you can customize these printing templates as well to have, for instance, your organization's logo. But here you'll see just the PDF of what I have on the view. But you can add your title to it, your logo, additional information that you want to have. Also, you can add external layers to this or any other layer that's already in GeoNode. So these are all the layers that are currently represented in this GeoNode. And I have access directly to them right here from the web map. I can also edit the features directly here on the web map. So this is kind of like in traditional desktop environments, multi-user editing. You have to invest a lot in your geospatial infrastructure a lot of times. It has really complicated like SDE deployments and stuff like that. But again, this is something that's really made trivial in a web application. So you can just click here, edit directly. And it doesn't matter how many users you have working with this data really at any time. So I'm not going to save that. But another cool functionality is the ability to query this. So I'll say I want to query it by geospatial extent. I zoom into here. And then it should just have the single feature. I hit query. The single feature that intersects the current viewport of the web map. And like the rest of GeoNode, this whole experience is really completely customizable as well. Like I said, you have to know a little bit about the GeoExplorer program in order to know how to customize this. But it is completely customizable. And you can add additional, more complex logic into it. And there's also, I believe, some functionalities that we're not using that are also available in GeoExplorer. I think actually there is a style editor here. It's where you can edit the style directly from within this experience. Instead of having to do like an SLD or something like that, you just go in here and add these higher level rules that will actually change the style of your layers. So next is the Maps View. So these are all the saved maps within the application. Again, traditionally just a collection of layers. All it is, each one of these maps also has a detail view very similar to the Layer View. You can download the map, edit the metadata for the map, set permission. So it has all the same permissions as layers do in GeoNode. But overall, a very consistent look and feel between the rest of the application and consistent functionality. The ratings and the comments still apply here as well. Next, we also allow users to upload and store geospatial or non-geospatial documents. So this could be PDFs or PNGs, pictures, Excel files, stuff like that that may still be interesting for your users or maybe like a PDF that you use to actually create a geospatial layer. You can upload that PDF in here. And then you can actually link the PDF to the geospatial layer. And so then on the Layer Detail page, you would see that this document is related to this layer. And I'm not going to actually upload a document now, but you understand. So this is really helpful, again, for disaster response type situations where you have a lot of organizations producing PDF maps. And you may or may not have access to the actual data. So this is just another way to have everything in the same architecture and same infrastructure. And again, it's a first class object in GeoNode, so it automatically has all the same permissions and all the same functionality that all the normal layers and maps and other objects in GeoNode have. All these list views have some filters, so you can spatially filter everything. Of course, not the documents, but you can also filter by categories, the date and keywords. And you can also sort them based on just common sorting, American, whatnot. Finally, there's a list of all the people that are currently within this GeoNode instance. And so the cool thing about GeoNode is that all these actions that occur in here are all stored. And so you can get an activity feed of anybody. Let me see. Admin's typically the most active user. I'll just type in admin. And then I can look at all the activities that the admin has done. So here you can see, created an upload a layer, created a map. And it's still just another good way for your users to go through and track what's being done. But it's also just a way to kind of, I don't want to say audit, but keep a good idea of what users are doing in your GeoNode. So that's about it for a basic GeoNode that you get out of the box. Of course, there's some more functionality in there, but that's kind of the major things that you should take away from this. So again, GeoNode enables your users to publish Raster Vector tabular data. You can manage metadata and associated documents all from within this high level web framework. You can search spatial data and spatially search your data so you can filter by the location of your layers or the location of your maps. You can create and collaborate on multi-layer maps with other users. And you can rate all the first class objects as well and add comments to those data sets. Another important aspect of GeoNode is what it allows developers to do. And this is to easily brand and theme the application using just your CSS or we compile CSS from less files. You can override templates to include custom functionality. Again, this is really the power of Django. But GeoNode does a really good job of kind of compartmentalizing different functionality. So you can just extend certain pieces of the application instead of having to overwrite the entire thing. So if you wanted to add a small piece of functionality into the layer detail page, you don't have to recreate everything. You just add that additional code into what's called the template. Another powerful aspect of this is that you have access to functionality from a large ecosystem of pluggable apps and modules. So because it's written in Python, you essentially have access to any Python library that's out there. You can import it into Django and then use it in your GeoNode application. So for things like QGIS or if you want to do some damage assessments using the In a Safe library or even ArcPy or something like that, you could enable that functionality and expose it all through a Django web application. And this is more for our current master branches that we also allow developers to access to GeoNode objects from third-party applications via the API. The two-point overly still had an API, but it wasn't nearly as formalized as it is now. It's much better than the current master branch. Again, so you can develop mobile applications or access these objects through additional external applications. Next, security. All first-class objects have user-enroll-based security. And probably the best thing about this is that GeoServer delegates both authentication and authorization functionality to GeoNode. So as soon as you modify the permission in GeoNode, GeoServer will automatically respect that. So say, for example, you have a layer that you want only one explicit user to be able to see. As soon as you set those permissions, GeoServer will automatically filter that layer out of the Git capabilities for all other users. And then Gitmat request from other users will get a 404. So instead of actually returning the image. So GeoServer delegates all of that to GeoNode. And you have one spot that you have to update those permissions. So it's a really nice ecosystem kind of. And it's definitely very secure. And finally, like everything else, in Django, the security is completely extensible. So you can tap into third-party libraries like Django LDAP to enable LDAP application or authentication. And then you can use Django's remote user authentication for single sign-on. And they're very high-level libraries. So you can even implement your own authentication. It's fairly trivial. And here's just a screenshot of the permissions workflow. From the Layer Detail page, you just click on the Edit Permissions. And here, I don't know if you can see this or not. But here, I'm explicitly giving certain users access to that layer. So next, this is probably important for anyone who may be thinking about deploying a GeoNode, especially in another country that doesn't use English as the primary language. English is the source language for Django, or excuse me, for GeoNode. And it's at 100%, obviously. But next is Korean at 36%. And it just goes down from there. It seems like only Japanese and Spanish are the only other two languages that are localized above 30%. So it's something that we can use a lot of help with on the GeoNode project. We use a tool called TransFX to do all the localization. So we essentially load all of our translatable strings into this application. Users can use this high-level interface to go through and translate them for us. And then we can commit them back into the project and compile them into our localization files. So something that if you have any skill sets in these languages, we'd be appreciative to get some of these numbers up a little bit higher. So next, I just want to talk about some of the technology that GeoNode is built on. Again, we use Django as the web server. GDAL is kind of a low-level geospatial library. And we actually access it through higher-level Python methods. GeoServer, we use to serve up the data once you upload it into GeoNode. Postgres and postgis, we use for the actual GeoNode database. But you can also upload your data directly into a Postgis data store. And that's versus serving it up as a shapefile, which usually isn't recommended for production uses. So as soon as your user's uploaded, you have a Postgis table, GeoServer is serving it up as a WMSWFS, a fairly straightforward workflow. We also use GeoWebCache that's embedded with GeoServer to reduce the number of actual GitMap requests or the processing time for GitMap requests for WMS calls. PyCSW is a built-in CSW functionality in GeoNode. And this next tier is kind of our static file tier, some of the things we use to create the client side, but also to manage the static files on the client side. So the first tier is grunt. We use that for typically operations or tasks that we do like minifying CSS files or minifying JavaScript files stuff like that. We use leaflet for the layer detail page in the current master. The one that I was doing on the demo, the two-point release, still uses open layers. Even in master, we use open layers for our mapping client still. Just because it has all that additional functionality that I was showing in there. So we haven't found a good leaflet or really otherwise mapping library that has all the functionality of our current mapping application GeoExplorer. Next is jQuery, obviously, just for DOM manipulation and stuff like that on the client side. We use Bower to manage all of our client side dependencies. Again, trans effects for our translations and then Travis CI for our continuous integration and building. So I did want to mention, I think it's worth mentioning, why we chose Django. And I wasn't involved in the design process, so this is kind of my best guess at why Django was chosen. First of all, it's because it's a world-class Geospatial web framework. Django, by default, has access to GDAL and Geo's libraries. And so any query you run in Django, if it's on Geospatial data, you automatically have a Geospatial result from it. So when you get a collection of records back, you can get, say, the extent or intersect it with some additional Geospatial information or whatnot. So it's a very high-level Geospatial web framework, but you can quickly develop very powerful Geospatial applications as well. And the cool thing about it is the API, by using these third-party libraries like TastyPy, you get all that functionality out of the box. So if you make a model with Geospatial support, the API already understands that and knows how to do intersections and things like that. So you can build very quick powerful applications with it. The second reason is the Geospatial community already has significant experience with Python itself. Libraries like QGIS, ArcPy, Shapely, the list goes on and on in Python modules out there, Python ports that are already written in Python and that the Geospatial community is already using. Next, Django has a lot of batteries included, right? So things like SQL injection or cross-site request forgery, these types of things are pretty far distracted from the user experience or the developer's experience now. Django also includes a really nice admin section where you can inspect your database, which is a little bit different from most other web frameworks that I've seen, specifically Rails. And what I'm not sure of node includes one out of the box either. Next is extensibility. Like I mentioned before, virtually everything in Django is extensible. And it's extensible at a very high level, right? So then again, another example is the authentication libraries or virtually anything, all the templates, the client-side code and everything else. And finally, it's because I think we're in good company. We have discussed Instagram, Mozilla. These are some major organizations that are deploying web applications using the exact same technology. So that makes you feel a little bit better about working with it. So Junote is built by 33 committers. And at the time I made this, we had about 75 contributors. Here they are, left to right top to bottom, based on the number of contributions we have from them. It's pretty much exclusively built on GitHub. We have some lists and stuff like that that we used to communicate with one another. But everything you would need from the project is on GitHub. We have over 240 Star Gazers, over 200 Forts, 200 issues, over 187 releases on GitHub, and over 8,000 commits on there as well. So anything you need, if you're interested in Junote or want to go through and see what the current release cycle is or how many issues we have, or even file an issue, the link at the bottom, just github.com. So who uses Junote? So this is a non-exhaustive list of some of the organizations that I know about that use Junote. We have GFDRR, which is the global facility for disaster, reduction, and recovery. Army's US Spatial Center, Harvard State Department, Map Story, Open San Diego, Copeco, which is like the FEMA in Honduras, Pacific Disaster Center. This one is Dominican Republic's FEMA equivalent. NOAA, Argonne National Labs, World Food Program, World Bank, Ithaca. And the list goes on and on. You can just Google it, and you'll find different instances of Junotes out there. So I want to give a couple screenshots of some of the more successful Junote deployments that I know about. This is the World Food Programs. Over 370 layers, you can find it at junote.wfp.org. And as you can see, so this is using the same demo site or the same baseline as the demo site that I showed you earlier, but it looks completely different because they've done a really good job of styling it and customizing it to their needs. And so they added some additional client-side functionality, but overall made it look really nice and really slick. Next is Map Story. I think this is one of the ones that when you look at it, you really can't believe it's built on Junote when you first see it. But it is. It has over 1,200 layers. And really, it's claimed to fame as its geospatial and temporal framework. So it allows users to tell stories using geospatial data, right? So you can upload a layer and then walk through time on that layer and show or tell a story with it. So you can show how if you have city streets and a time element on all those streets, you can actually draw them over time and show how the city has expanded or something like that. But they have a lot of really great what they call map stories. And again, it's all built on Junote. Next is the Harvard World Map. And so this one, this is probably the largest Junote deployment that I know about, over 11,000 layers, over 3,900 maps. And then you can find this one at worldmap.harvard.edu. Next is the Nipah None. This is a pilot project for the Department of Energy, done by the Argonne National Lab, over 260 layers. And what I really like about this one is how well the metadata is filled out. So you can see when a deployment has a lot of really well-maintained data, it looks really good. And it's really easy to find geospatial information on there. Some UCs just don't have any of this stuff at all. Finally, GeoShape is an implementation that I worked on on the Rogue project. Our claim to fame is kind of our GeoGit integration in GeoNode. We also use a custom map application. So we replaced the GeoExplorer client side map with a map that abstracts GeoGit operations at a really high level. So when users start interacting with data, they are actually making commits in a GeoGit repository. And then from a high level, they can go back and actually reset the data, revert previous changes. They can synchronize their GeoGit repository with other servers. And then we also have a mobile interface that allows users to do the same thing from an Android device. So next, just wanted to, if you need help with GeoNode, there's GeoNode on FreeNode. We also have two mailing lists, GeoNode users and GeoNode dev. One's for developers. The dev one's for developers. The other one's the users list. GitHub issues is really the place to go if you have an issue or want to track down something that you think may be wrong with it, but don't know. There's a chance that we already know exactly about it. And we're working through it. And docs.geoNode.org is our documentation. And finally, I just wanted to list some instructions on how you get GeoNode. If you're using Ubuntu 12.04, it's just sudo appgit at the GeoNode PPA and then appgit GeoNode essentially. And for all other operating systems, just go to our GitHub page. We have some pretty detailed instructions on the installation of the GeoNode. And we have some pretty detailed instructions on the installation instructions for each of those operating systems. And I think that's the end of my slides. Are there any questions? Sir? I know that for the Rope project, you created a vapor script. Chef scripts, are you going to be back 40 goes over to the Ford and Chilin projects? I've been thinking about it. It would be helpful. I know, Simone, do you guys have some scripts also for deployment for deploying? Yeah, I think there's also some fabric scripts out there for deploying. I'm not sure if any of them have been committed into a repository in the GeoNode organization yet. But I think making the Chef scripts is something I'd really love to do for GeoNode. And I'm hoping I get some time to do it. We'll see. I mean, it would take an hour to write a Chef script that did this at most. So I'd like to do it if I could. Any other questions? Yes, sir? Is there support built in for, I guess, grouping permissions by user groups? Yeah, so in our current master version, we have role-based security as well. So you can group members into a group and then say, like, these are all your analysts or developers or something like that, which is obviously much easier than having to go through and explicitly specify a user, all the users who may have access to a single layer. But yes? But you can also do it on individual user basis? Yeah, either one. So the logic will walk through all of them, ensure that the users have permission either from a group or explicitly, and then continue on the request cycle after that. Any other questions? OK, thank you very much for coming.
 All right, so let's go ahead and get started.  My name is Tyler Garner.  This is a GeoNode primer, a high-level overview  of the GeoNode application, which is a web application  for creating and sharing geospatial data and maps.  Again, my name is Tyler.  I'm a web developer and geospatial analyst at Nobles  NSP, go by Garner TV on the internet, most internet sites,  and I'm a committer on the GeoNode project.  So GeoNode's primary purpose is to reduce barriers that exist  between creating, publishing, cataloging,  and using geospatial data.  And I could kind of talk to GeoNode, but I thought it'd be  better if I start off with a high-level demo just  so you can see what all GeoNode is and what it does.  So this is demo.geoNode.org.  This is a site that we keep up with or up to date  with the latest stable version of GeoNode.  So if you download GeoNode, this is what you get just  out of the box, essentially.  Here you can see when you first come to the application,  you have a list of the latest layers, the latest maps.  Every first class object in GeoNode has a layer or a list view.  So here's the layers list view.  And these are all the layers that are stored  within the application.  Users can upload new layers just by going  to the Upload Layers tab and dragging and dropping  their geospatial data.  So each layer also has what's called a detail view.  And so if you click on any of those layers from this list view,  you will get this detail view.  The detail view provides a map of the layer.  But also you can take some actions on it.  You can download the layer in all these different formats.  So you have tiles.  You can view it in Google Earth.  You can download a KML, GeoJSON, et cetera,  and that essentially replicates GeoServer writes of.  Any format you can get out of GeoServer,  essentially we just provide the link here in GeoNode shape file  and whatnot as well.  Also, you can download the metadata straight from this page.  So typically I'd work with a TC211 format.  But again, some desktop applications,  working with the metadata is a little bit more complicated  than in a web environment.  So in traditional workflows, you'd  have your desktop application where you'd work with your data.  You'd have your cataloging system where you'd  work with your metadata.  And that kind of workflow has kind of been improved  a little bit in more recent desktop applications.  But from this web environment, you simply hit just Edit Metadata.  And then you have kind of like a high level view  to actually go through and manage your metadata.  So it's much more kind of intuitive and streamlined  than traditional geospatial desktop applications.  And this is stuff that's really easy to do on the web,  but could be a little bit more complicated  on desktop environment.  So the Layer Detail page also has just some generic information  about the layer.  So a title, the abstract, if it's provided,  that comes from the metadata, the publication date.  We also store all the attributes about the layer.  So right now, you can see that there's nothing in there.  But if this was numeric data, they'd actually  have those statistics calculated.  So it had the range, the average, the median,  and the standard deviation.  We optionally expose a Share tab so that you can share  this layer page on Google+, Facebook, or Twitter.  You can also disable this, which I see a lot of implementations  doing.  We have a rating functionality.  So this kind of provides your users  with a way to provide some feedback to the actual layer  owner or maintainer about maybe the quality of the data.  And then the average here is just the average of all the ratings  that the layer has received.  Finally, we also maintain a comment section  for each layer, each map, and each document.  So just to provide another way for your users  to kind of have a dialogue with the layer owner.  And this has been really successful for, usually,  when I see people using this as disaster response  geonodes where different organizations are working  within the same infrastructure.  And it's not always clear who's doing what  or where the data came from or accuracy issues with the data  or something like that.  So this kind of functionality can become helpful there.  Down below, we show the legend for the layer.  We get that directly from GeoServer by default.  In the latest geonode, you can actually disable GeoServer  completely, but all this stuff will still  work just with internal Django geospatial logic.  Here you see a list of all the maps that are using the layer.  So you can quickly kind of go from a layer  to see if there's any maps that you may find interesting that  are already using it.  You can create a new map from the layer  and also modify the permissions and the style  all from this one page.  And the best thing about geonode and Django,  which is the underlying web framework in general,  is all this stuff is completely extensible  and completely overriding.  So you can override just portions of these templates  or the entire page itself and have a completely custom look  and feel to your geonode, which I'll show here  in a little while.  That's about it for the layer detail page.  We'll open a new map with this layer.  So when I click that button, this just  goes to the map viewer and then adds that one layer in.  That's the only layer.  Let me see if I have one already.  No, this one's take one second.  Here we go.  So this is what the view will look like when it loads.  It looks very similar to the traditional geospatial  exploitation tools.  You have essentially a table of contents  on the left with some tools up here on the top.  This is using a technology called GeoExplorer, which  has a lot of interesting capabilities  and powerful capabilities just right out of the box.  For example, you can print your geospatial data  and you can customize these printing templates as well  to have, for instance, your organization's logo.  But here you'll see just the PDF of what I have on the view.  But you can add your title to it, your logo,  additional information that you want to have.  Also, you can add external layers to this or any other  layer that's already in GeoNode.  So these are all the layers that are currently represented  in this GeoNode.  And I have access directly to them right here  from the web map.  I can also edit the features directly here on the web map.  So this is kind of like in traditional desktop  environments, multi-user editing.  You have to invest a lot in your geospatial infrastructure  a lot of times.  It has really complicated like SDE deployments and stuff  like that.  But again, this is something that's really made trivial  in a web application.  So you can just click here, edit directly.  And it doesn't matter how many users you have working  with this data really at any time.  So I'm not going to save that.  But another cool functionality is the ability to query this.  So I'll say I want to query it by geospatial extent.  I zoom into here.  And then it should just have the single feature.  I hit query.  The single feature that intersects the current viewport  of the web map.  And like the rest of GeoNode, this whole experience is really  completely customizable as well.  Like I said, you have to know a little bit about the GeoExplorer  program in order to know how to customize this.  But it is completely customizable.  And you can add additional, more complex logic into it.  And there's also, I believe, some functionalities that we're  not using that are also available in GeoExplorer.  I think actually there is a style editor here.  It's where you can edit the style directly from within  this experience.  Instead of having to do like an SLD or something like that,  you just go in here and add these higher level rules that  will actually change the style of your layers.  So next is the Maps View.  So these are all the saved maps within the application.  Again, traditionally just a collection of layers.  All it is, each one of these maps also has a detail view  very similar to the Layer View.  You can download the map, edit the metadata for the map, set  permission.  So it has all the same permissions as layers do in  GeoNode.  But overall, a very consistent look and feel between the  rest of the application and consistent functionality.  The ratings and the comments still apply here as well.  Next, we also allow users to upload and store geospatial  or non-geospatial documents.  So this could be PDFs or PNGs, pictures, Excel files, stuff  like that that may still be interesting for your users or  maybe like a PDF that you use to actually create a  geospatial layer.  You can upload that PDF in here.  And then you can actually link the PDF to the geospatial  layer.  And so then on the Layer Detail page, you would see that  this document is related to this layer.  And I'm not going to actually upload a document now, but  you understand.  So this is really helpful, again, for disaster response  type situations where you have a lot of organizations  producing PDF maps.  And you may or may not have access to the actual data.  So this is just another way to have everything in the same  architecture and same infrastructure.  And again, it's a first class object in GeoNode, so it  automatically has all the same permissions and all the same  functionality that all the normal layers and maps and  other objects in GeoNode have.  All these list views have some filters, so you can  spatially filter everything.  Of course, not the documents, but you can also filter by  categories, the date and keywords.  And you can also sort them based on just common sorting,  American, whatnot.  Finally, there's a list of all the people that are  currently within this GeoNode instance.  And so the cool thing about GeoNode is that all these  actions that occur in here are all stored.  And so you can get an activity feed of anybody.  Let me see.  Admin's typically the most active user.  I'll just type in admin.  And then I can look at all the activities that the admin has  done.  So here you can see, created an upload a layer, created a  map.  And it's still just another good way for your users to go  through and track what's being done.  But it's also just a way to kind of, I don't want to say  audit, but keep a good idea of what users are doing in  your GeoNode.  So that's about it for a basic GeoNode that you get out of  the box.  Of course, there's some more functionality in there, but  that's kind of the major things that you should take  away from this.  So again, GeoNode enables your users to publish Raster  Vector tabular data.  You can manage metadata and associated documents all from  within this high level web framework.  You can search spatial data and spatially search your data so  you can filter by the location of your layers or the location  of your maps.  You can create and collaborate on multi-layer maps with  other users.  And you can rate all the first class objects as well and add  comments to those data sets.  Another important aspect of GeoNode is what it allows  developers to do.  And this is to easily brand and theme the application using  just your CSS or we compile CSS from less files.  You can override templates to include custom functionality.  Again, this is really the power of Django.  But GeoNode does a really good job of kind of compartmentalizing  different functionality.  So you can just extend certain pieces of the application  instead of having to overwrite the entire thing.  So if you wanted to add a small piece of functionality into  the layer detail page, you don't have to recreate  everything.  You just add that additional code into what's called the  template.  Another powerful aspect of this is that you have access to  functionality from a large ecosystem of  pluggable apps and modules.  So because it's written in Python, you essentially have  access to any Python library that's out there.  You can import it into Django and then use it in your  GeoNode application.  So for things like QGIS or if you want to do some damage  assessments using the In a Safe library or even ArcPy or  something like that, you could enable that functionality and  expose it all through a Django web application.  And this is more for our current master branches that we  also allow developers to access to GeoNode objects from  third-party applications via the API.  The two-point overly still had an API, but it wasn't nearly  as formalized as it is now.  It's much better than the current master branch.  Again, so you can develop mobile applications or access  these objects through additional external applications.  Next, security.  All first-class objects have user-enroll-based security.  And probably the best thing about this is that GeoServer  delegates both authentication and authorization  functionality to GeoNode.  So as soon as you modify the permission in GeoNode, GeoServer  will automatically respect that.  So say, for example, you have a layer that you want only one  explicit user to be able to see.  As soon as you set those permissions, GeoServer will  automatically filter that layer out of the Git capabilities  for all other users.  And then Gitmat request from other users will get a 404.  So instead of actually returning the image.  So GeoServer delegates all of that to GeoNode.  And you have one spot that you have to  update those permissions.  So it's a really nice ecosystem kind of.  And it's definitely very secure.  And finally, like everything else, in Django, the  security is completely extensible.  So you can tap into third-party libraries like Django LDAP to  enable LDAP application or authentication.  And then you can use Django's remote user  authentication for single sign-on.  And they're very high-level libraries.  So you can even implement your own authentication.  It's fairly trivial.  And here's just a screenshot of the permissions workflow.  From the Layer Detail page, you just click on the Edit  Permissions.  And here, I don't know if you can see this or not.  But here, I'm explicitly giving certain users access to  that layer.  So next, this is probably important for anyone who may  be thinking about deploying a GeoNode, especially in  another country that doesn't use English as the primary  language.  English is the source language for Django, or excuse me, for  GeoNode.  And it's at 100%, obviously.  But next is Korean at 36%.  And it just goes down from there.  It seems like only Japanese and Spanish are the only other  two languages that are localized above 30%.  So it's something that we can use a lot of help with on the  GeoNode project.  We use a tool called TransFX to do all the localization.  So we essentially load all of our translatable strings into  this application.  Users can use this high-level interface to go through and  translate them for us.  And then we can commit them back into the project and  compile them into our localization files.  So something that if you have any skill sets in these  languages, we'd be appreciative to get some of  these numbers up a little bit higher.  So next, I just want to talk about some of the technology  that GeoNode is built on.  Again, we use Django as the web server.  GDAL is kind of a low-level geospatial library.  And we actually access it through higher-level Python  methods.  GeoServer, we use to serve up the data once you upload it  into GeoNode.  Postgres and postgis, we use for the actual GeoNode database.  But you can also upload your data directly into a  Postgis data store.  And that's versus serving it up as a shapefile, which  usually isn't recommended for production uses.  So as soon as your user's uploaded, you have a Postgis  table, GeoServer is serving it up as a WMSWFS, a fairly  straightforward workflow.  We also use GeoWebCache that's embedded with GeoServer to  reduce the number of actual GitMap requests or the  processing time for GitMap requests for WMS calls.  PyCSW is a built-in CSW functionality in GeoNode.  And this next tier is kind of our static file tier, some of  the things we use to create the client side, but also to  manage the static files on the client side.  So the first tier is grunt.  We use that for typically operations or tasks that we  do like minifying CSS files or minifying JavaScript files  stuff like that.  We use leaflet for the layer detail page in the current  master.  The one that I was doing on the demo, the two-point  release, still uses open layers.  Even in master, we use open layers for our mapping  client still.  Just because it has all that additional functionality that  I was showing in there.  So we haven't found a good leaflet or really otherwise  mapping library that has all the functionality of our  current mapping application GeoExplorer.  Next is jQuery, obviously, just for DOM manipulation and  stuff like that on the client side.  We use Bower to manage all of our client side dependencies.  Again, trans effects for our translations and then Travis  CI for our continuous integration and building.  So I did want to mention, I think it's worth mentioning,  why we chose Django.  And I wasn't involved in the design process, so this is  kind of my best guess at why Django was chosen.  First of all, it's because it's a world-class Geospatial web  framework.  Django, by default, has access to GDAL and Geo's libraries.  And so any query you run in Django, if it's on  Geospatial data, you automatically have a Geospatial  result from it.  So when you get a collection of records back, you can get,  say, the extent or intersect it with some additional  Geospatial information or whatnot.  So it's a very high-level Geospatial web framework,  but you can quickly develop very powerful Geospatial  applications as well.  And the cool thing about it is the API, by using these  third-party libraries like TastyPy, you get all that  functionality out of the box.  So if you make a model with Geospatial support, the API  already understands that and knows how to do intersections  and things like that.  So you can build very quick powerful  applications with it.  The second reason is the Geospatial community already  has significant experience with Python itself.  Libraries like QGIS, ArcPy, Shapely, the list goes on and  on in Python modules out there, Python ports that are  already written in Python and that the Geospatial  community is already using.  Next, Django has a lot of batteries included, right?  So things like SQL injection or cross-site request forgery,  these types of things are pretty far distracted from the  user experience or the developer's experience now.  Django also includes a really nice admin section where you  can inspect your database, which is a little bit  different from most other web frameworks that I've seen,  specifically Rails.  And what I'm not sure of node includes one out of the box  either.  Next is extensibility.  Like I mentioned before, virtually everything in Django  is extensible.  And it's extensible at a very high level, right?  So then again, another example is the authentication  libraries or virtually anything, all the templates, the  client-side code and everything else.  And finally, it's because I think we're in good company.  We have discussed Instagram, Mozilla.  These are some major organizations that are  deploying web applications using the exact same  technology.  So that makes you feel a little bit better about working  with it.  So Junote is built by 33 committers.  And at the time I made this, we had about 75 contributors.  Here they are, left to right top to bottom, based on the  number of contributions we have from them.  It's pretty much exclusively built on GitHub.  We have some lists and stuff like that that we used to  communicate with one another.  But everything you would need from the project is on GitHub.  We have over 240 Star Gazers, over 200 Forts, 200 issues,  over 187 releases on GitHub, and over 8,000 commits on  there as well.  So anything you need, if you're interested in Junote or  want to go through and see what the current release cycle is  or how many issues we have, or even file an issue, the link  at the bottom, just github.com.  So who uses Junote?  So this is a non-exhaustive list of some of the  organizations that I know about that use Junote.  We have GFDRR, which is the global facility for disaster,  reduction, and recovery.  Army's US Spatial Center, Harvard State Department,  Map Story, Open San Diego, Copeco, which is like  the FEMA in Honduras, Pacific Disaster Center.  This one is Dominican Republic's FEMA equivalent.  NOAA, Argonne National Labs, World Food Program, World Bank,  Ithaca.  And the list goes on and on.  You can just Google it, and you'll find different  instances of Junotes out there.  So I want to give a couple screenshots of some of the more  successful Junote deployments that I know about.  This is the World Food Programs.  Over 370 layers, you can find it at junote.wfp.org.  And as you can see, so this is using the same demo site or  the same baseline as the demo site that I showed you  earlier, but it looks completely different because  they've done a really good job of styling it and  customizing it to their needs.  And so they added some additional  client-side functionality, but overall made it look really  nice and really slick.  Next is Map Story.  I think this is one of the ones that when you look at it,  you really can't believe it's built on Junote when you  first see it.  But it is.  It has over 1,200 layers.  And really, it's claimed to fame as its geospatial and  temporal framework.  So it allows users to tell stories using geospatial  data, right?  So you can upload a layer and then walk through time on  that layer and show or tell a story with it.  So you can show how if you have city streets and a time  element on all those streets, you can actually draw them  over time and show how the city has expanded or  something like that.  But they have a lot of really great what they call map  stories.  And again, it's all built on Junote.  Next is the Harvard World Map.  And so this one, this is probably the largest Junote  deployment that I know about, over 11,000 layers, over  3,900 maps.  And then you can find this one at worldmap.harvard.edu.  Next is the Nipah None.  This is a pilot project for the Department of Energy, done  by the Argonne National Lab, over 260 layers.  And what I really like about this one is how well the  metadata is filled out.  So you can see when a deployment has a lot of  really well-maintained data, it looks really good.  And it's really easy to find geospatial information on  there.  Some UCs just don't have any of this stuff at all.  Finally, GeoShape is an implementation that I worked  on on the Rogue project.  Our claim to fame is kind of our GeoGit integration in  GeoNode.  We also use a custom map application.  So we replaced the GeoExplorer client side map with a  map that abstracts GeoGit operations at a really high  level.  So when users start interacting with data, they are  actually making commits in a GeoGit repository.  And then from a high level, they can go back and actually  reset the data, revert previous changes.  They can synchronize their GeoGit repository with other  servers.  And then we also have a mobile interface that allows users  to do the same thing from an Android device.  So next, just wanted to, if you need help with GeoNode,  there's GeoNode on FreeNode.  We also have two mailing lists, GeoNode users and GeoNode  dev.  One's for developers.  The dev one's for developers.  The other one's the users list.  GitHub issues is really the place to go if you have an  issue or want to track down something that you think may  be wrong with it, but don't know.  There's a chance that we already know exactly about it.  And we're working through it.  And docs.geoNode.org is our documentation.  And finally, I just wanted to list some instructions on how  you get GeoNode.  If you're using Ubuntu 12.04, it's just sudo appgit at the  GeoNode PPA and then appgit GeoNode essentially.  And for all other operating systems, just go to our GitHub  page.  We have some pretty detailed instructions on the  installation of the GeoNode.  And we have some pretty detailed instructions on the  installation instructions for each of those  operating systems.  And I think that's the end of my slides.  Are there any questions?  Sir?  I know that for the Rope project, you created a  vapor script.  Chef scripts, are you going to be back 40 goes over to the  Ford and Chilin projects?  I've been thinking about it.  It would be helpful.  I know, Simone, do you guys have some scripts also for  deployment for deploying?  Yeah, I think there's also some fabric scripts out there  for deploying.  I'm not sure if any of them have been committed into a  repository in the GeoNode organization yet.  But I think making the Chef scripts is something I'd  really love to do for GeoNode.  And I'm hoping I get some time to do it.  We'll see.  I mean, it would take an hour to write a Chef script that  did this at most.  So I'd like to do it if I could.  Any other questions?  Yes, sir?  Is there support built in for, I guess, grouping  permissions by user groups?  Yeah, so in our current master version, we have role-based  security as well.  So you can group members into a group and then say, like,  these are all your analysts or developers or something like  that, which is obviously much easier than having to go  through and explicitly specify a user, all the users who may  have access to a single layer.  But yes?  But you can also do it on individual user basis?  Yeah, either one.  So the logic will walk through all of them, ensure that the  users have permission either from a group or explicitly,  and then continue on the request cycle after that.  Any other questions?  OK, thank you very much for coming.
08_Tyler_Garner_720p_0_1583.png 08_Tyler_Garner_720p_1584_1643.png 08_Tyler_Garner_720p_1644_1919.png 08_Tyler_Garner_720p_1920_2123.png 08_Tyler_Garner_720p_2124_4247.png 08_Tyler_Garner_720p_4248_4295.png 08_Tyler_Garner_720p_4296_4439.png 08_Tyler_Garner_720p_4440_4523.png 08_Tyler_Garner_720p_4524_5831.png 08_Tyler_Garner_720p_5832_6491.png 08_Tyler_Garner_720p_6492_6635.png 08_Tyler_Garner_720p_6636_6683.png 08_Tyler_Garner_720p_6684_6743.png 08_Tyler_Garner_720p_6744_6875.png 08_Tyler_Garner_720p_6876_6959.png 08_Tyler_Garner_720p_6960_7439.png 08_Tyler_Garner_720p_7440_7595.png 08_Tyler_Garner_720p_7596_8375.png 08_Tyler_Garner_720p_8376_8783.png 08_Tyler_Garner_720p_8784_8831.png 08_Tyler_Garner_720p_8832_9491.png 08_Tyler_Garner_720p_9492_9731.png 08_Tyler_Garner_720p_9732_9935.png 08_Tyler_Garner_720p_9936_11291.png 08_Tyler_Garner_720p_11292_12935.png 08_Tyler_Garner_720p_12936_13019.png 08_Tyler_Garner_720p_13020_13319.png 08_Tyler_Garner_720p_13320_13619.png 08_Tyler_Garner_720p_13620_13679.png 08_Tyler_Garner_720p_13680_13763.png 08_Tyler_Garner_720p_13764_14531.png 08_Tyler_Garner_720p_14532_14867.png 08_Tyler_Garner_720p_14868_14915.png 08_Tyler_Garner_720p_14916_14999.png 08_Tyler_Garner_720p_15000_16307.png 08_Tyler_Garner_720p_16308_16619.png 08_Tyler_Garner_720p_16620_16679.png 08_Tyler_Garner_720p_16680_17159.png 08_Tyler_Garner_720p_17160_17411.png 08_Tyler_Garner_720p_17412_17879.png 08_Tyler_Garner_720p_17880_17951.png 08_Tyler_Garner_720p_17952_28775.png 08_Tyler_Garner_720p_28776_41567.png 08_Tyler_Garner_720p_41568_44085.png
All right, so let's go ahead and get started. My name is Tyler Garner. This is a GeoNode primer, a high-level overview of the GeoNode application, which is a web application for creating and sharing geospatial data and maps. Again, my name is Tyler. I'm a web developer and geospatial analyst at Nobles NSP, go by Garner TV on the internet, most internet sites, and I'm a committer on the GeoNode project. So GeoNode's primary purpose is to reduce barriers that exist between creating, publishing, cataloging, and using geospatial data. And I could kind of talk to GeoNode, but I thought it'd be better if I start off with a high-level demo just so you can see what all GeoNode is and what it does. So this is demo.geoNode.org. This is a site that we keep up with or up to date with the latest stable version of GeoNode. So if you download GeoNode, this is what you get just out of the box, essentially. Here you can see when you first come to the application, you have a list of the latest layers, the latest maps. Every first class object in GeoNode has a layer or a list view. So here's the layers list view. And these are all the layers that are stored within the application. Users can upload new layers just by going to the Upload Layers tab and dragging and dropping their geospatial data. So each layer also has what's called a detail view. And so if you click on any of those layers from this list view, you will get this detail view. The detail view provides a map of the layer. But also you can take some actions on it. You can download the layer in all these different formats. So you have tiles. You can view it in Google Earth. You can download a KML, GeoJSON, et cetera, and that essentially replicates GeoServer writes of. Any format you can get out of GeoServer, essentially we just provide the link here in GeoNode shape file and whatnot as well. Also, you can download the metadata straight from this page. So typically I'd work with a TC211 format. But again, some desktop applications, working with the metadata is a little bit more complicated than in a web environment. So in traditional workflows, you'd have your desktop application where you'd work with your data. You'd have your cataloging system where you'd work with your metadata. And that kind of workflow has kind of been improved a little bit in more recent desktop applications. But from this web environment, you simply hit just Edit Metadata. And then you have kind of like a high level view to actually go through and manage your metadata. So it's much more kind of intuitive and streamlined than traditional geospatial desktop applications. And this is stuff that's really easy to do on the web, but could be a little bit more complicated on desktop environment. So the Layer Detail page also has just some generic information about the layer. So a title, the abstract, if it's provided, that comes from the metadata, the publication date. We also store all the attributes about the layer. So right now, you can see that there's nothing in there. But if this was numeric data, they'd actually have those statistics calculated. So it had the range, the average, the median, and the standard deviation. We optionally expose a Share tab so that you can share this layer page on Google+, Facebook, or Twitter. You can also disable this, which I see a lot of implementations doing. We have a rating functionality. So this kind of provides your users with a way to provide some feedback to the actual layer owner or maintainer about maybe the quality of the data. And then the average here is just the average of all the ratings that the layer has received. Finally, we also maintain a comment section for each layer, each map, and each document. So just to provide another way for your users to kind of have a dialogue with the layer owner. And this has been really successful for, usually, when I see people using this as disaster response geonodes where different organizations are working within the same infrastructure. And it's not always clear who's doing what or where the data came from or accuracy issues with the data or something like that. So this kind of functionality can become helpful there. Down below, we show the legend for the layer. We get that directly from GeoServer by default. In the latest geonode, you can actually disable GeoServer completely, but all this stuff will still work just with internal Django geospatial logic. Here you see a list of all the maps that are using the layer. So you can quickly kind of go from a layer to see if there's any maps that you may find interesting that are already using it. You can create a new map from the layer and also modify the permissions and the style all from this one page. And the best thing about geonode and Django, which is the underlying web framework in general, is all this stuff is completely extensible and completely overriding. So you can override just portions of these templates or the entire page itself and have a completely custom look and feel to your geonode, which I'll show here in a little while. That's about it for the layer detail page. We'll open a new map with this layer. So when I click that button, this just goes to the map viewer and then adds that one layer in. That's the only layer. Let me see if I have one already. No, this one's take one second. Here we go. So this is what the view will look like when it loads. It looks very similar to the traditional geospatial exploitation tools. You have essentially a table of contents on the left with some tools up here on the top. This is using a technology called GeoExplorer, which has a lot of interesting capabilities and powerful capabilities just right out of the box. For example, you can print your geospatial data and you can customize these printing templates as well to have, for instance, your organization's logo. But here you'll see just the PDF of what I have on the view. But you can add your title to it, your logo, additional information that you want to have. Also, you can add external layers to this or any other layer that's already in GeoNode. So these are all the layers that are currently represented in this GeoNode. And I have access directly to them right here from the web map. I can also edit the features directly here on the web map. So this is kind of like in traditional desktop environments, multi-user editing. You have to invest a lot in your geospatial infrastructure a lot of times. It has really complicated like SDE deployments and stuff like that. But again, this is something that's really made trivial in a web application. So you can just click here, edit directly. And it doesn't matter how many users you have working with this data really at any time. So I'm not going to save that. But another cool functionality is the ability to query this. So I'll say I want to query it by geospatial extent. I zoom into here. And then it should just have the single feature. I hit query. The single feature that intersects the current viewport of the web map. And like the rest of GeoNode, this whole experience is really completely customizable as well. Like I said, you have to know a little bit about the GeoExplorer program in order to know how to customize this. But it is completely customizable. And you can add additional, more complex logic into it. And there's also, I believe, some functionalities that we're not using that are also available in GeoExplorer. I think actually there is a style editor here. It's where you can edit the style directly from within this experience. Instead of having to do like an SLD or something like that, you just go in here and add these higher level rules that will actually change the style of your layers. So next is the Maps View. So these are all the saved maps within the application. Again, traditionally just a collection of layers. All it is, each one of these maps also has a detail view very similar to the Layer View. You can download the map, edit the metadata for the map, set permission. So it has all the same permissions as layers do in GeoNode. But overall, a very consistent look and feel between the rest of the application and consistent functionality. The ratings and the comments still apply here as well. Next, we also allow users to upload and store geospatial or non-geospatial documents. So this could be PDFs or PNGs, pictures, Excel files, stuff like that that may still be interesting for your users or maybe like a PDF that you use to actually create a geospatial layer. You can upload that PDF in here. And then you can actually link the PDF to the geospatial layer. And so then on the Layer Detail page, you would see that this document is related to this layer. And I'm not going to actually upload a document now, but you understand. So this is really helpful, again, for disaster response type situations where you have a lot of organizations producing PDF maps. And you may or may not have access to the actual data. So this is just another way to have everything in the same architecture and same infrastructure. And again, it's a first class object in GeoNode, so it automatically has all the same permissions and all the same functionality that all the normal layers and maps and other objects in GeoNode have. All these list views have some filters, so you can spatially filter everything. Of course, not the documents, but you can also filter by categories, the date and keywords. And you can also sort them based on just common sorting, American, whatnot. Finally, there's a list of all the people that are currently within this GeoNode instance. And so the cool thing about GeoNode is that all these actions that occur in here are all stored. And so you can get an activity feed of anybody. Let me see. Admin's typically the most active user. I'll just type in admin. And then I can look at all the activities that the admin has done. So here you can see, created an upload a layer, created a map. And it's still just another good way for your users to go through and track what's being done. But it's also just a way to kind of, I don't want to say audit, but keep a good idea of what users are doing in your GeoNode. So that's about it for a basic GeoNode that you get out of the box. Of course, there's some more functionality in there, but that's kind of the major things that you should take away from this. So again, GeoNode enables your users to publish Raster Vector tabular data. You can manage metadata and associated documents all from within this high level web framework. You can search spatial data and spatially search your data so you can filter by the location of your layers or the location of your maps. You can create and collaborate on multi-layer maps with other users. And you can rate all the first class objects as well and add comments to those data sets. Another important aspect of GeoNode is what it allows developers to do. And this is to easily brand and theme the application using just your CSS or we compile CSS from less files. You can override templates to include custom functionality. Again, this is really the power of Django. But GeoNode does a really good job of kind of compartmentalizing different functionality. So you can just extend certain pieces of the application instead of having to overwrite the entire thing. So if you wanted to add a small piece of functionality into the layer detail page, you don't have to recreate everything. You just add that additional code into what's called the template. Another powerful aspect of this is that you have access to functionality from a large ecosystem of pluggable apps and modules. So because it's written in Python, you essentially have access to any Python library that's out there. You can import it into Django and then use it in your GeoNode application. So for things like QGIS or if you want to do some damage assessments using the In a Safe library or even ArcPy or something like that, you could enable that functionality and expose it all through a Django web application. And this is more for our current master branches that we also allow developers to access to GeoNode objects from third-party applications via the API. The two-point overly still had an API, but it wasn't nearly as formalized as it is now. It's much better than the current master branch. Again, so you can develop mobile applications or access these objects through additional external applications. Next, security. All first-class objects have user-enroll-based security. And probably the best thing about this is that GeoServer delegates both authentication and authorization functionality to GeoNode. So as soon as you modify the permission in GeoNode, GeoServer will automatically respect that. So say, for example, you have a layer that you want only one explicit user to be able to see. As soon as you set those permissions, GeoServer will automatically filter that layer out of the Git capabilities for all other users. And then Gitmat request from other users will get a 404. So instead of actually returning the image. So GeoServer delegates all of that to GeoNode. And you have one spot that you have to update those permissions. So it's a really nice ecosystem kind of. And it's definitely very secure. And finally, like everything else, in Django, the security is completely extensible. So you can tap into third-party libraries like Django LDAP to enable LDAP application or authentication. And then you can use Django's remote user authentication for single sign-on. And they're very high-level libraries. So you can even implement your own authentication. It's fairly trivial. And here's just a screenshot of the permissions workflow. From the Layer Detail page, you just click on the Edit Permissions. And here, I don't know if you can see this or not. But here, I'm explicitly giving certain users access to that layer. So next, this is probably important for anyone who may be thinking about deploying a GeoNode, especially in another country that doesn't use English as the primary language. English is the source language for Django, or excuse me, for GeoNode. And it's at 100%, obviously. But next is Korean at 36%. And it just goes down from there. It seems like only Japanese and Spanish are the only other two languages that are localized above 30%. So it's something that we can use a lot of help with on the GeoNode project. We use a tool called TransFX to do all the localization. So we essentially load all of our translatable strings into this application. Users can use this high-level interface to go through and translate them for us. And then we can commit them back into the project and compile them into our localization files. So something that if you have any skill sets in these languages, we'd be appreciative to get some of these numbers up a little bit higher. So next, I just want to talk about some of the technology that GeoNode is built on. Again, we use Django as the web server. GDAL is kind of a low-level geospatial library. And we actually access it through higher-level Python methods. GeoServer, we use to serve up the data once you upload it into GeoNode. Postgres and postgis, we use for the actual GeoNode database. But you can also upload your data directly into a Postgis data store. And that's versus serving it up as a shapefile, which usually isn't recommended for production uses. So as soon as your user's uploaded, you have a Postgis table, GeoServer is serving it up as a WMSWFS, a fairly straightforward workflow. We also use GeoWebCache that's embedded with GeoServer to reduce the number of actual GitMap requests or the processing time for GitMap requests for WMS calls. PyCSW is a built-in CSW functionality in GeoNode. And this next tier is kind of our static file tier, some of the things we use to create the client side, but also to manage the static files on the client side. So the first tier is grunt. We use that for typically operations or tasks that we do like minifying CSS files or minifying JavaScript files stuff like that. We use leaflet for the layer detail page in the current master. The one that I was doing on the demo, the two-point release, still uses open layers. Even in master, we use open layers for our mapping client still. Just because it has all that additional functionality that I was showing in there. So we haven't found a good leaflet or really otherwise mapping library that has all the functionality of our current mapping application GeoExplorer. Next is jQuery, obviously, just for DOM manipulation and stuff like that on the client side. We use Bower to manage all of our client side dependencies. Again, trans effects for our translations and then Travis CI for our continuous integration and building. So I did want to mention, I think it's worth mentioning, why we chose Django. And I wasn't involved in the design process, so this is kind of my best guess at why Django was chosen. First of all, it's because it's a world-class Geospatial web framework. Django, by default, has access to GDAL and Geo's libraries. And so any query you run in Django, if it's on Geospatial data, you automatically have a Geospatial result from it. So when you get a collection of records back, you can get, say, the extent or intersect it with some additional Geospatial information or whatnot. So it's a very high-level Geospatial web framework, but you can quickly develop very powerful Geospatial applications as well. And the cool thing about it is the API, by using these third-party libraries like TastyPy, you get all that functionality out of the box. So if you make a model with Geospatial support, the API already understands that and knows how to do intersections and things like that. So you can build very quick powerful applications with it. The second reason is the Geospatial community already has significant experience with Python itself. Libraries like QGIS, ArcPy, Shapely, the list goes on and on in Python modules out there, Python ports that are already written in Python and that the Geospatial community is already using. Next, Django has a lot of batteries included, right? So things like SQL injection or cross-site request forgery, these types of things are pretty far distracted from the user experience or the developer's experience now. Django also includes a really nice admin section where you can inspect your database, which is a little bit different from most other web frameworks that I've seen, specifically Rails. And what I'm not sure of node includes one out of the box either. Next is extensibility. Like I mentioned before, virtually everything in Django is extensible. And it's extensible at a very high level, right? So then again, another example is the authentication libraries or virtually anything, all the templates, the client-side code and everything else. And finally, it's because I think we're in good company. We have discussed Instagram, Mozilla. These are some major organizations that are deploying web applications using the exact same technology. So that makes you feel a little bit better about working with it. So Junote is built by 33 committers. And at the time I made this, we had about 75 contributors. Here they are, left to right top to bottom, based on the number of contributions we have from them. It's pretty much exclusively built on GitHub. We have some lists and stuff like that that we used to communicate with one another. But everything you would need from the project is on GitHub. We have over 240 Star Gazers, over 200 Forts, 200 issues, over 187 releases on GitHub, and over 8,000 commits on there as well. So anything you need, if you're interested in Junote or want to go through and see what the current release cycle is or how many issues we have, or even file an issue, the link at the bottom, just github.com. So who uses Junote? So this is a non-exhaustive list of some of the organizations that I know about that use Junote. We have GFDRR, which is the global facility for disaster, reduction, and recovery. Army's US Spatial Center, Harvard State Department, Map Story, Open San Diego, Copeco, which is like the FEMA in Honduras, Pacific Disaster Center. This one is Dominican Republic's FEMA equivalent. NOAA, Argonne National Labs, World Food Program, World Bank, Ithaca. And the list goes on and on. You can just Google it, and you'll find different instances of Junotes out there. So I want to give a couple screenshots of some of the more successful Junote deployments that I know about. This is the World Food Programs. Over 370 layers, you can find it at junote.wfp.org. And as you can see, so this is using the same demo site or the same baseline as the demo site that I showed you earlier, but it looks completely different because they've done a really good job of styling it and customizing it to their needs. And so they added some additional client-side functionality, but overall made it look really nice and really slick. Next is Map Story. I think this is one of the ones that when you look at it, you really can't believe it's built on Junote when you first see it. But it is. It has over 1,200 layers. And really, it's claimed to fame as its geospatial and temporal framework. So it allows users to tell stories using geospatial data, right? So you can upload a layer and then walk through time on that layer and show or tell a story with it. So you can show how if you have city streets and a time element on all those streets, you can actually draw them over time and show how the city has expanded or something like that. But they have a lot of really great what they call map stories. And again, it's all built on Junote. Next is the Harvard World Map. And so this one, this is probably the largest Junote deployment that I know about, over 11,000 layers, over 3,900 maps. And then you can find this one at worldmap.harvard.edu. Next is the Nipah None. This is a pilot project for the Department of Energy, done by the Argonne National Lab, over 260 layers. And what I really like about this one is how well the metadata is filled out. So you can see when a deployment has a lot of really well-maintained data, it looks really good. And it's really easy to find geospatial information on there. Some UCs just don't have any of this stuff at all. Finally, GeoShape is an implementation that I worked on on the Rogue project. Our claim to fame is kind of our GeoGit integration in GeoNode. We also use a custom map application. So we replaced the GeoExplorer client side map with a map that abstracts GeoGit operations at a really high level. So when users start interacting with data, they are actually making commits in a GeoGit repository. And then from a high level, they can go back and actually reset the data, revert previous changes. They can synchronize their GeoGit repository with other servers. And then we also have a mobile interface that allows users to do the same thing from an Android device. So next, just wanted to, if you need help with GeoNode, there's GeoNode on FreeNode. We also have two mailing lists, GeoNode users and GeoNode dev. One's for developers. The dev one's for developers. The other one's the users list. GitHub issues is really the place to go if you have an issue or want to track down something that you think may be wrong with it, but don't know. There's a chance that we already know exactly about it. And we're working through it. And docs.geoNode.org is our documentation. And finally, I just wanted to list some instructions on how you get GeoNode. If you're using Ubuntu 12.04, it's just sudo appgit at the GeoNode PPA and then appgit GeoNode essentially. And for all other operating systems, just go to our GitHub page. We have some pretty detailed instructions on the installation of the GeoNode. And we have some pretty detailed instructions on the installation instructions for each of those operating systems. And I think that's the end of my slides. Are there any questions? Sir? I know that for the Rope project, you created a vapor script. Chef scripts, are you going to be back 40 goes over to the Ford and Chilin projects? I've been thinking about it. It would be helpful. I know, Simone, do you guys have some scripts also for deployment for deploying? Yeah, I think there's also some fabric scripts out there for deploying. I'm not sure if any of them have been committed into a repository in the GeoNode organization yet. But I think making the Chef scripts is something I'd really love to do for GeoNode. And I'm hoping I get some time to do it. We'll see. I mean, it would take an hour to write a Chef script that did this at most. So I'd like to do it if I could. Any other questions? Yes, sir? Is there support built in for, I guess, grouping permissions by user groups? Yeah, so in our current master version, we have role-based security as well. So you can group members into a group and then say, like, these are all your analysts or developers or something like that, which is obviously much easier than having to go through and explicitly specify a user, all the users who may have access to a single layer. But yes? But you can also do it on individual user basis? Yeah, either one. So the logic will walk through all of them, ensure that the users have permission either from a group or explicitly, and then continue on the request cycle after that. Any other questions? OK, thank you very much for coming.
high-level overview of the GeoNode application, little bit in more recent desktop applications. could be a little bit more complicated on desktop users with a way to provide some feedback to the organizations are working within the same maps that are using the layer. So you can quickly the layer and also modify the permissions and the geospatial data and you can customize these application and consistent functionality. The This is a pilot project for the Department of