Welcome to Planet OSGeo

July 31, 2014


CAD-like Feature Construction with the OpenLayers Editor

When editing vector features in a web GIS map one often needs support for precise drawing. Snapping to existing features of external data (using WFS or other vector features) was long available in OpenLayers Editor but it still lacked guide line support. We are pleased to announce that guide lines can now be generated automatically by OpenLayers Editor whilst a feature is drawn. Guide lines for the first run offer support for drawing right angled features or features in parallel to other features.

by cartaro-admin at July 31, 2014 01:08 PM


Beta of Cartaro released

We are happy to announce the first beta of Cartaro. With this release the API has become stable so an upgrade path for future versions will be available.

by cartaro-admin at July 31, 2014 01:08 PM


Cartaro Beta 4 Released

Cartaro is progressing steadily and we've recently packed the beta 4 release. It features updates to many dependencies and fine tuning.

by cartaro-admin at July 31, 2014 01:08 PM


Cartaro Beta5

New release with focus on functions for professional geodata management.

by cartaro-admin at July 31, 2014 01:08 PM


batyr: On-demand synchronization of vector data to a PostGIS database

We are excited to announce the first release of batyr - a server which connects all kinds of vector geodata sources to a PostgreSQL/PostGIS database and provides a structured way to synchronize external data to database tables.

by cartaro-admin at July 31, 2014 01:08 PM

Bjorn Sandvik

Live tracking from Oslo to Bergen by foot - ready for takeoff!

Follow the trip on: 
Tomorrow, Thursday 31 July, I'm starting on my four weeks hike from Oslo to Bergen. It's been a very nice and warm summer in Norway, so it's been hard to work on my real-time trekking map. But if everything works, you should be able to follow me on this map

[ Fullscreen map | Code ]

I'll blog about the technicalities after the trip. The expedition code is available on GitHub under a GPL licence if you want to dig in: https://github.com/turban/oslobergen

A few notes: 
Hope it's working! :-)

Geek on hike

by Bjørn Sandvik (noreply@blogger.com) at July 31, 2014 05:19 AM

July 30, 2014

Paul Ramsey


Bill Dollins wrote an excellent paean to the positive aspects of vendor lock-in, which is worth a few minutes of your time:

Lock-in is a real thing. Lock-in can also be a responsible thing. The organizations I have worked with that make the most effective use of their technology choices are the ones that jump in with both feet and never look back. They develop workflows around their systems; they develop customizations and automation tools to streamline repetitive tasks and embed these in their technology platforms; they send their staff to beginning and advanced training from the vendor; and they document their custom tools well and train their staff on them as well. In short, they lock themselves in.

I think locking yourself into a good technology could have all the positive knock-on effects Bill lists. But, we never quite know what we're getting, good or bad, until we've spent some time with it. Which to me means being carefully modular and standards-oriented in design (which is to say, the opposite of how most vendors will architect a solution).

The BC Integrated Case Management (ICM) project yet again provides an excellent example of the negative aspects of vendor worship. In this case, ICM chose their software vendor first (way back in the single-digit 2000's they chose Seibel) and then chose their system integrator (Deloitte) and finally began to get the first major phases of delivery a couple years ago. One result of this slow motion train wreck is that the Seibel software is dragging other aspects of the Ministry's technology base down to its level.

For example, among the limitations (scroll to the bottom) ICM (Seibel) imposes are:

  • "Using any version of IE other than IE 8 may result in unexpected behavior". So no IE 9, 10, or 11. Also, no Windows 8 support, since IE 8 only works on Windows 7 or less. Also no browser other than IE.
  • "The 32-bit ActiveX Seibel plug-in does not work with 64-bit IE". So all sorts of potential collisions between 64-bit/32-bit libraries. (The sysadmins weep.)

Only a few years after launch, ICM is already locking the Ministry to desktop technology that is several versions out of date, which will in turn restrict flexibility for doing more modern work in the future. This is one of the the downsides of lock-in.

by Paul Ramsey (noreply@blogger.com) at July 30, 2014 05:02 PM

Boundless Blog

Ice Cubed (Part 1): Data Preparation with QGIS

Victor Olaya

OpenGeo Suite is a complete geospatial platform for managing data and building maps and applications. In the newest version, Boundless makes it even easier to build and deploy applications by adding better data management tools to QGIS and improving the SDK with support for OpenLayers 3.

This post is the first of a series of posts describing how to create complete, enterprise-grade web applications using these and other features. While we’ve previously shown how to configure OpenGeo Suite from QGIS, this post will describe a typical workflow to show how easy it is to analyze and style on the desktop using QGIS and then publish to the web using GeoServer. Our next post will describe how to use this data to create an application to visualize this data.


Our first demo application, Ice3, is a mapping application that visualizes changes in Arctic sea ice over a 33 year period (1980-2013). The maximum August sea ice extent is shown in the timeline slider beneath the map. Additionally, an outline of the 30-year (1981-2010) median August sea ice extent is included for comparison. All data is from the National Snow & Ice Data Center, a source for consistently processed ice extent and concentration images and data values since 1979. A third dataset showing the average snow extent in August (1967-2004) is also included for reference.

Preparing the Data

The workflow that we have to execute involves loading and reprojecting several layers into the same coordinate reference system (CRS), styling them, and then publishing them to GeoServer. It is not strictly necessary to reproject layers, as GeoServer can do that on the fly, but if we expect most requests to use a given CRS then reprojecting them in advance will avoid having to reproject them at request time and thus make our service more performant.  In order to show the capabilities of GeoServer, other posts in this series will use layers in their original CRS, but in this one we will be reprojecting them to a common one using QGIS. We will be using the following datasets:

Setting up GeoServer

Before preparing our layers, we need configure the GeoServer catalog. From the QGIS plugin, we can connect to our GeoServer instance and create a new workspace that will contain our layers.


Base map layer

To reproject the Natural Earth base map layer into a polar projection, we will use the Reproject vector layer algorithm in the Processing toolbox. Doing so will generate a new layer in the EPSG:3408 CRS, which will be our target for all layers.


We can then define a style for the layer on the layer properties dialog. Once the layer is ready to be published,  we can drag and drop the layer into the desired catalog and workspace using the QGIS plugin.

Average snow extent layer

The average snow extent layer is based on an an existing WMS service. Currently, cascading a WMS service can only be configured from the GeoServer administration interface, but an upcoming release of OpenGeo Suite will make it possible to define a new connection in QGIS…


…and then add a corresponding layer from the list provided by that service.


Sea ice layers

Preparing and publishing the sea ice layers is the most complex part, since there is a large number of them. We will show how to automate the process to simplify it.

All layers will have the same styling, since we do not plan to show them together, but as different snapshots. That means we can reuse the style definition. We style one of the layers and then save the style as a QGIS QML file.


The operation that we need to perform for all the layers in the sea ice set is reprojecting them and then applying the style that we have just saved. To make it easier to run repeatedly, we can define this small workflow as a model in the QGIS processing framework. This is what the model should look like:


The reprojection algorithm uses EPSG:3408 as the destination CRS, and the Style vector layer algorithm uses our QML style file.

To run this model in all of our layers, we can run it as a batch process. Selecting the sea ice layers as inputs for the batch process will generate a new set of reprojected and styled layers, ready to be published to GeoServer.


Another way of using our model is by setting it as a pre-publish hook. Our QGIS plugin makes it possible to define an operation to be performed to any layer as it is published. If we set our model to run when publishing then there is no need to run the batch process. Simply publish the set of sea ice layer from our QGIS plugin by dragging and dropping them on the destination workspace item they will be reprojected and styled as they’re published.

Preparing the cache

Once all layers are published, we can also create the corresponding cache layers and seed the cache from the QGIS plugin. To create a cache layer, just right-click on the GeoWebCache item and select the GWC layer and then specify the layer to cache.


Or, even easier, just drag a Geoserver layer into the GeoWebCache item. You can then cache the layer to its full extent, or, if you just want to cache a given region, define its bounding box by clicking on Define in canvas button and then dragging and dropping the QGIS map to select the bounding box.



Now we have configured all the layers for our Ice3 demo application by reprojecting and publishing from QGIS to GeoServer.  In the next post we will see how to use the OpenGeo Suite SDK to create an interface for the application using OpenLayers 3.

The post Ice Cubed (Part 1): Data Preparation with QGIS appeared first on Boundless.

by Victor Olaya at July 30, 2014 02:37 PM

July 29, 2014

Jackie Ng

GovHack 2014 post-mortem

Earlier this month, I attended the GovHack 2014 hackathon, along with thousands of other fellow hackers all across the country. This was my first GovHack, but not my first hackathon. My previous hackathon was RHoK and having no idea how GovHack would turn out, I entered the GovHack event with a RHoK-based mindset of how I would expect this hackathon to turn out.

Bad idea.

I learned very quickly there was a major difference between RHoK and GovHack. Going into RHoK, you have an idea about what solutions you will get to hack on over the weekend as problem owners are present to pitch their ideas to the audience of prospective hackers. With GovHack, you need an idea about what solution you want to hack on over the weekend, all they were going to provide was the various open data and APIs. What on earth are we going to build?

So after losing nearly half the weekend to analysis paralysis, our team (named CreativeDrought, wonder why?) agreed with my suggestion of just building a MapGuide-based mashup of various open datasets, most notably, the VicRoads Crash Stats dataset and related transportation data. I obviously knew MapGuide inside-and-out and its capabilities to have a level of confidence that with the remaining weekend we should still be able to crank out some sort of workable solution. At the very least, we'd have a functional interactive map with some open data on it.

And that's the story of our CrashTest solution in a nutshell. It's a Fusion application, packed to the gills with out-of-the-box functionality from its rich array of widgets (including Google StreetView integration). The main objective of this solution was to allow users to view and analyse crash data, sliced and diced along various age, gender, vehicle type and various socio-economic parameters.

MapGuide's rich out-of-the-box capabilities, Maestro's rapid authoring functionality and GDAL/OGR's ubiquitous data support greatly helped us. I knew with this trio of tools, that we could assemble an application together in the remaining day and a bit left that we had to actually "hack" on something.

Sadly, we only got as far as putting the data on the map for the most part. Our team spent more time frantically trying to massage various datasets via ogr2ogr/Excel/GoogleDocs into something more usable than actually writing lines of code! Seriously VicRoads? Pseudo-AMG? Thank goodness I found the necessary proj4 string for this cryptic coordinate system so that we could re-project a fair chunk of the VicRoads spatial data into a coordinate system that better reflects the world we want to mash this data up with!

Still, our "solution" should hopefully still open up a lot of "what if" scenarios. Imagine looking at a cluster of accident events, not being able to ascertain any real patterns or correlation and so you then fire up the StreetView widget and lo-and-behold, Google StreetView providing additional insights that a birds-eye view could not. Also imagine the various reporting and number crunching possibilities that are available by tapping into the MapGuide API. Imagine what other useful information you could derive if we had more time to put up additional useful datasets. We didn't get very far on any of the above ideas, so just imagine such possibilities if you will :)

So here's our entry page if you want to have a look. It includes a working demo URL to a Amazon EC2 hosted instance of MapGuide. Getting acquainted with Amazon Web Services and putting MapGuide up there was an interesting exercise and much easier than I thought it would be, though I didn't have enough time to use the AWS credits I redeemed over the weekend to momentarily lift this demo site out of the free usage tier range performance-wise. Still, the site seems to perform respectably well on the free usage tier.

Also on that page is a link to a short video where we talk about the hack. Please excuse the sloppy editing, it was obviously recorded in haste in a race against time. Like the solution and/or the possibilities it can offer? Be sure to vote on our entry page.

Despite the initial setbacks, I was happy with what we produced given the severely depleted time constraints imposed on us. I think we got some nice feedback demo-ing CrashTest in person at the post-mortem event several days later, which is always good to hear. Good job team!

So what do I think could be improved with GovHack?
  • Have a list of hack ideas (by participants who actually have some ideas) up some time before the hackathon starts. This would facilitate team building, letting participants with the skills, but without ideas easily gravitate towards people/teams with the ideas.
  • The mandatory video requirement for each hack entry just doesn't work in its current form. Asking teams to produce their own videos puts lots of unnecessary stress on teams, who not only have to come up with the content for their video, but have to also deal with the logistics of producing said video. I would strongly prefer that teams who can/want to make their own video do so, while other teams can just do a <= 3 minute presentation and have that be recorded by the GovHack organisers. Presentations also lets teams find out how other teams fared over the weekend. While everyone else in the ThoughtWorks Melbourne office was counting down to the end of the hackathon, I was still frantically trying to record my lines and trying not to flub them! I raided the office fridge for whatever free booze that remained just to calm myself down afterwards. I don't want to be in that situation ever again!
  • Finally, the data itself. So many "spatial" datasets as CSV files! So many datasets with no coordinates, but have addresses, horribly formatted addresses, adding even more hoops to geocode them. KML/KMZ may be a decent consumer format, but it is a terrible data source format. If ogr2ogr can't convert your dataset, and requires a manual intervention of QGIS to fix it, then perhaps it's better to use a different spatial data format. Despite my loathing of its limitations, SHP files would've been heavily preferred for all of the above cases. I've made my thoughts known on the GovHack DataRater about the quality of some of these datasets we had to deal with and got plenty of imaginary ponies in the process.
Despite the above points, the event as a whole was a lot of fun. Thanks to the team (Jackie and Felicity) for your data wrangling and video production efforts.

Also thanks to Jordan Wilson-Otto and his flickr photostream where I was able to get some of these photos for this particular post.

Would I be interested in attending the 2015 edition of GovHack? Given I am now armed with 20/20 hindsight, yes I would!

by Jackie Ng (noreply@blogger.com) at July 29, 2014 08:44 AM

July 28, 2014

A GeoSpatial World

PostGIS Viewer 3D suite


PosGIS Viewer 3D suite


image_thumb175 ntroduction

Comme je vous l’annoncez dans mon précédent billet j’ai fait évoluer le pg3DViewer pour qu’il puisse gérer les géométries de type POINT, et pour mes test je me suis intéressé aux nuages de points ‘Points Clouds’'









Pour la suite de ce tutorial nous utiliserons deux fichiers de données dont voici les liens de téléchargement :

image_thumb174 nstallation


Cliquez sur le lien pg3DViewer_setup.exe pour télécharger le programme d’installation de la nouvelle version, si vous aviez installé la version précédente désinstallez la, puis lancer l’exécution.

Cliquer sur le  bouton Suivant à chaque étape, puis sur le bouton Terminer.

Dans le précédent billet vous avez tous les écrans de l’installation : http://ageoguy.blogspot.fr/2014/07/postgis-3d-viewer.html


image_thumb179 tilisation

Avant de commencer à utiliser pg3Dviewer vous devez avoir une base de données PostgreSQL avec la cartouche spatiale PostGIS version 2.0 ou supérieure.

image_thumb61 Double cliquez sur l’icone créé par le programme d’installation sur le bureau pour lancer l’application.



Connecter vous à votre base de données 3D



Commencez par cliquer sur cet icône pour vous connecter a une base de données PostgreSQL/PostGIS version 2.0 ou supérieur contenant des données 3D ou prête à en recevoir.

  • Choisissez localhost pour serveur si votre base de données est en local sur votre machine ou bien saisissez l’adresse IP de votre serveur
  • le port est par défaut 5432, changez le si nécessaire
  • saisissez l’utilisateur
  • saisissez le mot de passe
  • choisissez une base de donnée dans la combobox
  • cliquez sur le bout OK pour valider votre saisie.



Traitement d’un fichier Ascii XYZ

Nous allons utiliser le fichier bunny.xyz que vous avez téléchargé dans l’introduction.

Nous allons créer la table qui va accueillir les donnés. Dans PgAdmin III ouvrez l’outil de requêtes puis
copiez la requête suivante :

-- Table: bunny

-- DROP TABLE bunny;

  x double precision,
  y double precision,
  z double precision,
  id bigserial NOT NULL,
  CONSTRAINT bunny_pkey PRIMARY KEY (id)
  OWNER TO postgres;

Puis exécuter la.

Puis nous allons insérer les données dans la table. Copiez la requête suivante dans l’éditeur de requêtes :

copy lidar_test(x,y,z,classification)
from 'C:/temp/bunny.txt'
with delimiter ' '

puis exécuter la.

Maintenant nous allons pouvoir visualiser les données. Dans le panneau Query copiez la requête suivante :

SELECT x,y,z
FROM bunny AS points_xyz

Cliquez sur l’icone ‘Execute query

Et voici le résultat après Zoom et Rotation.
Comme vous avez du le remarquer le temps d’affichage est très rapide pour une table contenant 34835 points.

Nous allons maintenant essayer une nouvelle requête.Dans le panneau Query copiez la requête suivante :

SELECT st_geomfromtext('POINT Z('||x||' '||y||' '||z||')',0) as geom,'255:0:0'::text AS rgb FROM bunny

Cliquez sur l’icone ‘Execute query

Et voici le résultat après Zoom et Rotation.
Le temps d’affichage est beaucoup plus long parce que dans cette requête nous construisons la géométrie à la volée.

La différence avec la requête précédente est que celle-ci génère un fichier de points au format xyz (grâce à la commande COPY TO de PostgreSQL) qu’exploite un ‘reader’ de  la bibliothèque VTK. Tout cela ce fait avec l’ajout de ‘A'S points_xyz’ a la fin de la requête et la sélection des champs x,y et z.


Traitement d’un fichier LAS

Nous allons utiliser le fichier ‘2013 LiDAR 5105_54480.las’ que vous avez téléchargé dans l’introduction. Il va nous falloir des outils pour pouvoir importer ce fichier dans notre base de donnée, nous allons utiliser une collection d’outils qui s’appelle LASTOOLS que l’on peut télécharger sur le site de http://www.cs.unc.edu/~isenburg/lastools/ et dont voici le lien de téléchargement : http://lastools.org/download/lastools.zip

L’outil que nous allons utiliser s’appelle las2txt , voici l’entête du README associé:

Converts from binary LAS/LAZ 1.0 - 1.4 to an ASCII text format
For updates check the website or join the LAStools mailing list.


Martin @lastools

Et le lien pour le consulter : http://www.cs.unc.edu/~isenburg/lastools/download/las2txt_README.txt

Ouvrez une fenêtre DOS, allez dans le répertoire ou vous avez installé LASTOOLS, puis dans le sous répertoire bin. Copiez la commande suivante :
las2txt -i "C:\temp\2013 LiDAR 5105_54480.las" -parse xyzc -sep semicolon

Cette commande va générer un fichier Ascii (.txt) au format x,y,z et classification avec pour séparateur de colonne le caractère ‘;’ (point virgule).

Nous disposons à présent d’un fichier que nous allons pouvoir insérer dans notre base de données. Pour cela nous allons commencer par créer la table qui recevra les données, dans la fenêtre de requêtes de PgAdmin III copiez la requête suivante:

-- Table: lidar_test

-- DROP TABLE lidar_test;

CREATE TABLE lidar_test
  x double precision,
  y double precision,
  z double precision,
  classification integer
ALTER TABLE lidar_test
  OWNER TO postgres;

puis exécuter la.

Puis nous allons insérer les données dans la table. Copiez la requête suivante dans l’éditeur de requêtes :

copy lidar_test(x,y,z,classification)
from 'C:/temp/2013 LiDAR 5105_54480.txt'
with delimiter ';'

puis exécuter la.

Maintenant nous allons pouvoir visualiser les données. Dans le panneau Query copiez la requête suivante :

select x,y,z,
WHEN classification=2 then '128:0:0'
WHEN classification=3 then '0:64:0'
WHEN classification=4 then '0:128:0'
WHEN classification=5 then '0:255:0'
WHEN classification=6 then '255:128:64'
WHEN classification=11 then '128:128:128'
END as rgb
from lidar_test as points_xyzrgb

Cliquez sur l’icone ‘Execute query

Et voici le résultat

Les valeurs de classification utilisées dans la requête sont issues de cette requête :
select distinct classification from lidar_test order by 1

Vous pouvez également obtenir des informations sur le fichier LAS avec l’outil lasinfo, dans une fenêtre DOS tapez la commande suivante :

lasinfo c:\temp\2013 LiDAR 5105_54480.las

a la fin du rapport vous obtenez la définition de la classification.

lasinfo for c:\temp\2013 LiDAR 5105_54480.las
reporting all LAS header entries:
  file signature:             'LASF'
  file source ID:             0
  global_encoding:            1
  project ID GUID data 1-4:   00000000-0000-0000-0000-000000000000
  version major.minor:        1.2
  system identifier:          ''
  generating software:        'TerraScan'
  file creation day/year:     156/2013
  header size:                227
  offset to point data:       447
  number var. length records: 2
  point data format:          1
  point data record length:   28
  number of point records:    7938187
  number of points by return: 6742290 914660 231891 44542 4804
  scale factor x y z:         0.001 0.001 0.001
  offset x y z:               510499.94 5447999.8799999999 0
  min x y z:                  510499.940 5447999.880 34.110
  max x y z:                  511000.110 5448500.100 275.690
variable length header record 1 of 2:
  reserved             43707
  user ID              'LASF_Projection'
  record ID            34735
  length after header  88
  description          'Georeferencing Information'
    GeoKeyDirectoryTag version 1.1.0 number of keys 10
      key 1024 tiff_tag_location 0 count 1 value_offset 1 - GTModelTypeGeoKey: ModelTypeProjected
      key 2048 tiff_tag_location 0 count 1 value_offset 4269 - GeographicTypeGeoKey: GCS_NAD83
      key 2054 tiff_tag_location 0 count 1 value_offset 9102 - GeogAngularUnitsGeoKey: Angular_Degree
      key 2056 tiff_tag_location 0 count 1 value_offset 7019 - GeogEllipsoidGeoKey: Ellipse_GRS_1980
      key 2057 tiff_tag_location 34736 count 1 value_offset 0 - GeogSemiMajorAxisGeoKey: 6378137
      key 2058 tiff_tag_location 34736 count 1 value_offset 1 - GeogSemiMinorAxisGeoKey: 6356752.314
      key 2059 tiff_tag_location 34736 count 1 value_offset 2 - GeogInvFlatteningGeoKey: 298.2572221
      key 3072 tiff_tag_location 0 count 1 value_offset 26910 - ProjectedCSTypeGeoKey: UTM 10 northern hemisphere
      key 3076 tiff_tag_location 0 count 1 value_offset 9001 - ProjLinearUnitsGeoKey: Linear_Meter
      key 4099 tiff_tag_location 0 count 1 value_offset 9001 - VerticalUnitsGeoKey: Linear_Meter
variable length header record 2 of 2:
  reserved             43707
  user ID              'LASF_Projection'
  record ID            34736
  length after header  24
  description          'Double Param Array'
    GeoDoubleParamsTag (number of doubles 3)
      6.37814e+006 6.35675e+006 298.257
reporting minimum and maximum for all LAS point record entries ...
  X                   0     500170
  Y                   0     500220
  Z               34110     275690
  intensity           0        255
  return_number       1          5
  number_of_returns   1          5
  edge_of_flight_line 0          0
  scan_direction_flag 0          1
  classification      2         11
  scan_angle_rank   -19         22
  user_data          79         79
  point_source_ID 10217      10238
  gps_time 49786940.848411 49796462.877692
WARNING: there is coordinate resolution fluff (x10) in XYZ
overview over number of returns of given pulse: 5825940 1363444 563503 160908 24392 0 0
histogram of classification of points:
         2030423  ground (2)
         1836807  low vegetation (3)
          234836  medium vegetation (4)
         1811842  high vegetation (5)
         2022021  building (6)
            2258  road surface (11)


image_thumb100 onclusion.

Nous sommes arrivés à la fin de ce billet, je vous conseille la lecture d’un excellent tutorial de Paul Ramsey concernant les données LIDAR que vous trouverez a cette adresse  http://workshops.boundlessgeo.com/tutorial-lidar/ , il ne vous restera plus qu’a afficher les données en utilisant les fonctions présentées dans ce ‘tutorial lidar’.

by Jérôme ROLLAND (noreply@blogger.com) at July 28, 2014 10:08 AM

July 27, 2014

Cameron Shorter

OSGeo-Live UAT in one week: Testing and doc updates required

In this OSGeo-Live 8.0 development cycle we have seen major upgrades: moving to the light weight Lubuntu distribution, moving to a new Long Time Support release (LTS), and moving even more applications to make use of Debian packaging. It should be our best distribution yet. But this has impacted our schedule, as the Ubuntu LTS has only become stable within the last week (14.04.1 release), and we need help in order to deliver OSGeo-Live to FOSS4G-PDX with our usual high level of quality and reliability. In particular, we need help:
  1. Testing to verify everything works in this new system and fixing bugs. Download alpha1 here [0].
  2. Updating version number in your Project Overview (if changed), and possibly mention a new feature or two. Doc howtos [4].
  3. Re-running the Quickstart and ensure each step is still valid, and screenshots match the implementation.
  4. Updating status of the Project Overview and Quickstart to "8.0draft" in our status sheet. [1]
Due to our tight timelines, we might need to hide applications which we can't get stablised, tested, or docs updated in time. Please check our current list of open issues [2][3] to verify that your project is working as expected.


  • 27 July 2014 Alpha4 released [3]. Please verify all applications work and fix bugs.
  • 03 August 2014 Beta1 release - start taking screen shots with new background.
  • 07 August 2014 Community Testing Sprint (UAT).
  • 07 August 2014 English docs complete.
  • 14 August 2014 Translations complete.
  • 17 August 2014 OSGeo-Live 8.0 sent to the printers.
[0] http://osprey.ucdavis.edu/downloads/osgeo/gisvm/gisvm/8.0alpha4/osgeo-live-mini-8.0alpha4-i386.iso
[1] https://docs.google.com/spreadsheet/ccc?key=0Al9zh8DjmU_RdGIzd0VLLTBpQVJuNVlHMlBWSDhKLXc#gid=13
[2] http://trac.osgeo.org/osgeo/report/10
[3] http://lists.osgeo.org/pipermail/live-demo/2014-July/009274.html
[4] http://wiki.osgeo.org/wiki/Live_GIS_Disc#Documentation

by Cameron Shorter (noreply@blogger.com) at July 27, 2014 10:54 PM

July 26, 2014

Markus Neteler

Rendering a brain CT scan in 3D with GRASS GIS 7

brainscan1Last year (2013) I “enjoyed” a brain CT scan in order to identify a post-surgery issue – luckily nothing found. Being in Italy, like all patients I received a CD-ROM with the scan data on it: so, something to play with! In this article I’ll show how to easily turn 2D scan data into a volumetric (voxel) visualization.

The CT scan data come in a DICOM format which ImageMagick is able to read and convert. Knowing that, we furthermore need the open source software packages GRASS GIS 7 and Paraview to get the job done.

First of all, we create a new XY (unprojected) GRASS location to import the data into:

# create a new, empty location (or use the Location wizard):
grass70 -c ~/grassdata/brain_ct

We now start GRASS GIS 7 with that location. After mounting the CD-ROM we navigate into the image directory therein. The directory name depends on the type of CT scanner which was used in the hospital. The file name suffix may be .IMA.

Now we count the number of images, convert and import them into GRASS GIS:

# list and count
LIST=`ls -1 *.IMA`
MAX=`echo $LIST | wc -w`

# import into XY location:
for i in $LIST ; do

# pretty print the numbers to 000X for easier looping:
curr=`echo $curr | awk ‘{printf “%04d\n”, $1}’`
convert “$i” brain.$curr.png
r.in.gdal in=brain.$curr.png out=brain.$curr
r.null brain.$curr setnull=0
rm -f brain.$curr.png
curr=`expr $curr + 1`


At this point all CT slices are imported in an ordered way. For extra fun, we can animate the 2D slices in g.gui.animation:

Animation of brain scan slices
(click to enlarge)

# enter in one line:
g.gui.animation rast=`g.mlist -e rast separator=comma pattern=”brain*”`

The tool allows to export as animated GIF or AVI:

Animation of brain scan slices (click to enlarge)

Now it is time to generate a volume:

# first count number of available layers
g.mlist rast pat=”brain*” | wc -l

# now set 3D region to number of available layers (as number of depths)
g.region rast=brain.0003 b=1 t=$MAX -p3

At this point the computational region is properly defined to our 3D raster space. Time to convert the 2D slices into voxels by stacking them on top of each other:

# convert 2D slices to 3D slices:
r.to.rast3 `g.mlist rast pat=”brain*” sep=,` out=brain_vol

We can now look at the volume with GRASS GIS’ wxNVIZ or preferably the extremely powerful Paraview. The latter requires an export of the volume to VTK format:

# fetch some environment variables
eval `g.gisenv -s`
# export GRASS voxels to VTK 3D as 3D points, with scaled z values:
g.message “Exporting to VTK format, scale factor: $SCALE”
r3.out.vtk brain_vol dp=2 elevscale=$SCALE \
output=${PREFIX}_${MAPSET}_brain_vol_scaled${SCALE}.vtk -p

Eventually we can open this new VTK file in Paraview for visual exploration:

# show as volume
# In Paraview: Properties: Apply; Display Repres: volume; etc.
paraview –data=brain_s1_vol_scaled2.vtk

markus_brain_ct_scan3 markus_brain_ct_scan4 markus_brain_ct_scan2













Fairly easy!

BTW: I have a scan of my non-smoker lungs as well :-)

The post Rendering a brain CT scan in 3D with GRASS GIS 7 appeared first on GFOSS Blog | GRASS GIS Courses.

by neteler at July 26, 2014 11:32 PM

July 25, 2014

GeoTools Team

GeoTools 12-beta Released

The GeoTools community is delighted to announce availability of GeoTools 12-beta for testing:
This release is made in conjunction with GeoServer 2.6-beta.

We will provide a more detailed feature list for the final 12.0 release, for now check out the GeoTools 12-beta Release Notes.

This beta release is provided for integration testing. Earlier this year we slowed down our release cycle for better collaboration. At this time we ask downstream projects to perform a smoke test and highlight any issues found.

Priority should be given to testing the following functionality:

Java 7
We have changed our source compile options to 1.7, you will need to use OpenJDK 7 or Oracle JDK 7 to this release of GeoTools. While upgrading to Java 7 take advantage of the try-with-resource syntax which is compatible many GeoTools constructs. 

try (SimpleFeatureIterator iterator = featureCollection.features()){
   while( iterator.hasNext() ){
     SimpleFeature feature = iterator.next();

You can see the original proposal for details.

Thanks for CSIRO, Boundless and GeoSolutions for updating the build servers so we could make this transition in a responsible fashion.

The wfs-ng client is now ready for widespread use, acting as a drop-in replacement (making use of the same connection parameters). A great deal of attention has been paid to support axis-order corrections allowing the wfs-ng client to work with all manner of ill-behaved WFS implementations. 

String getCapabilities = "http://localhost:8080/geoserver/wfs?REQUEST=GetCapabilities";
Map connectionParameters = new HashMap();
connectionParameters.put("WFSDataStoreFactory:GET_CAPABILITIES_URL", getCapabilities );
DataStore dataStore = DataStoreFinder.getDataStore( connectionParameters );

In order to make wfs-ng a drop-in replacement (and respond to the same connection parameters) you are limited to only using one of the gt-wfs and gt-wfs-ng plugins in your application at a time.

advanced raster reprojection
A lot of work has been put into improving the raster reprojection story for glitches around the date line and polar regions. To enable these options use the following rendering hints:

rendererParams.put(StreamingRenderer.ADVANCED_PROJECTION_HANDLING_KEY, true);

rendererParams.put(StreamingRenderer.CONTINUOUS_MAP_WRAPPING, true);

We have set these parameters by default for GeoServer 2.6-beta so you are in good company for this test.

circular string
This release of GeoTools include new abilities for the WKTReader2 allowing it to read CIRCULAR string. This is especially exciting as it makes use of series of subclass of JTS LineString. These subclasses will use a tolerance to produce appropriate  coordinates for integration with JTS Geometry operations. As far as JTS is concerned they walk and talk like a LineString, while you can control the implementation by defining control points and a tolerance.

GeometryFactory geometryFactory = JTSFactoryFinder.getGeometryFactory();
CurvedGeometryFactory curvedfactory = new CurvedGeometryFactory(Double.MAX_VALUE);    
WKTReader2 reader = new WKTReader2(curvedfactory);
CircularString arc = (CircularString) reader.read("CIRCULARSTRING(10 14,6 10,14 10)");

For more details check out the geometry documentation.  The original proposal is also online. 
LineString subclasses supporting Arcs
This implementation has been integrated with OracleDataStore (for all those data sets that include circular arcs). We are also interested in feedback on CurvedGeometryFactory as the API is only a few weeks old.

We are waiting on documentation for a couple of changes, stay tuned for details on:
  • image mosaic vector foot prints
  • coverage views

About GeoTools 12

GeoTools 12 is scheduled for release in Q2 highlighting the following features:
  • Java 7 is now required
  • wfs-ng client with new GML parsing engine
  • Support for curved strings via CurvedGeometryFactory, WKTReader2 and Oracle

by Jody Garnett (noreply@blogger.com) at July 25, 2014 10:38 PM

GeoServer Team

GeoServer Sunday Sprint (FOSS4G)

Back in March we had a Save the Date post for FOSS4G 2014 in Portland. Check your travel plans include participating in the Code Sprint at the end of the conference.

The code sprint is an opportunity for the team to get together and work on “tough problems without funding”. For GeoServer we have two candidates:

  1. Update to a recent version of Wicket to improve browser compatibility
  2. Update CITE Conformance Tests

GeoServer is extending the code sprint to include:

  • Saturday, September 13th: FOSS4G is providing facilities at WhereCampPDX.
  • Sunday, September 14th: Boundless is arranging facilities at nedspace from 10am-4pm.

To attend add your name to OSGeo wiki page and we will look forward to seeing you in Portland!




Suite 250

Suite 250, SW 11th Avenue, Portland

Thanks to Mike Pumphrey for arranging the venue for the Sunday Sprint.




by jgarnett at July 25, 2014 08:27 PM

A GeoSpatial World

Plugin PgAdmin III : PostGISViewer suite

Plugin PgAdmin III : PostGISViewer  suite

Nouvelle version



J'ai mis en place la prise en compte des multi-géométries  :

J'ai rajouté la possibilité d'exécuter les requêtes présente dans l'éditeur SQL de PgAdmin III, mais pour que cela soit possible, il faut respecter certaines règles:
  • Un seul éditeur SQL de PgAdmin III doit être ouvert.
  • Pour que la ou les requête(s) soient exécutées, il ne faut pas être positionné sur un nom de table dans le navigateur d'objets de PgAdmin III , ou alors que la table soit déjà chargée dans le visualiseur.  Une table sélectionnée prendra toujours le pas sur une ou des requêtes.
  • Le premier champ doit être  géométrique ou une géométrie issue d'une fonction de traitement géométrique (ST_Buffer, ST_Intersection....) par requête sera utilisé pour l'affichage. Ce champ ou cette géométrie sera encapsulé par la fonction AsBinary et aura pour alias geom :
    • SELECT AsBinary(wkb_geometry) as geom ....
    • SELECT AsBinary(ST_Buffer(wkb_geometry, 1.0)) as geom...
    • SELECT AsBinary(ST_Intersection(a.wkb_geometry,b.wkb_geoemetry)) as geom... 
    • ....
  •  Le second champ doit permettre de déterminer le type de géométrie, il doit donc être encapsulé par la fonction GeometryType, un alias n'est pas nécessaire :
    • SELECT ..., GeometryType(wkb_geometry)...
    • SELECT ..., GeometryType(ST_Buffer(wkb_geometry,1.0))...
    • SELECT ..., GeometryType(ST_Intersection(a.wkb_geometry,b.wkb_geometry))...
    • ....

  • Chaque requête devra se terminer par un point virgule, ce qui permettra de pouvoir exécuter plusieurs requêtes a la suite.

Ci-dessous deux requêtes se terminant par des points virgules :
  • La première requête va charger la commune qui a pour nom 'Sainte-Croix-de-Quintillargues'
  • La seconde requête va charger tous les bâtiments de cette commune.

Après avoir lancé le plugin PostGISViewer, les deux requêtes sont exécutées et donne le résultat suivant  :

Les couches créées portent comme nom query avec un identifiant qui s'incrémente pour toute la cession du visualiseur.

Toutes suggestions, remarques pour l'amélioration de cet outil seront les bienvenues.

A suivre...

by Jérôme ROLLAND (noreply@blogger.com) at July 25, 2014 02:48 PM

OSGeo News

FOSS4G 2014: Program details, Keynote speakers, Call for maps, FOSS4G turns ten, and Birds of a feather

by aghisla at July 25, 2014 09:01 AM

FOSS4G 2014

Are you excited yet? Program details, Call for Maps, and more

July 22, 2014

Portland, Oregon, USA

Excitement builds as FOSS4G 2014 approaches! Join us in Portland, Oregon this September 8th – 13th.  Attending FOSS4G in Portland is a once in a lifetime opportunity.  FOSS4G is an incredible conference; 2013 was in Nottingham (UK) and 2015 will be in Seoul (South Korea), but this year, FOSS4G is right in your backyard in Portland, Oregon September 8th -13th!  Workshops are filling up — register [1] now to secure your seat in pre-conference workshops and your place at the conference.

Call for Maps!

Represent the beauty of the Pacific Northwest in map form in the Map Gallery.  We invite contributions to the FOSS4G Map Gallery to build an exciting and vibrant exhibit of the very best in mapping. This map gallery will not only demonstrate the work of delegates but also act as a reference point for the current state of mapping.  We encourage all delegates to share one example of their work and help us create a cartographic record of the FOSS4G 2014 conference.  Read the full call for maps [2] and enter your map [3].

Workshops and general sessions program

This year FOSS4G features more than 40 workshops [4], providing excellent training opportunities on relevant, leading technologies — and that’s all before the conference even begins.  With eight tracks [5] of sessions, plus invited talks and a great selection of Keynote Speakers, it will be a FOSS4G packed week to remember.

Keynote biographies

See exciting keyntoes by Mike Bostock of D3.js fame and the New York Times, Sarah Novotny of NGINX and a program chair for O’Reilly Media’s OSCON, and Al Shaw whose work at ProPublica has been honored with several awards.

About FOSS4G

The annual FOSS4G conference is the largest global gathering focused on open source geospatial software. FOSS4G brings together developers, users, decision-makers and observers from a broad spectrum of organizations and fields of operation. Through six days of workshops, presentations, discussions, and cooperation, FOSS4G participants create effective and relevant geospatial products, standards, and protocols.

FOSS4G has been held all over the world and draws attendees from over 40 countries. Nottingham, England hosted the conference in 2013. In 2014, Portland, Oregon, USA will host FOSS4G’s tenth year.

Important Conference Dates

See the full calendar [6] for more details.

  • Sep 8th-9th: Workshops
  • Sep 10th-12th: Main Conference
  • Sep 13th: Code Sprint


  • [1] Registration: http://foss4g2014.eventbrite.com/
  • [2] Call for Maps: https://2014.foss4g.org/foss4g-call-for-maps/
  • [3] Map Submissions: https://2014.foss4g.org/gallery-submissions/
  • [4] Workshops: https://2014.foss4g.org/schedule/workshops/
  • [5] Sessions: http://2014.foss4g.org/schedule/sessions/
  • [6] Calendar:https://2014.foss4g.org/about/calendar/


Gold Level Sponsors


Silver Level Sponsors

Boundless          esri

Bronze Level Sponsors

azavea   Sourcepole

OpenShift Cloudant Penn State

Safe Software         


AppGeo         camptocamp       Locate Press


Media Partners

These leading geospatial media organizations have partnered with FOSS4G to keep their readers informed.


        -NEW- Logo GIM-voor drukkerkopie 150           bciiajfc.gif



For more information or to keep informed from the FOSS4G Organizing Committee, follow @foss4g on Twitter, subscribe to our announcements list, or contact: foss4g2014-info@osgeo.org

The post Are you excited yet? Program details, Call for Maps, and more appeared first on FOSS4G 2014.

by Eli Adam at July 25, 2014 05:07 AM

July 24, 2014

GeoServer Team

GeoServer 2.6-beta Released

The GeoServer team is overjoyed to announce the release of GeoServer 2.6-beta.

I hope you are enjoying the new website – the download page for 2.6-beta provides links to the expected zip, war, dmg and exe bundles. For this release we are experimenting with providing source downloads directly from the GitHub 2.6-beta tag.

As a development release, 2.6-beta is considered experimental and is provided for testing purposes. This release is not recommended for production (even if you are excited by the new features).

This release is made in conjunction with GeoTools 12-beta. Thanks to Kevin for making a beta release of GeoWebCache 1.6.0-beta with relatively little notice.

What to expect … and what we expect from you

A complete change log is available from the issue tracker. We will ask you to wait for 2.6.0 before we let Andrea write a pretty blog with pictures illustrating what features have been added. Instead 2.6-beta is my chance to ask you to download GeoServer 2.6-beta for testing.

Testing is a key part of the open source social contract. The GeoServer team have identified a few areas where we would like to ask for help. This is your best chance to identify issues early while we still have time to do something about it. For those making use of commercial support ask your vendor about their plans for 2.6-beta testing. We would like to ensure the functionality you depend on is ready to go for a Q2 release.

When testing Geoserver 2.6-beta please let us know on the user list (or #GeoServer) how it works for you. We will be sure to thank you in the final release announcement and product presentations.

Java 7 Testing

With Oracle retiring Java 6 security updates the time has come to raise the minimum bar to Java 7.

We know a lot of downstream projects (such as OSGeo Live) have been waiting for GeoServer to support Java 7. Thanks to CSIRO, Boundless, GeoSolutions for providing Java 7 build environments allowing us to make this transition in a responsible fashion.


  • This is a major testing priority on all platforms.
  • Windows 7: The start.bat used by the run manually install has trouble running as an administrator. We recommend installing as a service of this release (GEOS-5687)
  • Mac: You will need to install Oracle Java 7 (as OpenJDK 7 is not yet available for OSX). We have not yet figured out how to run GeoServer.App with Java 7 (GEOS-6588) and are open to suggestions.


WFS Cascade

This is a really exciting change, swapping out our gt-wfs client code for a new gt-wfs-ng implementation with a new GML parser / encoder.  After comparing quality of the two implementations we decided to go all in with this transition .. and thus would really like your help testing.

We would like to hear back on cascading the following configurations:

  • GeoServer
  • deegree
  • MapServer
  • tinyows - there is a critical fix about axis order in tinyows trunc. It corrects (finally!) the output … but perhaps not yet the filters?
  • ArcGIS
  • Other – any other WFS you are working with!


  • Pay special attention to the flags used for axis order. There are different flags to account for each way a WFS implementation can get confused. You will find some implementations expect the wrong axis order on request, but are capable of producing the correct axis order output.
  • We especially ask our friends in Europe to test WFS services published for INSPIRE compliance

This was an epic amount of work by Niels and we have a couple of new features waiting in the wings based on the success of this transition.

Curves support for GML and WMS

A large amount of work has been put into extending the Geometry implementation used by GeoServer.

We have experimented with several approaches over the years (including ISO 19107 and a code sprint with the deegree project) and it is great to finally have a solution. As a long time user of the JTS Topology Suite we have been limited to a Point, Line and Polygon model of Geometry. Andrea has very carefully extended these base classes in to allow for both GML output and rendering. The trick is using a tolerance to convert the the arcs and circles into line work for geometry processing.

Testing for the 2.6-beta release is limited to those with Oracle Spatial. If you are interested in funding/volunteering support for PostGIS please contact the geoserver-devel email list.


  • Look for “Linearization tolerance” when configuring your layer.

Advanced projection handling for raster

We would like to hear feedback on how maps that cross the date line (or are in a polar projection) have improved for you.


  • No special settings needed


Coverage Views

We struggled a bit with how to name this great new feature, however if you work with raster data this is your chance to recombine bands from different sources into a multi-band coverage.


  • Use “Configure new Coverage view” when creating a new layer


Startup Testing

Yes this is an ominous item to ask you to test.

GeoServer 2.6 simplifies where configuration files are stored on disk. Previous versions were willing to spread configuration files between the webapps folder, the data directory and any additional directories on request. For GeoServer 2.6 configuration files are limited to the data directory as a step towards improving clustering support and growing our JDBC Config story.


  • No special settings needed
  • Special request to check files that are edited by hand on disk (such security settings and free marker templates)


Pluggable Styles

For everyone happy with the CSS Style Extension we would like to ask you to test a change to the style edit page (allowing you to create a CSS or SLD style from the start).


  • Install CSS Extension and look for a new option when creating a style


Wind barbs and WKT Graphics

I am really happy to see this popular extension folded into the main GeoServer application.


  • Check GeoTools WKT Marks for examples you can use in your SLD file


New Formats and Functionality

We have new implementations of a couple of modules:

  • Printing – new implementation from our friends at MapFish
  • Scripting – includes a UI for editing scripts from the Web Administration Application

A final shout out to ask for help testing new formats:

  • NetCDF
  • Rib
  • OGR

Language Support

We are happy to announce the first release having support for Turkish. Many thanks to Engin Gem and the whole translation team for the initial contribution. All modules, core, extensions, and community modules have been translated within 8 month. Great success!

French, Korean, Polish, Romanian were corrected and updated to the latest developments. Thanks to all GeoServer Transifex translators and Frank for managing!

Spot a translation mistake? Help translate here: GeoServer Latest localizations

About GeoServer 2.6

Articles and resources for GeoServer 2.6 series:

by jgarnett at July 24, 2014 10:47 PM

Ivan Minčík

FOSS4G Europe - hope we ALL meet together again

For me, it was very memorable week in Bremen. I came very excited and happy to home, to my family.

But, there is also one thing which makes me feel very bad.
At the same time, when all of us where enjoying this event, there was at least one person, speaking nearly the same language as me, who was probably little bit scared of how the return to home would look like. The home destroyed by madness and war.

Somehow I feel, that without a peace, nothing makes a sense. I hope, next year, we ALL meet together again and everybody will be returning to home with a smile on the face.
Tatiana, Ukraine, all peaceful people under the sun, god bless You !

by Ivan Minčík (noreply@blogger.com) at July 24, 2014 10:01 PM


GeoServer Workshop and Presentations at the FOSS4G Europe 2014

FOSS4G Europe 2014

Dear Reader, we are proud to announce that Andrea Aime, our technical lead on GeoServer, will attend this year FOSS4G Europe to give a workshop as well as a few presentations. The conference will be hosted by the Jacobs University in Bremen between 15th of July and 17th of July (here is the conference program), while the 14th of July will be dedicated to workshops (here is the workshop schedule). The schedule for our talks will be as follows: The workshop will provide the attendees with an in-depth introduction to the GeoServer Open Source server useful for those who are (still??) not familiar with it but also for those who already using it as they will have the chance to ask questions directly to one of the main developers behind the software. The presentations, although the order is a bit unfortunate :), are meant to delight all the palates from the uninitiated (GeoServer, An Introduction For Beginners) to the advanced users looking for fine tuning tips and tricks (GeoServer on steroids) or more ways to exploit the power of GeoServer (Processing Data In GeoServer With Rendering Transformations, WPS Processes And SQL Views). Looking forward to seeing you in Bremen!  


You can find the presentations here below, enjoy! [slideshare id=37177209&doc=gsbeginnersfoss4ge2014-140720170321-phpapp01] [slideshare id=37177324&doc=gswpsfoss4ge2014-140720171046-phpapp01] [slideshare id=37177138&doc=gssteroidsfoss4ge2014-140720165834-phpapp02]   The GeoSolutions team, 320x100_eng

by simone giannecchini at July 24, 2014 02:12 PM

gvSIG Team

Validar las geometrías de una capa

Hola a todos de nuevo,

Hacia ya un tiempo que no escribía por aquí…cosas de ir bastante liado con nuevos desarrollos que estamos abordando en gvSIG…pero el otro día me comentaron que necesitarían una herramienta en gvSIG que les permitiera localizar problemas en las geometrías de una tabla antes de cargar dicha tabla en una BBDD de postgreSQL.

Me dijeron…

“Estaría bien disponer de una herramienta que procese las geometrías de una capa y me saque un listado con los problemas y me permita pinchar e ir a la geometría conflictiva y mejor aun a donde este el conflicto”

Efectivamente, gvSIG no tiene nada que se le parezca, pero enseguida pensé que igual con un poco de scripting podía sacar algo parecido a lo que me pedían.

El script no es simple, para que vamos a engañarnos, toca muchos palos, pero no es muy grande y puede servir de inicio para abordar cosas mas complejas.

El principio es simple… nos recorremos las features de la capa, cogemos la geometría, e invocamos al método “getValidationStatus” de esta. Este método realiza una serie de validaciones sobre la geometría y nos devuelve que ha pasado con esas validaciones… si todo fue bien o mal, y en caso de ir mal nos da información sobre que problema se encontró y si puede donde lo encontró. Con esta información, vamos a ir construyendo un pequeño informe en HTML.

Por cada incidencia que encontremos generaremos una entrada con:

  • El número de línea en el que se produjo la incidencia
  • Un volcado de los datos de la feature asociada a esa línea
  • Una descripción textual del problema
  • Un enlace al punto en donde se produjo la incidencia. En el hiperenlace, en lugar de poner una URL meteremos el punto en WKT asociado a la incidencia.
wktgeom = vs.getProblemLocation().convertToWKT()
output.write('<a href="%s">%5.5d</a> %s<br>%s' % (wktgeom,i, feature.toString(),vs.getMessage()))

Cuando ya nos hemos recorrido todas las features de la capa, tendremos que presentar el informe. Para ello utilizaremos la función “showTextDialog” del“ApplicationManager”, que nos permite mostrar una venta con un texto HTML.

application = ApplicationLocator.getManager()
  "Problems in layer "+layer.getName(),

Si solo quisiésemos mostrar el informe con esto nos bastaría. Pero estaría muy bien que al pinchar sobre la incidencia en el informe nos centrase la vista en el área donde se ha producido la incidencia. Para esto tendremos que hacer un poco mas de faena. La función “showTextDialog” permite que le pasemos un ultimo parámetro opcional que sea un “listener” que recibirá los eventos relacionados con los hiperenlaces de nuestro informe en HTML. Para eso tendremos que crear una clase que herede de “HyperlinkListener”.

class MyHyperlinkListener(HyperlinkListener):
  def __init__(self,vista):
    self.vista = vista
  def hyperlinkUpdate(self, h):
    if str(h.getEventType()) == "ACTIVATED":
      wktgeom = h.getDescription()
      print wktgeom
      manager = GeometryLocator.getGeometryManager()
      point = manager.createFrom(wktgeom)

Nuestra clase recibirá en el constructor la vista sobre la que ha de trabajar, y en el método “hyperlinkUpdate” pondremos el código que se ejecutara cada vez que se interactúe con un enlace de nuestro informe, bien por que se pasa el ratón sobre el enlace, o por que se hace click sobre el. Así que nuestro código lo meteremos en este método cercionándonos que filtramos las acción de hacer click en el enlace que sera cuando recibamos un evento de tipo “ACTIVATED”. Lo que haremos será recoger el punto asociado del hiperenlace. Este lo habíamos metido en WKT, así que lo primero será reconstruir nuestro punto a partir de él.

manager = GeometryLocator.getGeometryManager()
point = manager.createFrom(wktgeom)

Y luego ya centrar la vista en ese punto.


Mas cositas que comentar…

A veces lo ejecutaremos sobre capas grandes y estaría bien que fuese informando del progreso. Para ello utilizaremos la variable “taskStatus”. Todos los scripts tienen una asociada y sirve precisamente para eso, para ir informado del progreso de nuestro proceso. Lo primero que tendremos que hacer será asociarla a la barra de estado de la aplicación para que se vaya mostrando ahí el proceso. Tan simple como invocar al método “add” de ella.

Luego le indicaremos las iteraciones que va a tener nuestro proceso, para lo que utilizaremos el método “setRangeOfValues” indicando que las iteraciones irán desde 0 al número de registros que tiene la capa que vamos a procesar. En cada iteración invocaremos al método “setCurValue” para informar de por donde vamos, y al terminar de recorrer nuestras features nos desharemos de nuestro taskStatus invocando al método “terminate” para indicarle que ya termino nuestro proceso y al método“remove” para eliminarla de la barra de estado de gvSIG.

  # Añadimos la barra de progreso a la barra de estado de gvSIG
  # Le indicamos cuantas iteraciones vamos a realizar
  for feature in layer.features():
    # En cada iteración informamos a la barra de progreso de por donde vamos
  # Al terminar
  # Le indicamos a la barra de progreso que ya hemos terminado
  # Y la eliminamos de la barra de estado de gvSIG.

Bueno, hay un montón de detallitos, como atrapar errores aquí y allí, el manejo del StringIO para generar nuestro informe o la generación del código HTML, pero creo que los que han estado ya viendo algunas cosillas del scripting en gvSIG y tienen algo de conocimiento de programación en python pueden seguirlo. Al final os dejo el código completo.

También tengo un problema en el metodo “centerViewinPoint”, algun cálculo no es correcto y no se centra bien la vista, pero creo que es un detalle menor que ya podréis pulir si os es de utilidad el script.

Espero que os sirva… como herramienta para gvSIG y como ejemplo de como hacer cosas nuevas en scripting.

Eso si, para probarlo precisareis de una capa con geometrías dañadas o no validas. Alguna tengo por ahi… a ver si puedo colgarla en algun sitio y la enzalo para que podais probar.

Para ejecutar el script precisareis un gvSIG desktop 2.1.0 build 2231 o superior ;)

Un saludo a todos


from gvsig import *
from org.gvsig.tools.swing.api.windowmanager import WindowManager
import StringIO
from commonsdialog import *
from javax.swing.event import HyperlinkListener
from org.gvsig.fmap.geom import GeometryLocator
from org.gvsig.fmap.geom import Geometry

def centerViewinPoint(view,center):
    env = view.getMap().getViewPort().getEnvelope();
    movX = center.getX()-env.getCenter(0);
    movY = center.getY()-env.getCenter(1);
    minx = env.getMinimum(0) + movX;
    miny = env.getMinimum(1) + movY;
    maxX = env.getMaximum(0) + movX;
    maxY = env.getMaximum(1) + movY;
    env = GeometryLocator.getGeometryManager().createEnvelope(
          minx, miny,
          maxX, maxY,

class MyHyperlinkListener(HyperlinkListener):
  def __init__(self,vista):
    self.vista = vista
  def hyperlinkUpdate(self, h):
    if str(h.getEventType()) == "ACTIVATED":
      # Sopo procesamos los eventos "ACTIVATED" que son los clicks sobre los enlaces
      # Recogemos la geometría que metimos en el enlace en WKT
      wktgeom = h.getDescription()
      print wktgeom
      # Y reconstruimos el punto a partir de ese WKT
      manager = GeometryLocator.getGeometryManager()
      point = manager.createFrom(wktgeom)
      # Y una vez lo tenemos centramos la vista en ese punto.

def main(*args):
  layer = currentLayer()
  if layer == None:
    msgbox("Debera seleccionar la capa que desea validar")
  informe = StringIO.StringIO()  
  hay_problemas = False
    # Añadimos la barra de progreso a la barra de estado de gvSIG
    # Le indicamos cuantas iteraciones vamos a realizar
    for feature in layer.features():
      # En cada iteración informamos a la barra de progreso de por donde vamos
      vs = feature.geometry().getValidationStatus();
      if not vs.isValid() :
        hay_problemas = True
        if vs.getProblemLocation()!=None:
          wktgeom = vs.getProblemLocation().convertToWKT()
            # Atrapamos los errores no vaya a ser que la geometría este tan dañada que
            # nos falle el calculo de su centroide.
            wktgeom = feature.geometry().centroid().convertToWKT()
            wktgeom = None
        if wktgeom == None:
          informe.write('%5.5d%s<br>%s' % (i, feature.toString(),vs.getMessage()))
          informe.write('<a href="%s">%5.5d</a> %s<br>%s' % (wktgeom,i, feature.toString(),vs.getMessage()))
    # Al terminar
    # Le indicamos a la barra de progreso que ya hemos terminado
    # Y la eliminamos de la barra de estado de gvSIG.
  if hay_problemas :
    application = ApplicationLocator.getManager()
      WindowManager.MODE.TOOL, # TOOL o WINDOW según nos interese.
      "Problems in layer "+layer.getName(),
    msgbox("Layer "+layer.getName()+" is valid.")

Filed under: gvSIG Desktop, scripting, spanish Tagged: gvSIG 2.1, gvSIG LAC, python, scripting

by Joaquin del Cerro at July 24, 2014 01:21 PM

July 23, 2014

Cameron Shorter

Inclusive OSGeo Charter membership - invite your team

In response to community suggestions in previous years, the OSGeo board has updated the voting process for OSGeo Charter Membership to be more inclusive. In particular, there is now no upper cap on the number of new Charter Members who can be voted in. This will avoid the disappointing situation where we our process denied respected community members from charter membership because we didn't have enough slots.  Now, new charter members need only demonstrate positive OSGeo attributes as confirmed by existing Charter Members.
The official responsibilities of Charter Members is very light, consisting of voting in the OSGeo Board and other OSGeo Charter members. However, it is also a way we officially acknowledge the number of volunteers who help out in many ways with OSGeo activities.
So now the process is updated, I encourage existing Charter Members and community leaders to be proactive about nominating people from their community.
Here is an email I sent to people within the OSGeo-Live community:
OSGeo-Live contributors,
As you have probably seen, the voting process for new OSGeo charter members has changed in order to ensure OSGeo charter membership is more inclusive and representative of the greater OSGeo membership.In line with this new direction, I'd like to nominate all active OSGeo-Live contributors for OSGeo Charter membership.I believe all active contributors that I've worked with meet the recommended membership selection criteria [1] which includes:
  • Previous participation in or support of OSGeo activities (you have contributed to OSGeo-Live) 
  • The person should already have made a contribution to free and open source geospatial software, education or open data. (you have contributed to OSGeo-Live)
  • The person should be willing to put in time and effort on the Foundation, perhaps joining committee(s), or volunteering in some other way that gets the Foundation going. (Do you wish to continue contributing?) 
  • Members should believe in the general goals of the Foundation. To support and promote the use of free and open source geospatial software, education and data in a collaborative manner. (I expect this is the case, as you have committed to OSGeo-Live license requirements) 
  • Members selected should provide a diversity of geographic regions, diversity of projects, diversity of programming languages and diversity of interests e.g., corporate, hobbyist, educational, scientific. (Lots of project, language and geographic diversity in OSGeo-Live)
  • Members should be prepared to work constructively and positively towards the goals of the Foundation. Good teamwork skills are an asset. (All OSGeo-Live contributors I've worked with fit this criteria)
If you are ok being nominated, then please email me to let me know. Ideally, can you please also point at your OSGeo Advocate profile which I can reference when nominating you. (You might need to create your profile first).
[1] http://wiki.osgeo.org/wiki/Membership_Process#Positive_Attributes
[2] http://wiki.osgeo.org/wiki/OSGeo_Advocate#Process_for_becoming_an_OSGeo_Advocate

by Cameron Shorter (noreply@blogger.com) at July 23, 2014 10:31 PM

GeoServer Team

GeoServer 2.5.2 release

The GeoServer team is happy to announce the release of GeoServer 2.5.2. Download bundles are provided (zipwardmg and exe)  along with documentation and extensions.

GeoServer 2.5.2 is the next the stable release of GeoServer and is recommended for production deployment. Thanks to everyone taking part, submitting fixes and new functionality:

  • Some fixes in the new GetFeatureInfo engine, for unfilled polygons and dashed lines
  • Solved a configuration issue that might have linked two styles toghether (edit one, the other changed as well)
  • DBMS connection leak in some WFS GetFeature with bounds enabled
  • Have WPS work properly as a workspace specific service, and report the current process activity during asynchronous requests (for processes that do report what they are doing in plain english, besides offering a progress percentage)
  • Add a way to resctrict output formats supported by WMS GetMap and GetFeatureInfo
  • More docs on how to setup JNDI connection pools in GeoServer
  • Thanks to Andrea (GeoSolutions) for publishing this release
  • Check the release notes for more details
  • This release is made in conjunction with GeoTools 11.2

About GeoServer 2.5

Articles and resources for GeoServer 2.5 series:


by Andrea Aime at July 23, 2014 04:18 PM

GeoTools Team

GeoTools 11.2 released

The GeoTools community is happy to announce the latest  GeoTools 11.2 download:
This release is also available from our maven repository. This release is made in conjunction with GeoServer 2.5.2.

This is a release of the GeoTools 11 Stable series recommended for production systems. The release schedule now offers 6 months of stable releases followed by six months of maintenance releases.

A few highlights from the GeoTools 11.2-Release Notes:
  • Some image mosaic fixes about performance, granule harvesting, and heterogeneous mosaic management
  • Some fixes in XML encoding, in GML and WPS land
  • Upgraded imageio-ext dependency to 1.1.10
  • Some improvements in Grib and NetCDF formats 
Thanks to Andrea for this release (GeoSolutions).

About GeoTools 11

Summary of the new features for the GeoTools 11 series:
  • The DataStore API has a new removeSchema method to drop feature types. This new optional feature is currently implemented by the JDBCDataStore family (all spatial database backed stores), other stores will likely throw an UnsupportedOperationException
  • JDBCDataStore now exposes facilities to list, create and destroy indexes on database columns.
  • Ability to create and drop databases from the PostgisNGFactory
  • PostGis data store will now call ST_Simplify when the GEOMETRY_SIMPLIFICATION hint is provided, significantly speeding up loading of complex geometries  (the renderer can perform scale based simplification already, but doing it before sending the data speeds up data retrieval significantly)
  • ImageMosaic can now manage vector footprints for its granules, allowing to filter out no-data or corrupted sections of the imagery
  • All properties in a SLD style can now have a local unit of measure, as opposed to specifying the unit of measure per symbolizer. For example, if you need to have a line width to be 10 meters, its value can now be "10m"
  • Improved handling of data with 3D coordinates in JDBC data stores
  • A number of small improvements to the rendering engine, such as improved raster icon placement resulting in cleaner, less blurry output, improved label grouping, better handling of icons at the border of the map and in general much improved estimation of the buffer area needed to include all symbols in a map (for features that sit outside the map, but whose symbols are big enough to enter it).

by Andrea Aime (noreply@blogger.com) at July 23, 2014 02:44 PM

July 22, 2014

Boundless Blog

Boundless Growth

Eddie Pickle

Boundless is growing but our focus remains helping customers build the best web mapping applications. We’ve recruited a stronger leadership team and are enhancing our current products while also developing new products and services to help customers in new ways.

We recently added Ann Johnson as our new CEO to strengthen our team and leadership. Ann’s experience with enterprise software, particularly her deep knowledge of security, greatly expand our expertise in critical areas of Spatial IT.

At the same time, we have been steadily adding capabilities to OpenGeo Suite to enable easier, more scalable web services deployments. To help our customers successfully build enterprise mapping applications, we’re advancing open source software like OpenLayers 3 and providing new SDK templates that leverage this new technology. We continue to “lower the cost of free software” by making secure, fault tolerant, and scalable deployments of our open source stack simpler, faster, and easier.

Additionally, some of our key initiatives include:

With Ann joining Boundless, I’m focusing my efforts on developing these and other capabilities to grow our business, with a particular emphasis on developing new partnerships to create a new geospatial ecosystem based on open source software. We believe the future is bright for open source–based solutions to address a variety of challenges, from publishing data to asset management to customer services. I look forward to working with our customers and partners to reshape this industry!

The post Boundless Growth appeared first on Boundless.

by Eddie Pickle at July 22, 2014 07:46 PM


Esalab si unisce al programma di partnership di GeoSolutions!


GeoSolutions è lieta di annunciare l’accordo di Partnership raggiunto con l’azienda Esalab S.r.l. grazie al quale Esalab S.r.l. rappresenterà GeoSolutions  nelle regioni di Marche, Abruzzo e Basilicata.

L’accordo di Partnership tra GeoSolutions e Esalab costituisce l’inizio di un percorso che ha l’obiettivo di creare una rete di imprese coinvolte nello sviluppo e nella promozione dei principali software geospaziali Open Source da sempre promossi e sviluppati da GeoSolutions. La costruzione di una rete di imprese dislocate sul territorio nazionale e internazionale in grado di supportare gli utenti e di promuovere professionalmente i software geospaziali Open Source GeoServer, GeoNetwork e MapStore mira a raggiungere un ulteriore miglioramento dei servizi offerti.

I partner di GeoSolutions saranno formati direttamente dai technical lead di GeoSolutions e saranno, come nel caso dell’azienda Esalab, partner strategici già coinvolti a vario titolo nello sviluppo e nell’utilizzo dei software geospaziali Open Source promossi e curati da GeoSolutions in modo da garantire ai clienti dei partner la possibilità di interagire direttamente con coloro che sviluppano i software supportati per garantire una efficacia di servizio senza pari.

L’integrazione tra i tecnici di GeoSolutions e quelli delle aziende partner dislocate sul territorio è pensata nell’ottica di fornire al cliente finale un supporto ancora più presente e professionale attraverso un parco consulenti articolato ed eterogeneo capace di affrontare qualsiasi problematica in modo efficiente ed efficace.

Chi è GeoSolutions

GeoSolutions è un’azienda altamente specializzata  nella gestione, processamento e disseminazione  dei dati geospaziali sia raster che vettoriali tramite l’utilizzo di software Open Source secondo le specifiche dettate dall’Open  GeoSpatial Consortium  (OGC) e dell’ ISO Technical Committee 211 che a loro volta forniscono  la base delle regole di INSPIRE ed RNDT.

GeoSolutions è composta da professionisti di livello internazionale con esperienza pluriennale nella progettazione, realizzazione e supporto di infrastrutture Enterprise per la gestione di dati geospaziali. I membri dello staff di GeoSolutions sono a vario titolo leader di alcuni tra i principali prodotti  Open Source  per  il  mondo  geospaziale come GeoServer, GeoNetwork MapStore e GeoTools e forniscono per essi supporto professionale avanzato.

GeoSolutions annovera tra  i  suoi principali  clienti  enti  pubblici nazionali ed internazionali così come aziende private di tutto il mondo. United  Nations Food  and  Agriculture Organization (FAO),  United Nations World Food Program (WFP), NATO STO CMRE, EUMETSAT, German Space Agency (DLR), Austrian MetOffice (ZAMG), CSI Piemonte, Norwegian Public Roads Administration (NPRA), Magistrat Wien e tanti altri si avvalgono della collaborazione di GeoSolutions così come il Comune di Firenze e la Provincia di Firenze,  il Comune di Prato e la Provincia di Prato, il Comune di Bolzano ed il Comune di Genova.

Chi è Esalab

Esalab s.r.l. è una società fondata nel 1998 che opera nell'ambito della progettazione, dello sviluppo e dell'implementazione di Sistemi Informativi, rivolgendo la propria attività agli Enti Pubblici ed alle grandi società di Ingegneria.

Esalab è specializzata nella definizione di servizi specifici di web application e di soluzioni integrate Web-GIS per la gestione del territorio, per il monitoraggio ambientale, per la protezione civile e per il turismo in ambito Open Source, secondo le specifiche dell’Open GeoSpatial Consortium (OGC) e di INSPIRE.

Esalab dispone di un team di lavoro dedicato alla ricerca e alla realizzazione di progetti innovativi nel campo delle tecnologie GIS e WEBGIS.

Esalab annovera tra i suoi principali clienti enti pubblici nazionali e società di ingegneria: Regione Marche, Provincia di Barletta Andria Trani, Comune di Urbino, SAIPEM SpA, Proger SpA e numerosi comuni nel territorio nazionale.

GeoSolutions Alliance Partnership Program

Il programma GeoSolutions Alliance Partnership si rivolge alla aziende che supportano e propongono i prodotti Open Source sviluppati da GeoSolutions e che sono alla ricerca di un partner capace di offrire il necessario supporto tecnico, commerciale e di marketing per lo sviluppo del proprio mercato. Per maggiori informazioni si rimanda alla pagina dedicata, oppure si consiglia di contattarci direttamente menzionando il GeoSolutions Alliance Partnership Program.

by simone giannecchini at July 22, 2014 08:30 AM

July 21, 2014

Free and Open Source GIS Ramblings

Visualizing direction-dependent values

When mapping flows or other values which relate to a certain direction, styling these layers gets interesting. I faced the same challenge when mapping direction-dependent error values. Neighboring cell pairs were connected by two lines, one in each direction, with an associated error value. This is what I came up with:


Each line is drawn with an offset to the right. The size of the offset depends on the width of the line which in turn depends on the size of the error. You can see the data-defined style properties here:


To indicate the direction, I added a marker line with one > marker at the center. This marker line also got assigned the same offset to match the colored line bellow. I’m quite happy with how these turned out and would love to hear about your approaches to this issue.


These figures are part of a recent publication with my AIT colleagues: A. Graser, J. Asamer, M. Dragaschnig: “How to Reduce Range Anxiety? The Impact of Digital Elevation Model Quality on Energy Estimates for Electric Vehicles” (2014).

by underdark at July 21, 2014 06:48 PM


Training courses calendar: QGIS (Desktop, Server and Web) and PostGIS

We just published our Training Courses calendar for the period September 2014 – January 2015. This includes training courses about QGIS (Desktop, Server and Web) and PostgreSQL/PostGIS in both Italy and Portugal. Training courses about QGIS python programming are available on demand. For details (locations, prices, discounts, etc.) about training courses in Portugal see: http://www.faunalia.eu/pt/training.html […]

by faunaliagis at July 21, 2014 05:14 PM


Esalab joins GeoSolutions Alliance Partnership Program


GeoSolutions and Esalab are glad to announce their Partnership.

Esalab will be the exclusive representative company of the OpenSDI Suite (GeoServer, GeoWebCache, GeoNetwork and MapStore) for the following italian regions: Marche, Abruzzo and Basilicata.

Since more than ten years Esalab develops products and projects relating to geospatial field based on GeoServer and integrated with GeoNetwork.

The Partnership program between GeoSolutions and Esalab allows the two companies to offer a more and more qualified support to the end users.

GeoSolutions Alliance Program

GeoSolutions Alliance Program is the partnership program for companies that want to extend their market reach by adding or boosting their skills on GeoSpatial Open Source Products leveraging on a collaboration with GeoSolutions Team.

The goal is to create a network of certified partners which are able to support the growth and deeper penetration of Open Source GeoSpatial Products by positively addressing the increased demand for professional support services and solutions.

Check this page for additional information.

by simone giannecchini at July 21, 2014 03:00 PM

July 20, 2014

A GeoSpatial World

PostGIS 3D Viewer


image n viewer 3D pour PostGIS

image pg3DViewer_title[6]

image ntroduction

Avec la version 2.0 PostGIS est entré dans le monde de la 3D, il est possible de stocker des géométries 3D avec l’ajout de la coordonnée Z dans toutes les géométries existantes et de stocker des géométries volumétriques avec l’introduction de deux nouveaux type  :

  • TIN(Triangulated Irregular Network, une collection de TRIANGLE)
  • POLYHEDRALSURFACE (une collection de POLYGON)

Cela fait déjà un an que la création d’un viewer pour visualiser les géométries 3D de PostGIS me trottait dans la tête suite à un échange avec Claus Nagel et Felix Kunde de virtualcitySYSTEMS à propos de l’outil d’import du format CityGML que j’avais réalisé CityGML vers PostGIS 2.0 , ils m’avaient conseillé alors de me diriger vers le développement d’un viewer 3D. Lorsque récemment j’ai repris contact avec eux pour leur parler de mon développement en cours, ils ont accueilli la nouvelle avec enthousiasme et ont bénéficié de versions beta, ce qui m’a grandement aidé pour mes choix dans la finalisation de mon application.

Aujourd’hui la 3D est de plus en plus présente dans le monde SIG avec le format CityGML et dans le monde de l’architecture avec le format IFC, importer ces formats dans une base de données PosgtgreSQL/PostGIS est une démarche naturelle car cela apporte toute la puissance de traitement des bases de données spatiale pour la gestion de ces données.

Pour le format CityGML la société virtualcitySYSTEMS met à disposition un schéma de base de données Open Source et gratuit pour le stockage et la gestion de ‘3D City Models’. Ce schéma de base de données est le reflet du modèle de données CityGML. Les données peuvent être importées via un outil d’import/export .
le lien pour accéder à leur site : http://virtualcitysystems.de/en/solutions.html#3dcitydb 

A ce stade du développement je n’affiche que des géométries de type POLYGON, MULTIPOLYGON, TIN et POLYHEDRALSURFACE. Ce qui permet d’afficher toutes type de géométries volumétriques répondant à cette contrainte. Je vais travailler rapidement sur les autres type de géométrie POINT, LINESTRING… , ce qui fera l’objet d’une nouvelle version de l’application dans les prochaines semaines.

J’ai développé cet outil en C# 2013 avec :

  • La librairie GDAL/OGR
[image66.png] GDAL - Geospatial Data Abstraction Library
  • ActiViz .Net un wrapper pour VTK
  ActiViz .Net

vtk-logo VTK
  • PostgreSQL 9.2
(thumbnail) PostgreSQL Windows
  • PostGIS 2.2.0 dev
adbadge_wide_240 Postgis


Pour l’intégration de données 3D j’ai testé l’outil 3DCityDB-Importer-Exporter http://http://www.3dcitydb.org/3dcitydb/downloads/ qui permet d’importer des fichiers au format CityGML dans une base de données PostgreSQL avec PostGIS (a partir de la version 2.0).


Voici une extraction du document 3DCityDB-v2_0_6-postgis-Tutorial.pdf concernant la partie PostGIS (en anglais ) :












image nstallation


Cliquez sur le lien pg3DViewer_setup.exe pour télécharger le programme d’installation, puis lancer l’exécution.

Cliquer sur le  bouton Suivant à chaque étape, puis sur le bouton Terminer.








image tilisation

Avant de commencer à utiliser pg3Dviewer vous devez avoir une base de données PostgreSQL avec la cartouche spatiale PostGIS version 2.0 ou supérieure. Cette base de données doit contenir des données 3D, l’idéal serait que vous ayez créé une base 3DCityDB et importé un ou plusieurs fichiers CityGML. Voici un lien ou vous pourrez télécharger des données CityGML Rotterdam 3D, demandez à notre ami Google de traduire la page cela peut aider, cela permet de découvrir un lien sur le site permettant de télécharger un fichier pdf contenant une carte avec tous les nom des quartiers téléchargeables http://www.rotterdam.nl/GW/Images/Gemeentewerken%20Home/Landmeten/overzicht%20buurten.pdf , il ne vous reste plus qu’a choisir les quartiers dans la liste sous le lien.

Vous pouvez quand même faire les premiers tests sans avoir téléchargé de données.

image Double cliquez sur l’icone créé par le programme d’installation sur le bureau pour lancer l’application.



Connecter vous à votre base de données 3D



Commencez par cliquer sur cet icône pour vous connecter a une base de données PostgreSQL/PostGIS version 2.0 ou supérieur contenant des données 3D ou prête à en recevoir.

  • Choisissez localhost pour serveur si votre base de données est en local sur votre machine ou bien saisissez l’adresse IP de votre serveur
  • le port est par défaut 5432, changez le si nécessaire
  • saisissez l’utilisateur
  • saisissez le mot de passe
  • choisissez une base de donnée dans la combobox
  • cliquez sur le bout OK pour valider votre saisie.


Visualiser une géométrie de type POLYHEDRALSURFACE

Dans le panneau Query copiez la requête suivante :

SELECT st_force_collection(
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
        ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)),
        ((1 0 0, 1 1 0, 1 1 1, 1 0 1, 1 0 0)),
        ((1 1 0, 0 1 0, 0 1 1, 1 1 1, 1 1 0))


Cliquez sur l’icone ‘Execute query

Vous obtenez ce résultat.

Interactions de la souris avec la fenêtre de rendu:
- Bouton gauche : Rotation
- Roulette          : Zoom
- Bouton droit    : Zoom dynamique
- Bouton gauche + touche majuscule : Pan
Testez les différentes associations entre les touches Majuscule, Ctrl et alt et  les boutons de la souris.

Interactions touches claviers avec la fenêtre de rendu :
- Touche w : passe en mode affichage fil de fer.
- Touche s  : passe en mode affichage surfacique.
La fenêtre de rendu après rotation. image

Avant de continuer une petite explication sur la requête utilisé précédemment :

SELECT st_force_collection(
        ((0 0 0, 0 1 0, 1 1 0, 1 0 0, 0 0 0)),
        ((0 0 0, 0 0 1, 0 1 1, 0 1 0, 0 0 0)),
        ((0 0 0, 1 0 0, 1 0 1, 0 0 1, 0 0 0)),
        ((0 0 1, 1 0 1, 1 1 1, 0 1 1, 0 0 1)),
        ((1 0 0, 1 1 0, 1 1 1, 1 0 1, 1 0 0)),
        ((1 1 0, 0 1 0, 0 1 1, 1 1 1, 1 1 0))


Comme vous avez du le remarquer la fonction ST_GeomFromText est encadré par la fonction ST_Force_Collection. Pourquoi rajouter cette fonction. Si vous exécuter cette requête sous pgAdmin III en encadrant le tout par ST_AsText vous obtenez comme résultat ceci :
POLYGON Z ((0 0 0,0 1 0,1 1 0,1 0 0,0 0 0)),
POLYGON Z ((0 0 0,0 0 1,0 1 1,0 1 0,0 0 0)),
POLYGON Z ((0 0 0,1 0 0,1 0 1,0 0 1,0 0 0)),
POLYGON Z ((0 0 1,1 0 1,1 1 1,0 1 1,0 0 1)),
POLYGON Z ((1 0 0,1 1 0,1 1 1,1 0 1,1 0 0)),
POLYGON Z ((1 1 0,0 1 0,0 1 1,1 1 1,1 1 0)))
Nous sommes passé d’une géométrie de type POLYHEDRALSURFACE à une géométrie de type GEOMETRYCOLLECTION Z contenant des POLYGON Z, mais rappelez vous une géométrie de type POLYHEDRALSURFACE est aussi une collection de POLYGON donc jusque la tout va bien.
Revenons à la question initiale pourquoi utiliser la fonction ST_Force_Collection, tout simplement parce la librairie GDAL que j’utilise dans mon développement ne reconnait pas encore les géométries de type POLYHDERALSURFACE. Cette astuce permet de contourner la limitation présente.

Visualiser une géométrie de type TIN

Dans le panneau Query copiez la requête suivante :

SELECT st_polygon(
            ((0 0 0, 1 0 0, 0 1 0, 0 0 0)),
            ((0 0 0, 1 0 0, 0 0 1, 0 0 0)),
            ((0 0 0, 0 0 1, 0 1 0, 0 0 0)),
            ((0 0 1, 1 0 0, 0 1 0, 0 0 1))

    ) as geom
SELECT st_forceCollection(st_collect(geom))
FROM res


Cliquez sur l’icone ‘Execute query

Vous obtenez ce résultat après rotation.


La requête utilisée nécessite une explication :

SELECT st_polygon(
            ((0 0 0, 1 0 0, 0 1 0, 0 0 0)),
            ((0 0 0, 1 0 0, 0 0 1, 0 0 0)),
            ((0 0 0, 0 0 1, 0 1 0, 0 0 0)),
            ((0 0 1, 1 0 0, 0 1 0, 0 0 1))

    ) as geom
SELECT st_forceCollection(st_collect(geom))
FROM res

Comme pour la requête concernant une géométrie de type POLYHEDRALSURFACE, les géométries de type TIN ne sont pas encore reconnues par la librairie GDAL. Pour rappel une géométrie de type TIN est aussi une collection de TRIANGLE que ne reconnait pas la librairie GDAL ce qui explique la requête légèrement plus complexe.
Si vous exécutez la requête suivante sous PgAdmin III :

SELECT St_AsText(st_force_collection(
            ((0 0 0, 1 0 0, 0 1 0, 0 0 0)),
            ((0 0 0, 1 0 0, 0 0 1, 0 0 0)),
            ((0 0 0, 0 0 1, 0 1 0, 0 0 0)),
            ((0 0 1, 1 0 0, 0 1 0, 0 0 1))

Vous obtenez ceci :

TRIANGLE Z ((0 0 0,1 0 0,0 1 0,0 0 0)),
TRIANGLE Z ((0 0 0,1 0 0,0 0 1,0 0 0)),
TRIANGLE Z ((0 0 0,0 0 1,0 1 0,0 0 0)),
TRIANGLE Z ((0 0 1,1 0 0,0 1 0,0 0 1)))

Que ne reconnait pas la librairie GDAL, ce qui explique la première partie de la requête qui recrée des géométries de type POLYGON à partir des géométries de type TRIANGLE. La seconde partie de la requête (ou l’on retrouve la fonction ST_Force_Collection) recrée une GEOMETRYCOLLECTION Z contenant des POLYGON Z donc interprétable par la librairie GDAL.

Pour simplifier les requêtes sur des géométries de type TIN, la création d’une fonction opérant la transformation me parait indispensable.


Fonction passant d’une géométrie de type TIN à une géométrie de type GEOMETRYCOLLECTION Z

-- Function: ST_TinToGeomCollection(geometry, INTEGER)

-- DROP FUNCTION ST_TinToGeomCollection(geometry, INTEGER);

CREATE OR REPLACE FUNCTION ST_TinToGeomCollection(geometry, integer)
  RETURNS geometry AS
    sql text;
    rec record;
'WITH res AS
          SELECT st_polygon(st_boundary((st_dump(geometry('||quote_literal($1::text)||'))).geom),'||$2||') as geom
         SELECT st_forceCollection(st_collect(geom)) as geom FROM res
       RETURN rec.geom;
  COST 100;
ALTER FUNCTION ST_TinToGeomCollection(geometry,integer)
  OWNER TO postgres;
GRANT EXECUTE ON FUNCTION ST_TinToGeomCollection(geometry, integer) TO public;
GRANT EXECUTE ON FUNCTION ST_TinToGeomCollection(geometry, integer) TO postgres;

Vous allez créer la fonction dans votre base de données 3D :

  • Copier le contenu du cadre ci-dessus et collez dans la fenêtre de requêtes de PgAdmin III
  • lancez l’exécution, la fonction est créée.

la requête pour l’affichage de géométrie de type TIN devient alors:

select st_astext(ST_TinToGeomCollection(
            ((0 0 0, 1 0 0, 0 1 0, 0 0 0)),
            ((0 0 0, 1 0 0, 0 0 1, 0 0 0)),
            ((0 0 0, 0 0 1, 0 1 0, 0 0 0)),
            ((0 0 1, 1 0 0, 0 1 0, 0 0 1))

            ) ,0))
le second paramètre de la fonction ST_TinToGeomCollection étant le SRID de la géométrie, 4326 par exemple si vous êtes dans un système de coordonnées WGS84. Si vous ne le connaissez pas saisissez la valeur 0.

Affichage de données dans une base 3DCityDB contenant des données au format CityGML

Dans le panneau Query copiez la requête suivante :

WITH wallsurface as
SELECT a.id,c.root_id,st_collect(c.geometry) AS g,'255:128:0'::text AS rgb
FROM building a,thematic_surface b, surface_geometry c
WHERE b.building_id=a.id
AND b.type='WallSurface'
AND c.root_id=b.lod2_multi_surface_id
GROUP BY a.id,c.root_id
), roofsurface as
SELECT a.id,c.root_id,st_collect(c.geometry) AS g,'255:0:0'::text AS rgb
FROM building a,thematic_surface b, surface_geometry c
WHERE b.building_id=a.id
AND b.type='RoofSurface'
AND c.root_id=b.lod2_multi_surface_id
GROUP BY a.id,c.root_id
select id,root_id,g as geom,rgb
from wallsurface
union all
select id,root_id,g as geom,rgb
FROM roofsurface


Cliquez sur l’icone ‘Execute query

Dans la requête il est possible d’affecter une couleur à un type de géométrie, la syntaxe est le code R:G:B entre quotte suivi de AS rgb :
’255:128:0’ AS rgb  (wallsurface)
‘255:0:0’     AS rgb  (rootsurface)



image Sortie de l’application.
image Connexion à une base de données.
image Panneau Requête
image Remet à blanc la fenêtre de requêtes
image Ouvre un fichier requête, qui ne doit contenir qu’une seule requête.
image Exécution de la requête.
image Collapse le panneau sur la gauche.
image Panneau affichage 3D
image Change la cuouleur du fond, Blanc ou Noir.
image Zoom Full.
image Zoom Plus.
image Zoom Moins.
image Efface le contenu de la fenêtre de rendu, toutes les géométries précédemment chargées sont supprimées.
image Panneau données attributaires
image Collapse le panneau sur le bas.

image onclusion.

Ce billet met à votre disposition un outil permettant de visualiser des géométries 3D stockées dans une base de données PostGIS 2.0 ou supérieure. Il me reste à implémenter l’affichage des points et des lignes.

Toutes suggestions d’amélioration seront les bienvenues, j’attends vos retours.

by Jérôme ROLLAND (noreply@blogger.com) at July 20, 2014 04:16 PM

A GeoSpatial World

PostGIS 3D Viewer introduction


image_thumb178 n viewer 3D pour PostGIS

image_thumb7[1] pg3DViewer_title6_thumb8

image_thumb175 ntroduction

Avec la version 2.0 PostGIS est entré dans le monde de la 3D, il est possible de stocker des géométries 3D avec l’ajout de la coordonnée Z dans toutes les géométries existantes et de stocker des géométries volumétriques avec l’introduction de deux nouveaux type  :

  • TIN(Triangulated Irregular Network, une collection de TRIANGLE)
  • POLYHEDRALSURFACE (une collection de POLYGON)

Cela fait déjà un an que la création d’un viewer pour visualiser les géométries 3D de PostGIS me trottait dans la tête suite à un échange avec Claus Nagel et Felix Kunde de virtualcitySYSTEMS à propos de l’outil d’import du format CityGML que j’avais réalisé CityGML vers PostGIS 2.0 , ils m’avaient conseillé alors de me diriger vers le développement d’un viewer 3D. Lorsque récemment j’ai repris contact avec eux pour leur parler de mon développement en cours, ils ont accueilli la nouvelle avec enthousiasme et ont bénéficié de versions beta, ce qui m’a grandement aidé pour mes choix dans la finalisation de mon application.

Aujourd’hui la 3D est de plus en plus présente dans le monde SIG avec le format CityGML et dans le monde de l’architecture avec le format IFC, importer ces formats dans une base de données PosgtgreSQL/PostGIS est une démarche naturelle car cela apporte toute la puissance de traitement des bases de données spatiale pour la gestion de ces données.

Pour le format CityGML la société virtualcitySYSTEMS met à disposition un schéma de base de données Open Source et gratuit pour le stockage et la gestion de ‘3D City Models’. Ce schéma de base de données est le reflet du modèle de données CityGML. Les données peuvent être importées via un outil d’import/export .

Affichage de données CityGML dans le viewer 3D



Continuer la lecture/Continue reading “PostGIS 3D Viewer”

by Jérôme ROLLAND (noreply@blogger.com) at July 20, 2014 04:12 PM

July 19, 2014

OSGeo News

ISPRS joins "Geo for All"

by aghisla at July 19, 2014 12:30 PM

July 18, 2014

OSGeo News

OSGeo Charter Member Elections 2014

by aghisla at July 18, 2014 10:53 AM


Создание тайлового сервера на основе данных OpenStreetMap и mod_tile

Новая статья, посвящённая созданию тайлового сервера с помощью стека технологий, используемого для создания тайлов на сайте OpenStreetMap.

Прочитать | Обсудить

by Denis Rykov at July 18, 2014 10:18 AM

Jackie Ng

Other new things (or things I forgot to talk about) in Fusion for MapGuide 2.6

This post has been stuck in my draft queue for several months now. I guess I forgot about this post so some of the content in this post may have already been talked about. Still, there some content here that I'm certain hasn't been talked about, and since I currently don't have idea at the moment what has and hasn't been talked about, I've decided to just publish the whole post.

So here's some new features (or features I've probably already talked about) in Fusion for MapGuide Open Source 2.6

OpenLayers updated to 2.13.1

OpenLayers in Fusion has been updated to the latest stable release, which is 2.13.1. This gives us important fixes for tiled layers in IE10, among other fixes and improvements from the 2.12 release.

Short of a few specific customizations to the Google layer (to disable tilt at lower levels), you'll be glad to hear that the OpenLayers included with Fusion is now mostly vanilla with very few modifications. Making your own custom OpenLayers build should be a painless affair.

Built with Closure

fusionSF-compressed.js is now built with the Google Closure Compiler.

Besides giving us a 50kb reduction in file size over YUI compressor with default settings, building through Closure gives us Source Map support for modern browsers.

What this means is you can now debug and step through fusionSF-compressed.js in its uncompressed form with full comments without having to modify the template files to switch to a debug version of Fusion. Current versions of Chrome and Firefox both support source maps in their respective developer tools.

With advanced optimizations, fusionSF-compressed.js file size can be reduced by up to 500kb! Unfortunately, building with closure's advanced optimizations may actually alter application behaviour and requires a thorough audit of the code in Fusion first before we can determine if it is safe for us to flick the switch. So for now, we build with default settings.

Delayed refresh on layer/group toggle in legend

When you toggle a layer or group on/off in the legend, it triggers a map refresh. If you do this on multiple layers/groups in quick succession, it's going to fire off that many refresh requests. Not very efficient.

For this release, we've added support for a new DrawDelay extension property in the Map element of the MapGroup. Setting this property will cause any toggle in the legend to delay the refresh for that amount of time (in ms).

Having this property set will allow you to toggle multiple layers/groups in the legend in quick succession, but only trigger a single refresh request at the end as long as each individual toggle falls within the delay period. This feature is opt-in. By default, the delay is 0 which means legend widget will behave like before where each toggle triggers a refresh immediately.

More QuickPlot tweaks

The legal disclaimer is now a configurable element

Of course, you may want this element to be mandatory, so we've added a new AllowDisclaimerToggle extension property that determines whether this checkbox will be shown.

In addition, you can configure the initial checked state of these elements through the following new extension properties:
  • ShowLegend
  • ShowNorthArrow
  • ShowCoordinates
  • ShowScaleBar
  • ShowLegalDisclaimer (does nothing if there is no legal disclaimer attached or AllowDisclaimerToggle = false)

by Jackie Ng (noreply@blogger.com) at July 18, 2014 09:36 AM

Jackie Ng

Making MBTiles databases with a little help from mapguide-rest

So allow me to explain what this screenshot represents

What you are looking at is tiles stored in a MBTiles database. The Android app in question is Locus Map, which supports MBTiles databases. MBTiles is an ideal format for delivering tiled maps to mobile devices. It's just a SQLite database that uses the same intuitive XYZ tiling scheme used by OpenStreetMap and friends.

This post will show you how to make such MBTiles databases with a little help from the mapguide-rest extension.

[NOTE: These instructions were used against the current master branch of mapguide-rest which supercedes the 0.8 release, and has several fixes for tile caching. These instructions may or may not work on the 0.8 release]

First thing you need is to download and install Portable Basemap Server.

In the directory where you installed Portable Basemap Server, edit the CustomOnlineMaps.xml and add a new map source to any XYZ tileset accessible from mapguide-rest

<name>mapguide-rest Sheboygan</name>
<url><![CDATA[http://localhost/mapguide/rest/library/Samples/Sheboygan/MapsTiled/SheboyganNoWatermark.MapDefinition/xyz/Base Layer Group/{$z}/{$x}/{$y}/tile.png]]></url>

Note the {$x}, {$y} and {$z} placeholder tokens in the URL. These placeholders are required and Portable Basemap Server will be replacing them with actual X, Y and Z values when fetching tiles.

Once you've edited and saved CustomOnlineMaps.xml, run the PortableBasemapServer.exe as an administrator.

What is unique about Portable Basemap Server (and something I could not find in any other free/OSS packages), is that Portable Basemap Server includes a convenient function to create an MBTiles database from any online tiled map (that presumably follows a XYZ tiling scheme). This function is accessible from the Format Convert menu.

In the Format Convert window, change the Data Source Type to the map source you registered in CustomOnlineMaps.xml. If your tiled map does not span the entire world, you may want to hone in to the specific region your tiled map is in with one of the existing map sources before switching over to your mapguide-rest map source.

Now do the following:

  • Specify the path of the MBTiles database you want to create
  • Trace a box around the area you want to fetch the tiles for
  • Tick the Download Levels (aka. Zoom levels) you want to fetch tiles for. The map preview shows the current zoom level, so generally you want to tick that level and every level above that.
  • Tick Compact? to optimize storage of redundant tiles

Once you are satisfied with the settings, click Start to initiate the tile seeding process. Portable Basemap Server will spit out lots of useful progress information while building the MBTiles database.

Once the tile seeding process is complete, you can now transfer this MBTiles database file to your mobile device and load it into your MBTiles supported app.

As a bonus, the actual process of building an MBTiles database also seeds the XYZ tile cache on the server-side. So this process can also serve as a XYZ tile cache seeder if you have no use for MBTiles.

If you're interested in what platforms support MBTiles, check out the MBTiles wiki.

by Jackie Ng (noreply@blogger.com) at July 18, 2014 04:36 AM

Jackie Ng

Announcing: MapGuide Open Source 2.6 RC2

The number of critical issues revolving around v2.6 QUERYMAPFEATURES that have cropped up since the MapGuide 2.6 RC1 release have necessitated a second release candidate.

Here's a list of changes since RC1:
  • Fix: Bad sample code and data in light of the Sheboygan dataset update.
  • Fix: v2.6 QUERYMAPFEATURES cannot append/update viewer selections via shift-click in AJAX and Fusion viewers.
  • Fix: v2.6 QUERYMAPFEATURES cannot handle dates before Jan 1, 1970.
  • Fix: GEOMETRY parameter in QUERYMAPFEATURES operation should be optional. QUERYMAPFEATURES should be able to accept a query geometry (via GEOMETRY) or an XML selection string (via FEATUREFILTER) when updating viewer selections.
  • Remove setselection AJAX viewer helper script which is made redundant with the above fix.
  • Fusion: Add int16 identity property support for search widget.
  • Fusion: Allow blank titles in print widget.
  • Fusion: Preserve inner stack trace (if possible) when reporting back un-handled AJAX errors.

by Jackie Ng (noreply@blogger.com) at July 18, 2014 03:22 AM

Petr Pridal

WebGL Earth 2: the Leaflet compatible JavaScript 3D globe powered by Cesium


To embed a 3D globe in a website with an open-source project is now really easy. If you have a simple map application made with the popular Leaflet library, you can with almost no effort turn it into 3D interactive globe with the new WebGL Earth 2 project: just replace "L." with "WE." ;-)

See the examples of use of the API:

The globe is made only with JavaScript, using WebGL HTML5 technology. No browser plugin is required. It means it runs automatically on all modern browsers on all computers with recent graphic cards. Chrome, Firefox, Safari, IE 11+ and even the latest Android mobile devices and soon also all Apple devices with iOS 8+.

This is a complete reimplementation of our original WebGL Earth project.

Our own JavaScript rendering core has been replaced with the great open-source Cesium project to maximally gain from the open-source principles of sharing of the development efforts. We are looking forward to contributing to the Cesium project in the future, instead of developing our own separate core.

Our target is still the same: an easy to use open-source project with public API, allowing easy embedding of a modern 3D globe in websites, with out-of-the box user friendly interaction and support for mobile devices whenever possible.

In version 2.0 we have decided to emulate the popular Leaflet JS JavaScript API enriched with 3D functions for altitude, tilting and heading of the view, and flying animations on globe. The core functions are implemented and we hope to improve the compatibility of the APIs with the help of community in the future (GitHub pull requests are very welcome ;-).

The project also preserves the original WebGL Earth JavaScript API 1.0 whenever possible.

OpenStreetMap, Bing, MapBox and other tile layers can be easily used with the globe.

Custom geodata (GeoTIFF, ECW, MrSID, ...) can be easily preprocessed with MapTiler (http://www.maptiler.com) to create attractive globes, which can be hosted on any webserver without additional software, on a LAMP hosting with TileServer-php or even on Amazon S3 and other cloud storage services. See: http://tileserver.maptiler.com/#cassini-terrestrial/webglearth

by Petr Pridal (noreply@blogger.com) at July 18, 2014 02:06 AM

July 17, 2014

Paulo van Breugel

Exporting your GRASS raster using r.out.gdal? Check the createopt options!

GRASS GIS can export your raster layer in most common (and quite a few less common) data formats using the r.out.gdal function (menu: file – export raster map – common raster formats). Exporting is so simple that you may forget that depending on the output format there are different options to optimise your output raster layer. […]

by pvanb at July 17, 2014 10:50 AM

July 16, 2014

FOSS4G 2014

RSVP for PostgreSQL Day, Saturday September 6th

Do you use PostGIS and/or PostgreSQL?

As you are planning your FOSS4G travel, here’s another excellent event to have on your radar.

Saturday, September 6th, is PostgreSQL Day, co-hosted by the Portland Postgres Users Group (PDXPUG)  and Portland State University. Attendance is free, but RSVP is required (RSVP here). See below for more details on the event.

Looking forward to seeing you in September!


Date: Saturday, September 6, 2014

Time: 9:30am through 5:30pm

Place: Portland State University, Room EB 102, 1930 SW 4th Avenue, Portland, Oregon 97201. The venue is reachable by street car, bus or light rail, see Tri-Met for schedule and fare information.

Registration: Space is limited, please RSVP!

Food: Light snacks & beverages provided. Breakfast and lunch is on your own. There’s a wonderful cart pod right across the street; bring $10-15 for lunch.

Presentations: Organizers are looking for presenters for the PDXPUG Day. Talks should be about 45 minutes in length, and about any of the following topics:

  • PostgreSQL administration and performance
  • Case studies of interesting uses of PostgreSQL and PostGIS
  • Interesting applications built on PostGIS or PostgreSQL
  • Database and/or geographic application development
  • Database-related DevOps
  • SQL and stored procedure programming
  • New Postgres/PostGIS features and hacking Postgres/PostGIS

Organizers will also be taking lightning talks of 5 minutes each, on similar topics. Email your talk proposal to Mark Wong at markwkm -at- postgresql.org.


The post RSVP for PostgreSQL Day, Saturday September 6th appeared first on FOSS4G 2014.

by K.Bott at July 16, 2014 05:14 PM