Vous pouvez lire le billet sur le blog La Minute pour plus d'informations sur les RSS !
Feeds
8044 items (0 unread) in 53 feeds
-
Décryptagéo, l'information géographique
-
Cybergeo
-
Revue Internationale de Géomatique (RIG)
-
SIGMAG & SIGTV.FR - Un autre regard sur la géomatique
-
Mappemonde
-
Imagerie Géospatiale
-
Toute l’actualité des Geoservices de l'IGN
-
arcOrama, un blog sur les SIG, ceux d ESRI en particulier
-
arcOpole - Actualités du Programme
-
Géoclip, le générateur d'observatoires cartographiques
-
Blog GEOCONCEPT FR
-
Cartographie – Icem7
-
Géoblogs (GeoRezo.net)
-
Geotribu
-
Les cafés géographiques
-
UrbaLine (le blog d'Aline sur l'urba, la géomatique, et l'habitat)
-
Séries temporelles (CESBIO)
-
Datafoncier, données pour les territoires (Cerema)
-
Cartes et figures du monde
-
SIGEA: actualités des SIG pour l'enseignement agricole
-
Data and GIS tips
-
Neogeo Technologies
-
Oslandia
-
ReLucBlog
-
L'Atelier de Cartographie
-
My Geomatic
-
archeomatic (le blog d'un archéologue à l’INRAP)
-
Makina Corpus
-
Camptocamp
-
Veille cartographie
-
Carnet (neo)cartographique
-
Le blog de Geomatys
-
GEOMATIQUE
-
Geomatick
-
CartONG (actualités)
Planet OSGeo
-
11:13
Jackie Ng: MapGuide dev diary: ... and now we begin the great migration
sur Planet OSGeoPreviously, we made some important breakthroughs on the PHP8 binding for MapGuide. Our sanity PHP tests passed (meaning that the core essentials of the MapGuide API were working), but the main PHP test suite itself had a large amount of failures.
Thanks to dead-easy PHP debugging in VSCode, I was able to step into the PHP test code line-by-line and was able to discover that most of these failures was due to a change in how we're meant to be reading out expected test results from our test fixture SQLite databases. We were reading out test results as SQLite BLOBs which broke test result comparison in PHP8. Switching over to reading out these test results as strings instead fixed up along with updating how we check for exceptions thrown by the MapGuide API fixed up all but one test case.
That one remaining test case failure is due deleting a resource created in a preceding test that doesn't exist. While I could spend more time finding out why, the fact of the matter is that 99.9% of the current test suite is now passing on Windows, and it would be more fruitful now to sort out the revised bundling and configuration story with PHP 8 and try to get a working MapGuide installation with the PHP 8 bundled installation, fixing up whatever code and configurations along the way until we have all of our PHP-based MapGuide applications fully functional, which for reference is the following:
- The Site Administrator
- The Feature Source schema report/preview
- The AJAX viewer with PHP backend
- Fusion
In the interest of getting things right this time round and not have to bundle 2 copies of PHP (TS and NTS builds), I've decided to go all in on using the NTS build of PHP for both IIS and Apache. This means that setting up IIS will now use the correct binaries for FastCGI, but means that we can no longer use mod_php when setting up Apache [httpd] as that can only be used with the thread-safe builds of PHP. Instead, for Apache [httpd] we will now set up FastCGI for use with PHP as well via mod_fcgid.
So I grabbed a compatible copy of mod_fcgid.so from apachelounge and dropped it into my [httpd] installation, updated [httpd.conf] to use FastCGI for PHP, flipped display_errors = On in php.ini, spun up both the MapGuide Server and [httpd,] opened the MapGuide Site Administrator and was greeted with the following.
And I am so glad to see this error message :)
Because that is an error message reported by PHP, so we know PHP itself (via FastCGI) is working.
Also the error is about a missing constants.php file, which if you've been following my previous posts is a file that is no longer necessary as our new PHP 8 bindings defines the constants within the binary extension itself.
This error is one of who-knows-how-many things in our PHP applications that will need fixing up to be PHP 8 compatible.
Time to start a-fixing! -
11:00
CARTO Blog: Procedural joins CARTO
sur Planet OSGeoWe are happy to announce that Procedural Ltd, the company behind the popular open source 3D mapping library Procedural GL, will join CARTO. The team behind the technology w... -
2:04
Sean Gillies: Superior training week eight recap
sur Planet OSGeoWeek eight was a rest week. Only four runs, none longer than 7.5 miles. I hope the small numbers this week don't come back to haunt me as I ramp up again.
3 hours, 58 minutes
21.5 miles
2,260 ft D+
I didn't sleep well this week and despite some good meals got into a poor mood by Friday. Hitting the trail both days this weekend lifted my spirits a lot. Unlike Boulder and Denver, Fort Collins got very little precipitation from Friday's snowstorm, so the trails were dry as usual. Today I ran to the summit of Arthur's Rock, which I usually pass by, during the only overcast hours of the day.
Arthur's Rock from the northwest
Looking northeast over Horsetooth Reservoir from the summit
Next week I'm doing my first uphill workout. My body felt good on the climb today and I'm looking forward to pushing it more on Tuesday.
-
23:38
Sean Gillies: Return (from running) to hot chicken
sur Planet OSGeoI told my kids about my plans to become a part-time sandwich influencer and made crispy, not fried, chicken sandwiches for all three of us after my trail run. I love fried chicken, but I don't feel like becoming the owner of a jar of used oil right now, so I baked the chicken with a crispy coating on a sheet pan. The chicken was served hot, but was not Hot Chicken, not by a mile.
Each sandwich had one boneless, skinless chicken thigh at its core. I dredged the meat in a mixture of white flour, Kashmiri chile powder, and salt; dipped it egg white left over from making garlic aioli a couple days ago; then dredged it again in a mix of panko breadcrumbs, dried thyme, and olive oil. I baked these on a piece of parchment paper in my oven at 400 °F for 25 minutes.
While the chicken was baking, I sliced a small red onion and a large jalapeño, and made a small batch of coleslaw: thinly sliced green cabbage and grated carrot tossed with salt, caraway seeds, garlic aioli, yogurt, and rice wine vinegar. When the chicken was done, we put it on a basic hamburger bun and topped it with onion and coleslaw. I added a lot of fresh jalapeño, while the kids opted for sprinkling Cholula onto the crispy chicken.
One day I'll show a picture of a sandwich with no red onion
The sandwiches were delicious. The meat was thoroughly cooked, but still moist, and the coating had a nice crunch. We all agreed that we could have made the meat spicier by adding cayenne to the first dredging mix and to the crumbs. When I do this again, I might add apple to the coleslaw, making it more like the Bird's sweeter slaw.
While prepping, I listened to "Return to Hot Chicken" from Yo La Tengo's 1997 album I Can Hear The Heart Beating As One. There's a fun story about eating at Prince's Hot Chicken restaurant (and more) in an interview of James McNew by Aquarium Drunkard.
-
2:00
PostGIS Development: PostGIS 3.3.0alpha1
sur Planet OSGeoThe PostGIS Team is pleased to release PostGIS 3.3.0alpha1! This is the first release to support PostgreSQL 15. Best Served with PostgreSQL 15 Beta1. This release supports PostgreSQL 11-15.
3.3.0alpha1
This release is an alpha of a major release, it includes bug fixes since PostGIS 3.2.1 and new features.
-
23:10
Martin Davis: Concave Hulls of Polygons
sur Planet OSGeoA common spatial need is to compute a polygon which contains another set of polygons. There are numerous use cases for this; for example:
- Generalizing groups of building outlines (questions: 1, 2)
- Creating "district" polygons around block polygons (questions: 1)
- Removing gaps between sets of polygons (questions: 1, 2, 3, 4)
- Joining two polygons by filling the space between them (questions: 1, 2)
The simplest way to compute an area enclosing a set of geometries is to compute their convex hull. But the convex hull is a fairly coarse approximation of the area occupied by the polygons, and in most cases a better representation is required.
Here's an example of gap removal between two polygons. Obviously, the convex hull does not provide anything close to the desired result:
Approach: Buffer and Unbuffer
A popular suggestion is to buffer the polygon set by a distance sufficient to "bridge the gaps", and then "un-buffer" the result inwards by the same (negative) distance. But the buffer computation can "round off" corners, which usually produces a poor match to the input polygons. It also fills in the outer boundary of the original polygons.
Approach: Concave Hull of Points
A more sophisticated approach is to use a concave hull algorithm. But most (or all?) available concave hull algorithms use points as the input constraints. The vertices of the polygons could be used as the constraint points, but since the polygon boundaries are not respected, the computed hull may cross the polygon edges and hence not cover the polygons.
Densifying the polygon boundaries helps, but introduces another problem - the computed hull can extend beyond the outer boundaries of individual polygons. And it introduces new vertices not present in the original data.
Solution: Concave Hull of Polygons
What is needed is a concave hull algorithm that accepts polygons as constraints, and thus respects their boundaries. The JTS Topology Suite now provides this capability in a class called ConcaveHullOfPolygons (not a cute name, but descriptive). It provides exactly the solution desired for the gap removal example:
The Concave Hull of Polygons API
Like concave hulls of point sets, concave hulls of polygons form a sequence of hulls, with the amount of concaveness determined by a numeric parameter. ConcaveHullOfPolygons uses the same parameters as the JTS ConcaveHull algorithm. The control parameter determines the maximum line length in the triangulation underlying the hull. This can be specified as an absolute length, or as a ratio between the longest and shortest lines.
Further options are:
- The computed hull can be kept "tight" to the outer boundaries of the individual polygons. This allows filling gaps between polygons without distorting their original outer boundaries. Otherwise, the concaveness of the outer boundary will be decreased to match the distance parameter specified (which may be desirable in some situations).
- Holes can be allowed to be present in the computed hull
- Instead of the hull, the fill area between the input polygons can be computed.
Here are examples of using ConcaveHullOfPolygons for the use cases above:
Example: Generalizing Building GroupsUsing the "tight" option allows following the outer building outlines.
Example: Aggregating Block PolygonsThe concave hull of a set of block polygons for an oceanside suburb. Note how the "tight" option allows the hull to follow the convoluted, fine-grained coastline on the right side.Example: Removing Gaps to Merge PolygonsPolygons separated by a narrow gap can be merged by computing their concave hull using a small distance and keeping the boundary tight.
Example: Fill Area Between PolygonsThe "fill area" portion of the hull between two polygons can be computed as a separate polygon. This could be used to provide an "Extend to Meet" construction by unioning the fill polygon with one of the input polygons. It can also be used to determine the "visible boundary", provided by the intersection of the fill polygon with the input polygon(s). -
12:27
GIScussions: Looking Back
sur Planet OSGeoLeaving Death Valley by me
This week the team at Astun got together for their Spring Event in Richmond, it was the first time that we had all been together since December 2019 so there was a lot of laughing, hugging and catching up to do with friends and colleagues, old and new.
Mike Saunt asked me if I would talk about some of the changes in Astun since I have been working with them and it turned out that the event was almost exactly on the 10th anniversary of me starting to work with them so I thought that might be a good lense to use for the talk. I looked back at a short strategy presentation that I had given early in my time with Astun and how much the organisation had changed and grown in the last 10 years. The response was very positive and one person even said that he had a tear in his eye.
So this isn’t a post about Astun and what a fun, values based company they are, it is a personal reflection on the value of taking time to look back, to take stock, to see where you are in the longer perspective of your journey, personal or corporate. We spend a lot of work time living in the now and worrying about the future, management meetings focus on the period just closed and progress against the year’s targets. We rarely take time to look back and maybe take some satisfaction or even pleasure from the journey that we have taken with its ups and downs.
Yesterday I got to catch up with my pal Arnaud Ferrand who is also my partner in crime at Mappery for one of our irregular Mappery working sessions which involve food, planning, tech and chat. We got to talking about the Mappery journey since Ken and I started it through to the current day. In a bit under 4 years we have published 800 posts containing 1,300 images and whilst it has been a lot of fun there have been a few stressful moments (way less since Arnaud joined me). What started out as a personal hobby project for Ken and me when we were on safari together has grown to become an archive of contemporary usage of maps in design, art, politics, humour and much more (maybe that sounds a bit overdone but wtf). Arnaud and I realised that we had something a little precious in our care and that we need to ensure that our backups were a bit more robust! That was a realisation that came from looking back.
My thought for a Friday, take an hour to note down where you were 5 or 10 years ago, compare that to where you are today and reflect on the progress, the challenges and the high points. Then sit back with a warm glow and maybe even sip a beer or a whisky.
-
12:03
GeoSolutions: GeoBuiz Summit 2022 – Monterrey Bay, CA
sur Planet OSGeoYou must be logged into the site to view this content.
-
11:00
CARTO Blog: CARTO for Retail, the Spatial Analytics Platform for Global Retailers
sur Planet OSGeoToday we are excited to announce the general availability of CARTO for Retail, a cloud native analytics platform designed specifically for Retailers. -
11:00
CARTO Blog: 5 Reasons Why OOH Professionals Are Turning to Location Intelligence
sur Planet OSGeoWhile travel and commuting pick up speed once again across the world, investment in out-of-home advertising (OOH) is growing in tandem. With OOH ad spend projected to grow ... -
2:00
EOX' blog: Sentinel-2 cloudless 2021
sur Planet OSGeoThis year we challenged ourselves by overhauling our processing infrastructure in order to give us more room for improvements in the future. This caused a delay of our usual release interval, but we think it was well worth the effort! With a bit of sweat and blood we can finally announce the latest ... -
22:01
Sean Gillies: Sandwich retrospective: kimchi reuben
sur Planet OSGeoI didn't make a sandwich today, but I found another sandwich photo on my phone. This one is from January, when I was working through a large batch of homemade red cabbage (with apple and carrot) kimchi.
Pastrami, red cabbage kimchi, and swiss cheese on rye
-
11:00
CARTO Blog: Spatial Leaders Gather in London for #SDSC22
sur Planet OSGeoHaving brought together more than 12,000 experts online in 2020 & 2021, we’re beyond excited to host our long awaited, in-person Spatial Data Science Conference in Lond... -
11:00
CARTO Blog: How to Use Spatial Data to Create a Wildfire Risk Map
sur Planet OSGeoWildfires can be detrimental to urban and rural areas, causing impacts in the form of injury, death and property loss. In fact, recent studies (here and here) have shown a ... -
9:00
3liz: Contributions à QGIS LTR 3.22
sur Planet OSGeoContributions à QGIS LTR 3.22La dernière version maintenue à long terme (LTR) de QGIS est la version 3.22. La première version corrective de 3.22 ayant ce statut est la version 3.22.4 publiée fin février 2022.
Cette version est importante pour les utilisateurs et la communauté de développeurs car elle sera maintenue jusqu'en février 2023. Elle a aussi été testée pendant 3 mois avant d'obtenir le statut LTR qui est un gage de stabilité et de qualité.
Voici la liste des contributions de 3Liz pour cette version 3.22 de QGIS (incluant 3.18 et 3.20)
Améliorations du module Traitements de QGIS- Ajout d'une option multipartite pour les paramètres de géométrie de traitements: permettre des multi-géométries
- Ajout d'un paramètre POST dans l'algorithme de traitement FileDownloader
- option --version pour tous les outils en ligne de commande comme
qgis_process
etqgis_mapserver
- Permettre plusieurs MetadataUrl dans la description des capacités de services. Dans les propriétés de la couche, il est possible de définir plusieurs URL de métadonnées.
- Accélérer la génération du document de la requête WMS GetCapabilities en supprimant l'appel à featureCount
- Correction de la méthode de sélection dans le moteur de rendu du serveur
- QgsServerFeatureId utilise une expression combinée pour mettre à jour le filtre de la requête d'objets vectorielles
- Les requêtes WMS GetStyles conservaient le paramètre SLD_BODY de la requête précédente
- Ajout du paramètre maxImageCacheSize dans qgis_global_settings.ini : permet de définir la taille du cache des images
- Exposer l'encodeur de tuiles vectorielles à l'API python
- Ajout d'une API permettant de définir une chaîne d'aide sur une variable d'expression
- Encodage et écriture de tuiles vectorielles dans un CRS différent de l'EPSG:3857
- Correction de la méthode QgsTileMatrix::tileCenter qui ne retournait pas le centre des tuiles
- Tests pour la méthode getParameterFromString du module Traitements de QGIS #43070, #43075, #43126, #43062
- Test QGIS Server de la requête WMS GetLegendGraphic au format JSON pour une couche avec plusieurs symboles
- Ajout de tests de la lecture de données WKB issue de la méthode ST_Binary de PostGIS
- Extension des tests QGIS Server pour les dimensions WMS
- Template/modèle pour les ticket des utilisateurs
- Notifications de release GitHub
La plupart des fonctionnalités ont été financées par l'Ifremer, ou par certains clients utilisant notre solution d'hébergement Lizmap et ayant un problème avec QGIS Server, ou sur notre temps Open Source à 3Liz.
-
9:00
3liz: Contributions to QGIS LTR 3.22
sur Planet OSGeoContributions to QGIS LTR 3.22The latest long-term released (LTR) version of QGIS is 3.22. The first bugfix release of 3.22 with this status is version 3.22.4 released in late February 2022.
This version is important for users and the developer community as it will be maintained until February 2023. It was also tested for 3 months before obtaining the LTR status which is a guarantee of stability and quality.
Here is the list of 3Liz contributions for this QGIS 3.22 release (including 3.18 and 3.20)
QGIS Processing enhancements- Added multi-part option for processing geometry input : allow multi-geometries
- Adding a POST input to the FileDownloader processing algorithm
- option --version for all command line tools like
qgis_process
andqgis_mapserver
. - Allow multiple MetadataUrl in the description of service capabilities. In the layer properties, it is possible to define several metadata URLs.
- Speed up the generation of the WMS GetCapabilities request document by removing the call to featureCount
- Fixed the selection method in the server renderer
- QgsServerFeatureId uses a combined expression to update the filter of the featrue request
- The WMS GetStyles requests kept the SLD_BODY parameter from the previous request
- Fixed QgsTileMatrix::tileCenter method that did not return the center of the tiles
- Add maxImageCacheSize parameter in qgis_global_settings.ini: allow to define the size of the image cache
- Exposing the vector tile encoder to the python API
- Added an API to define a help string on an expression variable
- Encoding and writing vector tiles in a CRS different from EPSG:3857
- Tests for the method getParameterFromString of QGIS Processing #43070, #43075, #43126, #43062
- QGIS Server test of the WMS GetLegendGraphic query in JSON format for a layer with several symbols
- Added tests for reading WKB data from the ST_Binary method of PostGIS
- Extension of QGIS Server tests for WMS dimensions
- Template for user tickets
- GitHub release notifications
Most of the features were funded by Ifremer, or by some customers using our Lizmap hosting solution and having a problem with QGIS Server, or on our Open Source time at 3Liz.
-
22:55
Sean Gillies: Busy
sur Planet OSGeoRuth is traveling all next week and I will be busy holding down the fort and going to end-of-year school activities. Forgive me if I'm slow to reply to emails and open source issues and pull requests.
-
22:37
Sean Gillies: Superior training week seven recap
sur Planet OSGeoHere are the numbers for week seven.
10 hours, 7 minutes
50 miles
5564 ft D+
Six days of running in a row, two speed workouts, and back-to-back weekend long runs. Next week is a rest week with less running and more biking, yoga, and weight lifting.
-
21:46
Sean Gillies: Liverwurst sandwich
sur Planet OSGeoI stopped by King Soopers after my long run to get a few groceries. Do you ever, because you're ravenously hungry, buy things you didn't know you needed until you see them? I brought home some liverwurst and made a sandwich of it.
Liverwurst, pepper jack, red onion, pickle, whole grain mustard, on sourdough bread
Eating this reminds me of driving from Logan (Utah) to Salt Lake City with my family to have Sunday dinners with my dad's parents and grandparents. The older Gillieses and Clines almost always had liverwurst and crackers for an appetizer. I don't remember ever disliking it.
-
18:56
GeoSolutions: GeoSolutions and OGC Testbed-18: “Advancing Location Interoperability”
sur Planet OSGeoYou must be logged into the site to view this content.
-
21:38
GRASS GIS: GRASS GIS 8.0.2 released
sur Planet OSGeoWhat’s new in a nutshell This is a stability release of the GRASS GIS 8.0 series. The most important changes include the removal of unneeded dynamic loading of GDAL libraries, and a fix in the quantile algorithm. Full list of changes and new features The overview of new features in the 8.0 release series is available at new features in GRASS GIS 8.0. See also our detailed announcement with the full list of changes and bugs fixed at [https:] -
11:00
CARTO Blog: CARTO at Snowflake Summit 2022 in Las Vegas, NV
sur Planet OSGeoWe’re thrilled to announce we will be attending, sponsoring and presenting at Snowflake Summit 2022 taking place June 13-16 in Las Vegas, Nevada! -
23:03
Stefano Costa: I libri che ho letto nel 2021
sur Planet OSGeoCi siamo, l’anno 2021 è finito da un po’ e sto scrivendo la lista dei libri che ho letto. Questa lista è dedicata a due persone che mi hanno detto di averla letta negli anni scorsi, A. e M.
Quest’anno ho tenuto traccia dei libri letti e desiderati in un modo nuovo, su un nodo BookWyrm. Ho pensato che avrei potuto leggere 12 libri e ne ho letti 12, ma più che la quantità mi ha dato soddisfazione la continuità. Sono anche riuscito a leggere più lentamente, a rileggere lunghi capitoli e persino un libro intero perché avevo la sensazione di averli letti troppo in fretta.
Avevamo lasciato il nostro lettore alle prese con Seni e uova.
Mieko Kawakami, Seni e uovaHo impiegato diversi mesi a leggere “Seni e uova”. È un libro monumentale, non solo per le dimensioni.
Cosa vuol dire nascere, cosa vuol dire diventare donna ed esserlo, cosa vuol dire diventare madre, cosa vuol dire diventare padre. Sono tutte domande a cui ho pensato leggendo questo libro.
E poi, anche come si fa a scrivere libri ? questo è un altro dei tanti fili che legano le pagine dall’inizio alla fine.
I dialoghi di “Seni e uova” sono più che scambi di parole. Ognuno trova il modo di dire tutto quello che ha da dire, e lo fa in modo straripante, e paralizza essere di fronte a questi lunghi discorsi dove i punti di vista vengono costruiti in modo dettagliato, feroce e liberatorio.
Fatema Mernissi, L’harem e l’occidenteQuesta è una lettura che mi era stata consigliata due anni fa nel fediverso. Breve, tagliente e diretto, il resoconto di come Scheherazade si sia annacquata mentre veniva trasportata ad Occidente (Scheherazade goes West, è il titolo originale), come una eroina si sia trasformata in una macchietta di pensierini insulsi nella testa degli uomini bianchi.
Ursula K. Le Guin, Le tombe di AtuanCome mi sono promesso, ho continuato la lettura della saga, mi sono immerso nel mondo di Terramare e ho trasportato di qua e di là il librone che lo contiene praticamente tutto. Che meraviglia. Ogni libro è una storia dall’inizio alla fine e vive di vita propria, ma i fili che legano luoghi e persone sono lunghi e profondi.
Ursula K. Le Guin, Il signore dei draghiQuesto è il libro della saga che ho trovato più cupo, nonostante Le tombe di Atuan si svolga in gran parte sottoterra. Al centro dell’apoteosi di Ged e della nascita di una nuova guida per Terramare c’è un rapporto di fiducia che è messo in difficoltà e in dubbio dai due protagonisti. E questo è molto più inquietante di una caverna oscura o dell’aldilà.
Ursula K. Le Guin, L’isola del dragoQuando ho iniziato a leggere questo libro ho finalmente capito che Le Guin ha dato una forma di alternanza alle parti della saga, maschile, femminile, maschile, femminile. Questo libro è molto femminile: segue Tenar come protagonista, sia nelle gesta eroiche sia in quelle più semplici nella casa e nella campagna. Tenar salva la piccola Therru, la vittima di una orribile violenza che rimane a lungo traumatizzata, e anche questo è drammaticamente femminile. Finale epico.
Ursula K. Le Guin, I venti di TerramareL’ultima parte che conclude la saga è di trasfigurazione. Ho letto due volte il libro perché la prima lettura era stata troppo frettolosa, e perché volevo seguire bene il viaggio dei protagonisti. Una storia che inizia con una brocca rotta non può che catturarmi, d’altra parte. Ho fatto un po’ fatica a seguire con attenzione i nomi dei vari Maestri, e ho confuso un po’ il Maestro delle Mani e quello dei Modelli. Sorrido pensando a come viene sconfitta la Morte qui con una vaga reminescenza del finale un po’ ridicolo del Cannocchiale d’ambra (che non rileggerei affatto).
Ursula K. Le Guin, Leggende di TerramareLa raccolta è proprio quello che ci si aspetta per dare spazio alla costruzione del mondo di Terramare. Funziona tutto molto bene, le mie storie preferite qui sono state quelle di Lontra/Medra e di Libellula (che in lingua originale è più direttamente evocativo della protagonista).
James Ellroy, Perché la notteI personaggi sono piuttosto inquietanti nel loro delirio reciproco, e il modo in cui Lloyd stesso deve ancora una volta seguire istinti fuori dalle regole è particolarmente ben sviluppato.
Mieko Kawakami, Heaven“Heaven” è appena uscito, il nuovo libro di Mieko Kawakami.
Non è stato facile leggere “Heaven” perché è un romanzo veramente molto diretto e mi ha buttato dentro alcune tematiche che faccio molta fatica ad affrontare serenamente, come il suicidio, la fiducia negli altri, chiudersi in se stessi. Pur essendo molto più breve del precedente romanzo ne ripropone lo stile grandioso, i lunghi mono-dialoghi in cui alcuni personaggi espongono nei minimi dettagli tutto quello che pensano di un determinato argomento, spesso in modo brutale. La mia memoria di alcuni episodi e periodi di bullismo scolastico, ben più leggero di quello affrontato dai protagonisti, è ancora viva. Qui invece andiamo proprio dentro il quotidiano dentro la testa di chi subisce, e per un po’ anche dentro quella di chi massacra gli altri. È molto duro e c’è una parte di violenza quasi grafica. Non conosco abbastanza la cultura né la letteratura giapponese per situare “Heaven” rispetto a questo tema.
Ho voluto finire di leggerlo durante un pomeriggio soleggiato, sul divano, invece che prima di addormentarmi la sera. Ma sono contento di averlo letto.
Paolo Rumiz, AnnibaleChe noia. Ripetitivo allo sfinimento, nostalgico di quando si faceva il militare, maschilista.
Gail Honeyman, Eleanor Oliphant sta benissimoQuesto l’ho trovato per caso e mi è piaciuto, un po’ letteratura di genere e un po’ spiazzante e onesto sguardo sulla solitudine, sulla salute mentale.
Elena Ferrante, L’amica genialeQuesto era nella lista dei libri da leggere almeno da due anni. Divorato in modo abbastanza spietato e all’altezza delle aspettative. Per favore non mi parlate di serie TV.
Nel 2022 ho continuato a leggere Elena Ferrante.
-
5:13
Sean Gillies: Superior training week six recap
sur Planet OSGeoWeek six was a productive one with four days of running. One tough speed workout, a tempo run in the hills, and one long run along the first ridge on the east edge of the Rocky Mountains. Here are the numbers.
7 hours, 42 minutes running
37.5 miles
4396 ft D+
Saturday I helped at Quad Rock. I transported drop bags from the starting line to the Horsetooth aid station (miles 10 and 40) and then spent 12 hours at the aid station with a stint of watching a tricky trail intersection a mile upstream.
Starting line, 5:15 a.m.
Horsetooth aid station, 6:40 a.m.
Mid-day it was warm, about 85° F (30° C). Every runner coming into the aid station a second time looked overheated to some degree, and still had one final climb to go with much of it in full sun. We cooled them down; put ice in water bottles, bandanas, hats; and handed out popsicles. It was super satisfying to see energy and smiles come back to the runners. According to OpenSplitTime, everyone who left our aid station finished. We had one person drop and 4 who didn't make the time cut.
After the trail sweepers came in from the previous station, I helped pack up, and then transported drop bags and the DNF runners to the finish.
Rain fell early Sunday. I waited for it to stop and then went out for an extremely easy 15-mile trail run bracketed by 3-mile bike rides from and to home. I saw lots of kids hiking with their moms.
Finally a hint of green
-
11:00
CARTO Blog: CARTO selected by SEAT & European Union as key EV Vehicle Partner
sur Planet OSGeoWithin the last few years, Spain has been focused on increasing electric vehicle incentives and production; and in 2021, Spain announced that they planned to invest 4.3 bil... -
11:00
CARTO Blog: Hexagons for Location Intelligence: Why, When & How?
sur Planet OSGeoYou’ve probably seen hexagon grids on maps, and maybe even created some of your own. But have you ever stopped to think about why? This is CARTO’s definitive guide to hexag... -
2:00
GeoServer Team: GeoServer 2.21-RC Release Candidate
sur Planet OSGeoGeoServer 2.21-RC release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a GeoServer release candidate made in conjunction with GeoTools 27-RC and GeoWebCache 1.21-RC.
- Release candidates are a community building exercise and are not intended for production use.
- We ask the community (everyone: individuals, organizations, service providers) to download and thoroughly test this release candidate and report back.
- Testing priority is the new internationalization support
- Participating in testing release candidates is a key expectation of our open source social contract. We make an effort to thank each person who tests in our release announcement and project presentations!
- GeoServer commercial service providers are fully expected to test on behalf of their customers.
We would like to ask for your assistance testing the following:
-
Try out the new language chooser, and if you spot any translations you can help out with we would love your assistance translating geoserver.
-
The ability to customize feature types allows for a lot of creativity, please try this out and share your examples
-
This release features a new Log4J logging system. If you only choose between the built-in logging profiles we expect everything to be smooth an uneventful.
If you have made any custom logging profiles, or customized the built-in logging profiles in place, some additional care is required (see below). We are very interested in this upgrade process and ask for your feedback and testing at this time.
-
For those using GDAL or OGR please check the instructions below on upgrading to GDAL 3.
A reminder that open-source is a community activity and we ask everyone to take part at this time.
Feature Type CustomizationWe are pleased to share a long-requested feature - the ability to rename attributes and change attribute order when publishing a FeatureType.
It is also possible to change attribute type, and with the use of ECQL expressions generate new attributes on the fly.
The above example works around the limitations of shapefile to use longer names, and creates a new attribute
capital
on the fly from an expression, as shown in the following GetFeatureInfo output.This is a great new addition to GeoServer, please see Feture Type Details in the user guide for details.
- GEOS-10356 Allow feature type customization
Thanks to Andrea Aime (GeoSolutions) for proposal GSIP-207 and implementation.
Translations and Language ChooserA big thanks to Alexandre Gacon and everyone who helped improve GeoServer internationalization for during this release cycle.
To support this activity Andrea Aime has contributed a language chooser to the top of the screen (near the login button).
For more information see Choosing the UI language (User Guide).
- GEOS-1158 Specify Geoserver UI Language in Configuration
Layer groups can now be configured with additional styles, with each style listing a series of layers along with the style used to render each layer.
This allows a
SINGLE
orOPAQUE
layer group to list alternate styles in addition to the default one. Each alternate style is defined by a named configuration of layers and styles providing a unique visual representation.In the above example the layer group Tasmania is setup with an alternate “data” presentation, presenting the content with the geoserver default styles
point
,line
andpolygon
.For more information see Layer Group Styles (User Guide).
- GEOS-10252 Add Styles support to LayerGroup
- GEOS-10274 Geofence follow up LayerGroup Style addition
Thanks to Marco Volpini (GeoSolutions) for GSIP-205 proposal and implementation.
GeoPackage WMS and WFS OutputThe result of proposal GSIP-206 is the creation of the gs-geopkg-output extension packaging up the WFS and WMS output formats from the geopackage community module.
curl "http://localhost:8080/geoserver/wfs?service=wfs&version=2.0.0&request=GetFeature&typeNames=topp:states&outputFormat=geopkg" -o wfs.gpkg
For more information see Using the GeoPackage Output Extension in the user guide.
- GEOS-10351 [GSIP 206] Promote GeoPackage WFS and WMS output formats to an extension
- GEOS-8793 WFS 1.1.0/2.0.0 GeoPackage output wrong Coordinate Order
Thanks to David Blasby and Jody Garnett (GeoCat) for packaging up this work as an extension.
Mark Factory PrecedenceWhen rendering maps with lots of individual graphics, looking up the correct implementation (known as a MarkFactory) can be time consuming.
WMS Settings have new capability to filter out any mark factories not being used, and provide an order to prioritise the ones being used.
For more information see WMS Web Administration (user guide).
- GEOS-10230 MarkFactory WMS rendering performance optimization
Thanks to Fernando Mino (GeoSolutions Group) for troubleshooting this performance issue, and proposal GSIP-205 as an optimization.
Log4J 2 UpgradeThe assessment of Log4Shell vulnerability highlighted that although GeoSever was not affected, our use of the older Log4j 1.2 was a notable risk. This discussion resulted a small fundraising effort and proposal to upgrade to Log4j 2.
The result is a small change to the user interface, listing logging profiles by name (previously the file extension was also listed).
Internally this release replaces changes from Log4j 1.2 logging profiles (using
properties
extension) to Log4j 2 logging profiles (usingxml
extension):-
The built-in logging profiles (
DEFAULT_LOGGING
,PRODUCTION_LOGGING
, …) are replaced with new Log4j 2xml
files. -
Previous custom logging profiles will continue to be available (Log4J 2 has the ability to read the older Log4J 1.2 properties files).
-
If you made any customizations to the built-in profiles, you can recover your changes from backup
bak
file. You can use this backup as a reference when creating a newxml
logging profile, or restore this under a different name which does not conflict with the built-in logging profiles.A customization to
PRODUCTION_LOGGING.properties
will be backed up toPRODUCTION_LOGGING.properties.bak
. This can be restored by renamingPRODUCTION_LOGGING.properties.bak
toCUSTOM_LOGGING.properties
.
In addition to the
INFO
status messages, you will notice a newCONFIG
logging level used during application startup:CONFIG [org.geoserver] - GeoServer configuration lock is enabled CONFIG [org.geoserver] - Loading catalog... ...
For more information, and examples of writing on log4J 2 profile, see Logging Settings and Advanced log configuration in the User Guide. Of note is the introduction of a new
CONFIG
logging level used loading and saving configuration changes.- GEOS-10426 GISP 167: Upgrade Log4j
Thanks to Jody Garnett (GeoCat) for completing this work, and to the following sponsors for supporting this activity.
Logging REST APIFor more information please see Logging settings (User Guide) and GeoServer Logging (REST API).
- GEOS-10368 Logging Controller Addition allows configuration of logging via REST API.
Thanks to Yal?n Eren Deliorman for this contribution.
New WPS settings and KML input/output supportA number of improvements have been made to the WPS service:
-
GEOS-10443 Graduate kml-ppio community module to wps extension
KML can now be used with WPS service for both input and output parameters.
-
GEOS-10391 Add external output directory setting to limit where processes can write
See WPS setting for external output directory in User Guide.
-
GEOS-10431 Add WPS setting to disable remote complex inputs.
See WPS Security and input limits in User Guide.
The gdal-output extension is tested against GDAL 3.x series.
Please pay careful attention to the installation instructions, while the extensions includes
gdal-3.2.0.jar
you should double check the native binaries (included in your Linux distribution or installed by hand) and download an appropriate replacement jar online.For more information see Installing GDAL native libraries in the User Guide.
- GEOS-10402 Upgrade imageio-ext to 1.4.0 (tested with gdal 3.2)
Thanks to Andrea Aime (GeoSolutions) for making the ImageIO-EXT release, and Jody Garnett (GeoCat) for GDAL 3.x upgrade and testing.
Improvements and FixesNew features:
- GEOS-10228 Add wrap_limit property to wrap the category text values of a legend
Improvements:
- GEOS-10146 App-schema: support for multiple geometries with different CRS
- GEOS-10246 jdbcconfig: performance slow-down from unnecessary transactions
- GEOS-10251 Refactor MapML vocabulary to map- custom elements HTML namespace
- GEOS-10463 Support WCS default value for Deflate Compression
- GEOS-10320 Support GetFeatureInfo on raster layers with transformations turning the output into vector
- GEOS-10405 GetFeatureInfo: Support multiple featureCollections per query layer
Fixes:
- GEOS-10226 ResourcePool leaves empty files on failure
- GEOS-10318 CSV output format for complex features doesn’t resolve namespace URIs to prefixes on attributes names
- GEOS-10235 Prevent double-quote to be specified as CSV separator
- GEOS-10477 SLD - Validation error on Normalize-node
- GEOS-10448 GetTimeSeries does not limit number of dates when using a time range request (without period)
- GEOS-10429 Style validation error using the VendorOption “graphic-margin”
- GEOS-10318 CSV output format for complex features doesn’t resolve namespace URIs to prefixes on attributes names
Tasks:
- GEOS-10458 Update jai-ext to 1.1.22
- GEOS-10446 Upgrade to commons-codec 1.15 version
- GEOS-10363 Switch from itextpdf to openpdf for PDF map rendering
Additional information on GeoServer 2.21 series:
Release notes: ( 2.21-RC )
-
14:58
GeoSolutions: GeoSolutions at 2022 geOcom Conference
sur Planet OSGeoYou must be logged into the site to view this content.
-
11:00
CARTO Blog: Closing the Equity Gap with Spatial Analysis
sur Planet OSGeoThroughout the course of history, the use of the term “equity” has ebbed and flowed in frequency. Recently, equity has become quite a buzzword. Why? Advancing equity across... -
2:15
Martin Davis: Using Outer Hulls for Smoothing Vectorized Polygons
sur Planet OSGeoThe electrons were hardly dry on the JTS Outer and Inner Polygon Hull post when another interesting use case popped up on GIS StackExchange. The question was how to remove aliasing artifacts (AKA "jaggies") from polygons created by vectorizing raster data, with the condition that the result should contain the original polygon.
A polygon for Vancouver Island vectorized from a coarse raster dataset. Aliasing artifacts are obvious.
This problem is often handled by applying a simplification or smoothing process to the "jaggy" polygon boundary. This works, as long as the process preserves polygonal topology (e.g. such as the JTS TopologyPreservingSimplifier). But generally this output of this process does not contain the input polygon, since the simplification/smoothing can alter the boundary inwards as well as outwards.
Simplification using TopologyPreservingSimplifier with distance = 0.1. Artifacts are removed, but the simplified polygon does not fully contain the original.
In contrast, the JTS Polygon Outer Hull algorithm is designed to do exactly what is required: it reduces the number of vertices, while guaranteeing that the input polygon is contained in the result. It is essentially a simplification method which also preserves polygonal topology (using an area-based approach similar to the Visvalingham-Whyatt algorithm).
Outer Hull using vertex ratio = 0.25. Artifacts are removed, and the original polygon is contained in the hull polygon.
Here's a real-world example, taken from the GADM dataset for administrative areas of Germany. The coastline of the state of Mecklenburg-Vorpommern appears to have been derived from a raster, and thus exhibits aliasing artifacts. Computing the outer hull with a fairly conservative parameter eliminates most of the artifacts, and ensures polygonal topology is preserved.
A portion of the coastline of Mecklenburg-Vorpommern showing aliasing artifacts. The Outer Hull computed with vertex ratio = 0.25 eliminates most artifacts, and preserves the coastline topology.Future Work
A potential issue for using Outer Hull as a smoothing technique is the choice of parameter value controlling the amount of change. The algorithm provides two options: the ratio of reduction in the number of vertices, or the fraction of change in area allowed. Both of these are scale-independent, and reflect natural goals for controlling simplification. But neither relate directly to the goal of removing "stairstep" artifacts along the boundary. This might be better specified via a distance-based parameter. The parameter value could then be determined based on the known artifact size (i.e. the resolution of the underlying grid). Since the algorithm for Outer Hull is quite flexible, this should be feasible to implement.
-
18:21
Free and Open Source GIS Ramblings: Inscribed and bounding circles in PostGIS
sur Planet OSGeoToday, I’m revisiting work from 2017. In Brezina, Graser & Leth (2017), we looked at different ways to determine the width of sidewalks in Vienna based on the city’s street surface database.
Image source: Brezina, Graser & Leth (2017)
Inscribed and circumscribed circles were a natural starting point. Circumscribed or bounding circle tools (the smallest circle to enclose an input polygon) have been commonly available in desktop GIS and spatial databases. Inscribed circle tools (the largest circle that fits into an input polygon) used to be less readily available. Lately, support has improved since ST_MaximumInscribedCircle has been added in PostGIS 3.1.0 (requires GEOS >= 3.9.0).
The tricky thing is that ST_MaximumInscribedCircle does not behave like ST_MinimumBoundingCircle. While the bounding circle function returns the circle geometry, the inscribed circle function returns a record containing information on the circle center and radius. Handling the resulting records involves some not so intuitive SQL.
Here is what I’ve come up with to get both the circle geometries as well as the radius values:
WITH foo AS ( SELECT id, ST_MaximumInscribedCircle(geom) AS inscribed_circle, ST_MinimumBoundingRadius(geom) AS bounding_circle FROM demo.sidewalks ) SELECT id, (bounding_circle).radius AS bounding_circle_radius, ST_MinimumBoundingCircle(geom) AS bounding_circle_geom, (inscribed_circle).radius AS inscribed_circle_radius, ST_Buffer((inscribed_circle).center, (inscribed_circle).radius) AS inscribed_circle_geom FROM foo
And here is how the results look like in QGIS, with purple shapeburst fills for bounding circles and green shapeburst fills for inscribed circles:
References
-
11:00
CARTO Blog: Announcing CARTO at Global AWS Summits
sur Planet OSGeoAt CARTO, we’re excited to announce that we’ll be sponsoring and attending multiple Amazon Web Services (AWS) Summits across the world throughout May and June. -
2:00
geOps: IT-TRANS 2022
sur Planet OSGeoDie IT-TRANS findet wieder statt – und wir sind dabei! -
16:23
GeoCat: Bolsena Code Sprint 2022
sur Planet OSGeoOur last OSGeo “Code Sprint” event in Bolsena – Italy was in 2019. And this year we are back! The code sprint is planned for an extended period of 10 days, giving all that participate a chance to work and meet a little bit longer. The event in Bolsena is in an Italian monastery (see map location), photos and videos: 2008-video, 2009-video and 2010-video. The monastery is overlooking Lago Bolsena and offers space to about 25 people in small bedrooms ? . It is one of the coolest places for such an event. Quiet, isolated, simple and serene.
Have a look yourself, including looking at the photo gallery. For what the food concerns, we cook elaborate meals you will definitely enjoy ? . There’s a large dining space, but we will eat outside overlooking the lake if weather permits (very likely in June). You can stay all ten days and food (breakfast, lunch and dinner) is included in the price. As in previous years, we will go out for a city visit and a dinner on one of the evenings.
The event will take place during the whole week, although the emphasis will probably be Monday to Friday for most participants.
More information on the OSGeo wiki.
The post Bolsena Code Sprint 2022 appeared first on GeoCat B.V..
-
2:09
Sean Gillies: Superior training week five recap
sur Planet OSGeoDry and windy weather continues here on Colorado's Front Range. I'm not a big fan of running in mud, but we really need some steady, soaking rain here. This dry and desiccating spring is unusual and is challenging our drought-tolerant environment. Many plants are still semi-dormant and the landscape is still mostly a midwinter yellow-brown color and flowers are slow to appear. One exception is the white blossom of the tough-as-nails sand lily (Leucocrinum montanum). This plant is in full bloom locally, as plentiful as ever. I was surprised to learn today that sand lilies are in the same family as asparagus. I saw one clematis blossom in a wetter spot this week, and a few bluebells here and there. In other years, these are erupting everywhere.
Here are the numbers for week five. Season highs all around. I'll go double this distance and 2.5 times the time and climbing one week in July.
8 hours, 35 minutes
43 miles
6010 ft D+
Six days of running, my first substantial speed workout, and two runs with plenty of hills. I'm mostly hiking up the hills and trying to flow down them without braking. In a few weeks I'll start to push it more on the ascents. 5 minute uphill intervals with 1 minute of recovery do amazing things for my fitness.
Saturday, May 7, I will be volunteering all day for the Quad Rock race and will you see you if you pass through the Horsetooth aid station. It's at the 10 and 40 mile marks for the race courses. I'm looking forward to helping you 25 milers settle into the middle of your course and helping you 50 milers get the fuel and what you need for your finish.
-
9:16
OTB Team: OTB release 8.0.1
sur Planet OSGeoWe are pleased to announce that OTB version 8.0.1 is out ! Ready-to-use binary packages are available on the package page of the website: OTB-8.0.1-Linux64.run (Linux) OTB-8.0.1-Win64.zip (Windows 64 bits) OTB-8.0.1-Darwin64.run (Mac OS) You can also checkout the release branch with git: The documentation for OTB 8.0.1 can be found here. This patch version: Fixes […] -
11:00
CARTO Blog: CARTO Joins Databricks at Data+AI Summit
sur Planet OSGeoAt CARTO, we’re thrilled to announce that we’ll be sponsoring, attending and presenting at the 2022 Databricks’ Data + AI Summit taking place virtually and in-person June 2... -
11:00
CARTO Blog: Locating High Performing Retail Expansion Sites
sur Planet OSGeoWhen it comes to retail site selection applications, a common task consists of combining data from different sources to compare the characteristics of target locations and ... -
23:20
Martin Davis: Outer and Inner Concave Polygon Hulls in JTS
sur Planet OSGeoThe JTS Topology Suite recently gained the ability to compute concave hulls. The Concave Hull algorithm computes a polygon enclosing a set of points using a parameter to determine the "tightness". However, for polygonal inputs the computed concave hull does not always respect the polygon boundaries. So the concave hull may not actually contain the input polygon.
It would be useful to be able to compute the "outer concave hull" of a polygon. This is a valid polygon formed by a subset of the vertices of the input polygon which fully contains the input polygon. Vertices can be eliminated as long as the resulting boundary does not self-intersect, and does not cross into the original polygon.
An outer concave hull of a polygon representing Switzerland
As with point-set concave hulls, the vertex reduction is controlled by a numeric parameter. This creates a sequence of hulls of increasingly larger area with smaller vertex counts. At an extreme value of the parameter, the outer hull is the same as the convex hull of the input.A sequence of outer hulls of New Zealand's North Island
The outer hull concept extends to handle holes and MultiPolygons. In all cases the hull boundaries are constructed so that they do not cross each other, thus ensuring the validity of the result.
An outer hull of a MultiPolygon for the coast of Denmark. The hull polygons do not cross.
It's also possible to construct inner hulls of polygons, where the constructed hull is fully within the original polygon.
An inner hull of Switzerland
Inner hulls also support holes and MultiPolygons. At an extreme value of the control parameter, holes become convex hulls, and a polygon shell reduces to a triangle (unless blocked by the presence of holes).
An inner hull of a lake with islands. The island holes become convex hulls, and prevent the outer shell from reducing fully to a triangle
A hull can provide a significant reduction in the vertex size of a polygon for a minimal change in area. This could allow faster evaluation of spatial predicates, by pre-filtering with smaller hulls of polygons.
An outer hull of Brazil provides a 10x reduction in vertex size, with only ~1% change in area.
This has been on the JTS To-Do list for a while (I first proposed it back in 2009). At that time it was presented as a way of simplifying polygonal geometry. Of course JTS has had the TopologyPreservingSimplifier for many years. But it doesn't compute a strictly outer hull. Also, it's based on Douglas-Peucker simplification, which isn't ideal for polygons.
It seems there's quite a need for this functionality, as shown in these GIS-StackExchange posts (1, 2, 3, 4). There's even existing implementations on Github: rdp-expansion-only and simplipy (both in Python) - but both of these sound like they have some significant issues.
Recent JTS R&D (on concave hulls and polygon triangulation) has provided the basis for an effective, performant polygonal concave hull algorithm. This is now released as the PolygonHull class in JTS.
The PolygonHull APIPolygon hulls have the following characteristics:
- Hulls can be constructed for Polygons and MultiPolygons, including holes.
- Hull geometries have the same structure as the input. There is a one-to-one correspondence for elements, shells and holes.
- Hulls are valid polygonal geometries.
- The hull vertices are a subset of the input vertices.
The PolygonHull algorithm supports computing both outer and inner hulls.
- Outer hulls contain the input geometry. Vertices forming concave corners (convex for holes) are removed. The maximum outer hull is the convex hull(s) of the input polygon(s), with holes reduced to triangles.
- Inner hulls are contained within the input geometry. Vertices forming convex corners (concave for holes) are removed. The minimum inner hull is a triangle contained in (each) polygon, with holes expanded to their convex hulls.
The number of vertices removed is controlled by a numeric parameter. Two different parameters are provided:
- the Vertex Number Fraction specifies the desired result vertex count as a fraction of the number of input vertices. The value 1 produces the original geometry. Smaller values produce simpler hulls. The value 0 produces the maximum outer or minimum inner hull.
- the Area Delta Ratio specifies the desired maximum change in the ratio of the result area to the input area. The value 0 produces the original geometry. Larger values produce simpler hulls.
The algorithm removes vertices via "corner clipping". Corners are triangles formed by three consecutive vertices in a (current) boundary ring of a polygon. Corners are removed when they meet certain criteria. For an outer hull, a corner can be removed if it is concave (for shell rings) or convex (for hole rings). For an inner hull the removable corner orientations are reversed.
In both variants, corners are removed only if the triangle they form does not contain other vertices of the (current) boundary rings. This condition prevents self-intersections from occurring within or between rings. This ensures the resulting hull geometry is topologically valid. Detecting triangle-vertex intersections is made performant by maintaining a spatial index on the vertices in the rings. This is supported by an index structure called a VertexSequencePackedRtree. This is a semi-static R-tree built on the list of vertices of each polygon boundary ring. Vertex lists typically have a high degree of spatial coherency, so the constructed R-tree generally provides good space utilization. It provides fast bounding-box search, and supports item removal (allowing the index to stay consistent as ring vertices are removed).
Corners that are candidates for removal are kept in a priority queue ordered by area. Corners are removed in order of smallest area first. This minimizes the amount of change for a given vertex count, and produces a better quality result. Removing a corner may create new corners, which are inserted in the priority queue for processing. Corners in the queue may be invalidated if one of the corner side vertices has previously been removed; invalid corners are discarded.
This algorithm uses techniques originated for the Ear-Clipping approach used in the JTS PolgyonTriangulator implementation. It also has a similarity to the Visvalingham-Whyatt simplification algorithm. But as far as I know using this approach for computing outer and inner hulls is novel. (After the fact I found a recent paper about a similar construction called a Shortcut Hull [Bonerath et al 2020], but it uses a different approach).
Further WorkIt should be straightforward to use this same approach to implement a Topology-Preserving Simplifier variant using the corner-area-removal approach (as in Visvalingham-Whyatt simplification). The result would be a simplified, topologically-valid polygonal geometry. The simplification parameter limits the number of result vertices directly, or the net change in area. The resulting shape should be a good approximation of the input, but would not necessarily be either wholly inside or outside.
-
21:01
Sean Gillies: Day off
sur Planet OSGeoI have the day off work today. After saying goodbye to my mother-in-law, who has been visiting, and making lunches for my kids, I drove to Lory State Park for a very nice, hilly trail run (7.75 miles, 1876 ft D+, average grade 4.4% including downhills). I listened to the new King Gizzard & the Lizard Wizard double album, Omnium Gatherum, on the drive and laughed out loud a few times. It's so good. And self-indulgent, which is exactly my mood today.
It's important to refuel after a hard run, so when I got home I made an extra loaded, extra buttery, grilled Cubano-ish sandwich. Did you know the Lucerne cheese company is selling ghost pepper jack? When I saw it in the store I had to grab it. Honestly, it could be hotter.
Black Forest ham, ghost pepper jack, red onion, dill pickle, and mustard on white bread.
-
11:00
CARTO Blog: Understanding Retail Store Clusters with Local Outlier Factor Analysis
sur Planet OSGeoThe retail landscape of a city is a complex and intricate one. A store’s success or failure depends heavily on its location; whether it is in a busy area, has a strong loca... -
3:45
Narcélio de Sá: Abril / 2022
sur Planet OSGeoÚltima atualização 2021-12-10 20:18:19.
Pessoal:
Os últimos meses foram corridos, me descuidei e desde janeiro que não posto nada aqui no blog. Alguns fatos que aconteceram nesse tempo:
- Cortei os cabelos depois de 2 anos, mas já estou sentido falta dos cabelos longos.
- Estou procurando uma casa na vizinhança. Em breve novidades…
Profissional:
Houve mudanças no ambiente de trabalho, mudei de setor e agora tenho mais responsabilidades. Hoje estou numa posição de gestão, o que me afastou da parte técnica do setor de GEO.
Comunidade:
Estou participando do comitê geral do FOSS4G 2022, que irá acontecer em Florença-Itália, mais informações no site oficial do evento.
Leitura:
Li o livro ONDE MORREM OS AVIÕES, do Lito Sousa do canal: aviões e música.
Nota de transparência: os links dos livros acima têm código de afiliado. Clicando neles, os preços não mudam, mas posso ganhar uma comissão da Amazon.
Assistindo:
Do que assistir destaco o documentário Downfall: The Case Against Boeing interessante documentário sobre os incidentes envolvendo o Boeing 737 MAX.
De filmes assisti The Highwaymen, filme da Netflix sobre a caçada ao casal de ladrões Bonnie e Clyde. Ainda sobre no tema policial indico a série The Great Robbery of Brazil’s Central Bank que narra os fatos do assalto ao banco central de Fortaleza. Outro filme que assisti foi Gemini Man e não recomendo.
No momento estou acompanhando Better Call Saul: Season 6 , para mim a melhor série do momento. Também estou assistindo Moon Knight .
Ouvindo:
Não consigo indicar outra coisa a não ser o podcast Mano a Mano, original Spotify com Mano Brown. De fato um programa que me fez ampliar a visão e o debate trazendo diversidade de ideias e pensamentos com profundidade e respeito.
Frase do momento“Minha alucinação é suportar o dia a dia, e o meu delírio é a experiência com coisas reais.”
— BelchiorThe post Abril / 2022 appeared first on Narcélio de Sá.
-
1:01
Sean Gillies: Superior training weeks three and four recap
sur Planet OSGeoIn week three I did six consecutive days of running. Track intervals on Wednesday. Singletrack tempo on Thursday. Back-to-back 2+ hour runs Saturday and Sunday. The weather was cool and windy and I fought with a sinus infection for motivation. Happily, 30 minutes of running never failed to make me feel better.
7 hours, 58 minutes
40.5 miles
5262 ft D+
Half of my week four training was in San Francisco. Tuesday I went along the Embarcadero and up the Filbert Steps to the Coit Tower on Telegraph Hill. Wednesday I went to Christmas Tree Point on the north summit (922 ft) of the Twin Peaks via Corona Heights.
5 hours, 8 minutes
28.3 miles
2854 ft D+
Downtown San Francisco from Corona Heights
The little peak of Corona Heights is made out of chert, a dense and glassy rock. A quarry has uncovered an unusually large section of rock polished by fault motion. Geologists call this a slickenside. I saw a coyote at the base of the hill. I've seen signs warning about them around the city before, but this was the first time I've seen a coyote in San Francisco. Tom MacWright gave Corona Heights a 5 for its views. The view of the city and bay is great, but there's no view of the ocean, so I might give it a 4.8.
I concur with Tom's 6/5 score for running at Twin Peaks. The access from the north, at least, is still car free. There's a longish 8% grade that is super satisfying to finish. I try to make it up there every time I visit San Francisco.
-
2:00
PostGIS Development: PostGIS 2.4.10
sur Planet OSGeoThe PostGIS Team is pleased to release PostGIS 2.4.10! This is the end-of-life release of the 2.4 branch.
2.4.10
This release is a bug fix release, addressing issues found in the previous 2.4 releases.
-
21:43
Free and Open Source GIS Ramblings: MF-JSON update & tutorial with official sample
sur Planet OSGeoSince last week’s post, I’ve learned that there is an official OGC Moving Features JSON Encodings repository with more recent sample datasets, including MovingPoint, MovingPolygon, and Trajectory JSON examples.
The MovingPoint example seems to describe a storm, including its path (temporalGeometry), pressure, wind strength, and class values (temporalProperties):
You can give the current implementation a spin using this MyBinder notebook
An exciting future step would be to experiment with extending MovingPandas to support the MovingPolygon MF-JSON examples. MovingPolygons can change their size and orientation as they move. I’m not yet sure, however, if the number of polygon nodes can change between time steps and how this would be reflected by the prism concept presented in the draft specification:
Image source: [https:]]
-
20:17
Free and Open Source GIS Ramblings: Dynamic Infographic Map Tutorial
sur Planet OSGeoThis is a guest post by Mickael HOARAU @Oneil974
As an update of the tutorial from previous years, I created a tutorial showing how to make a simple and dynamic color map with charts in QGIS.
In this tutorial you can see some of interesting features of QGIS and its community plugins. Here you’ll see variables, expressions, filters, QuickOSM and DataPlotly plugins and much more. You just need to use QGIS 3.24 Tisler version.
Here is the tutorial.
-
18:21
Jackie Ng: MapGuide dev diary: Another (tangential) breakthrough!
sur Planet OSGeoSince I got the basic sanity checking PHP script running without crashing, there was one problem remaining around MgByteReader contents being read incorrectly. This turned out to be another out-of-date SWIG typemap around byte arrays. Once that got fixed we are able to read out the contents of the MgByteReader without content corruption. This is an important thing to test because a lot of results from the MapGuide API (XML results, rendered map images, map plots, etc) come in the form of MgByteReaders. If we can't read content out of these readers without data corruption we have major problems, but that is fortunately not the case (so far!).
With that out of the way, it was onto to the current PHP test suite for the MapGuide API and getting it fixed up and passing.
But before we go there, I wanted to check if our new PHP binding was leaking memory in the most obvious cases. To that effect, I built our PHP binding with reference counting diagnostics enabled and wrote this PHP script.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156<?php
function exceptionTest() {
/*
Expected release book-keeping:
MgException - 1
*/
try {
$rid = new MgResourceIdentifier("iamnotvalid");
} catch (MgException $ex) {
}
}
function throwingFunction() {
$agfRw = new MgAgfReaderWriter();
$wktRw = new MgWktReaderWriter();
$rid = new MgResourceIdentifier("iamnotvalid");
}
function exceptionTest2() {
/*
Expected release book-keeping:
MgAgfReaderWriter - 1
MgWktReaderWriter - 1
MgException - 1
*/
try {
throwingFunction();
} catch (MgException $ex) {
}
}
function exceptionTest3() {
/*
Expected release book-keeping:
MgAgfReaderWriter - 1
MgWktReaderWriter - 1
MgException - 2
*/
try {
$rid = new MgResourceIdentifier("iamnotvalid");
} catch (MgException $ex) {
}
try {
throwingFunction();
} catch (MgException $ex) {
//Previous iterations of the binding would leak the previous $ex when
//reusing the variable in this catch block
//If the release book-keeping for MgException is 2, then this is no
//longer the case
}
}
function geometryXformTest() {
/*
Expected release book-keeping:
MgCoordinateSystemFactory - 1
MgCoordinateSystem - 2
MgTransform - 1
MgWktReaderWriter - 1
MgPoint - 2
MgCoordinateXY - 2
*/
$csFactory = new MgCoordinateSystemFactory();
$cs1 = $csFactory->CreateFromCode("LL84");
$cs2 = $csFactory->CreateFromCode("WGS84.PseudoMercator");
$xform = $csFactory->GetTransform($cs1, $cs2);
$wktRw = new MgWktReaderWriter();
$pt = $wktRw->Read("POINT (1 2)");
$coord = $pt->GetCoordinate();
echo "Point (".$coord->GetX().", ".$coord->GetY().")\n";
$pt = $pt->Transform($xform);
$coord = $pt->GetCoordinate();
echo "XPoint (".$coord->GetX().", ".$coord->GetY().")\n";
}
function connectionServiceTest() {
/*
Expected release book-keeping:
MgUserInformation - 1
MgSiteConnection - 1
MgProxyResourceService - 1
MgProxyFeatureService - 1
MgProxyRenderingService - 1
MgProxyMappingService - 1
MgProxyKmlService - 1
MgProxyDrawingService - 1
MgProxyTileService - 1
MgProxyProfilingService - 1
*/
$userInfo = new MgUserInformation("Anonymous", "");
$site = new MgSiteConnection();
$site->Open($userInfo);
$service1 = $site->CreateService(MgServiceType::ResourceService);
$service2 = $site->CreateService(MgServiceType::FeatureService);
$service3 = $site->CreateService(MgServiceType::RenderingService);
$service4 = $site->CreateService(MgServiceType::MappingService);
$service5 = $site->CreateService(MgServiceType::KmlService);
$service6 = $site->CreateService(MgServiceType::DrawingService);
$service7 = $site->CreateService(MgServiceType::TileService);
$service8 = $site->CreateService(MgServiceType::ProfilingService);
}
function functionWithParam($userInfo) {
$userInfo->SetLocale("en");
}
function parameterPassingTest() {
// We want to check parameters of Mg* objects passed do not encounter
// refcounting shenanigans, but if they do, we want to make sure that
// proper increment/decrement is happening so that the MgUserInformation
// is released to 0 refcount (and thus deleted) when this function returns
/*
Expected release book-keeping:
MgUserInformation - 1
*/
$userInfo = new MgUserInformation();
functionWithParam($userInfo);
echo "Locale: " . $userInfo->GetLocale() . "\n";
}
MgInitializeWebTier("C:\\mg-4.0-install\\Web\\www\\webconfig_dev.ini");
echo "=========== BEGIN - exceptionTest() ===========\n";
exceptionTest();
echo "=========== END - exceptionTest() ===========\n";
echo "=========== BEGIN - exceptionTest2() ===========\n";
exceptionTest2();
echo "=========== END - exceptionTest2() ===========\n";
echo "=========== BEGIN - exceptionTest3() ===========\n";
exceptionTest3();
echo "=========== END - exceptionTest3() ===========\n";
echo "=========== BEGIN - connectionServiceTest() ===========\n";
connectionServiceTest();
echo "=========== END - connectionServiceTest() ===========\n";
echo "=========== BEGIN - parameterPassingTest() ===========\n";
parameterPassingTest();
echo "=========== END - parameterPassingTest() ===========\n";
echo "=========== BEGIN - geometryXformTest() ===========\n";
geometryXformTest();
echo "=========== END - geometryXformTest() ===========\n";
?>
The basic tenets behind this test script are:- If we new any Mg* class, we expect it to be released (reference count dropped by 1) once the respective variable goes out of scope. We consider the script to not be leaking if every "new" statement has a corresponding release as reported by our refcounting diagnostics.
- Any non-primitive value returned by any class in the MapGuide API is also released once its respective captured variable goes out of scope
- If an MgException is thrown and we catch it, it is released once we exit the respective catch block
- If we have multiple try/catch blocks on MgException and we use the same variable name for the caught exception, we're not leaking on subsequent catch blocks (this used to happen when we were generating the PHP bindings on the older SWIG/PHP version)
- Finally any MapGuide API object passed as parameters to other functions does not get touched by reference counting. But if it does, we expect that the reference count for that object is the same before and after the function call.
The key things to notice in the script output is that every variable assignment is being properly released upon exiting the function and anything that we new'd explicitly was released with a 1 -> 0 reference count transition. When an object's reference count drops to 0, it will be de-allocated on the C++ side. The script output is proof that we aren't leaking objects we explicitly new'd up from the PHP script, they are being properly de-allocated. Some objects (like the MgCoordinateSystem) release and do not drop to 0 reference count, but that is okay because I know that the MapGuide API caches MgCoordinateSystem instances for performances reasons, so they aren't leaking instances. They can live beyond the scope of the function call where I initially requested for such objects.
So now knowing that we aren't leaking for the general cases, we can move onto the main PHP test suite.
Running the main PHP test suite it for the first time (in a long time) showed some PHP errors around ambiguous overloaded methods. All of these errors are because PHP 7/8 must've tightened up some of the type checking and passing null as a parameter to a method that has many overloaded signatures may cause confusion. Either that or our heavily modified version of SWIG that we previously used to generate the PHP binding had custom codegen to specifically handle overloaded method resolution.
Regardless, the fix was simple enough. Where passing null would cause ambiguity, we just needed to add the necessary cast (in our case, it was casting to string) to make sure the correct method signature is invoked. Once that fix was applied, the test suite ran to completion ...
... with a metric crapton of test failures :(
Now to figure out why these test cases are failing, which is where we come to the subject of this post.
Anytime in the past, when I need to debug a PHP script, it was a case of sprinkling var_dump and print_r statements everywhere, running it and try to comprehend the now extra verbose output, rinsing and repeating until I found the problem. Basically, printf debugging.
I had heard about a thing called xdebug, but I had no idea how to pair it with an IDE (and what IDE to even use?) to get the nice integrated debugging experience I take for granted with .net, Java or C++. Debugging PHP script felt so primitive because I simply didn't know better and getting proper debugging set up just sounded too hard.
Now, times have changed. We have Visual Studio Code. It has a nice ecosystem of extensions for working with PHP that supports the version of PHP that we are now targeting. If debugging C++ code inside docker containers turned out to be such a piece of cake, then surely the same can be said for using VSCode to debug PHP scripts with breakpoints, variable inspection and the whole works!
So I searched for a VSCode extension that could help me debug PHP, and the first result was this PHP debug adapter. I followed its instructions to the letter.
I went to the xdebug install wizard and pasted by dumped phpinfo details
Once submitted, the wizard figured out what version of PHP I had and gave me the download link for the xdebug extension to download and further instructions on what php.ini changes I needed to make
Then back to the VSCode extension instructions, I also updated php.ini to activate extra xdebug settings
1
2xdebug.mode = debug
xdebug.start_with_request = yes
Then in VSCode, I opened the PHP script I intend to run and debug, and created a new launch.json file for my active workspace.
The newly installed VSCode PHP debug extension must've kicked in at this point because it created a launch.json with 3 xdebug launch presets ready to go. I modify the "Launch currently open script" preset to add in the extra command-line arguments needed by my PHP script.
Once I saved the launch.json, I open the PHP script again, stuck some breakpoints, switched to the debug tab, making sure to use the "Launch currently open script" preset.
I press the play button to start debugging and lo and behold! We're now breaking and stepping through PHP code and inspecting variables!
Now I can focus on figuring out why there are so many test failures, at a much faster pace than what I would've normally done in the past!
No doubt when MapGuide Open Source 4.0 is finally out the door, I'll have to write up a variation of this post on how to set up VSCode with PHP debugging for your PHP-based MapGuide applications. Because nobody should be sprinking var_dumps and print_r statements to debug PHP code like I have done in the past when this is many orders of magnitude faster and more productive! -
11:00
CARTO Blog: Dark Store Site Selection: How Geospatial Data Can Help
sur Planet OSGeoIn New York City, a number of companies such as 1520, Fridge No More, JOKR and BUYK have started offering local grocery delivery in 15 minutes from dark stores. As these se... -
2:00
PostGIS Development: PostGIS 2.5.6
sur Planet OSGeoThe PostGIS Team is pleased to release PostGIS 2.5.6!
2.5.6
This release is a bug fix release, addressing issues found in the previous 2.5 releases.
-
2:00
geOps: geOps News I/2022
sur Planet OSGeoNews zu unseren Produkte und Projekten sowie zu den nächsten Events. -
10:00
Paul Ramsey: Cloud Optimized Shape File
sur Planet OSGeoThe DreamOver a year ago Chris Holmes, the driving force behind the “cloud optimized GeoTIFF” (COG) and “spatio-temporal asset catalog” (STAC) standards that are sweeping the “cloud optimized raster” data management world, asked me what I thought the story of a similar “cloud optimized vector” format might look like.
And I thought about COG, which is really just a very very old format (GeoTIFF) with its bytes rearranged so that the order of bytes in the file matches the likely order in which they will be accessed (blocks of bands, and within the bands, squares of pixels), and I thought I had the perfect, maximally snarky answer:
Dude, shape file is already a cloud-native format.
Now, this might seem counter-intuitive, but hear me out:
- Shape format hails from the early 90’s, when hard-disks spun very slowly, and the limiting factor for data access was usually I/O. Which is much like “cloud optimized” range access over [HTTP:] seeks are expensive, but block reads are cheap.
- Shape format already divies up the attributes and shapes into separate files, so you can render one without reading the other.
- Shape format is already “network safe”, with endianness defined in the format.
- Shape format is already universally supported. The specification is 24 years old, and it has been the de facto interchange format for so long that people make a joke out of it.
In short, shapefile already looks a lot like GeoTIFF, the founding format of the “cloud optimized geospatial” movement.
Let’s Get RealSo, what is missing to make “cloud optimized shapefile” a reality?
Well, in order to spatially search a shapefile you need a spatial index. There is no index format in the formal Esri specification, and the Esri
sbx
index format is proprietary (though largely reverse engineered at this point) but the open source world has had a shape file index format for 20 years: the “QIX file”.You generate a QIX file using the shptree utility in Mapserver. You can also generate one in GDAL. You can also get GeoTools to generate one.
With a QIX file, the “shape file” now consists of four files:
- shp, the binary shapes
- dbf, the table of attributes
- shx, a file index of the byte offsets of each shape in the shp file
- qix, a spatial index of the shapes
The next trick, just as in COG, is to put the main data files (
shp
,dbf
andshx
) into the same order they are likely to be searched in: spatial order.Since we already have a spatial index (
qix
), we can get the files in spatial order by re-writing them in the same order they appear in the index.Initially I told Chris that this could be done with the Mapserver sortshp utility, however I was mistaken:
sortshp
sorts the file in attribute order.To make “cloud optimized shape file” a reality, first we need a new utility program that sorts the
shp
,shx
anddbf
files intoqix
order.We need: coshp!
Not Even Remotely Donecoshp
is just a re-working of thesortshp
utility, but instead of sorting the output file by attribute it sorts it using the index tree as the driver. This results inshp
anddbf
files where shapes that are “near” in space are also “near” in the byte-stream of the file. This will reduce the number of random reads necessary to access portions of the file using a bounding box search.One of the quiet secrets of the “cloud optimized” geospatial world is that, while all the attention is placed on the formats, the actual really really hard part is writing the clients that can efficiently make use of the carefully organized bytes.
For example, the fancy demonstrations of “pure client-side” COG browsers require a complete GeoTIFF reader in Javascript, along with some extra “cloud” smarts to know what pieces of data to cache and what to treat as transient info during rendering.
So, spatially sorting a shape file is a necessary, but not at all sufficient condition to create an actual “cloud optimized shapefile”, because for it to be practically useful, there needs to be at a minimum a client-side javascript reader.
That means javascript that can:
- Read the shp file format.
- Read the dbf file format.
- Read the shx file format.
- Read the qix file format.
To be truly useful, the javascript should probably include enough cloud smarts to read and opportunistically cache pieces of the files: headers at a minimum, but also reading in branches of the
qix
andshx
indexes on-demand.To make things marginally easier, I have “documented” the QIX format. It’s an ugly beast, but it is possible to traverse it without deserializing the whole thing.
It’s a challenging problem, but I hope there is someone with enough nostalgia for old formats and thirst for glory to make it happen.
-
18:30
Jackie Ng: MapGuide dev diary: An important breakthrough!
sur Planet OSGeoRecently I have gotten back into the grind of MapGuide development pushing to clear the final hurdle of having functional PHP bindings for the MapGuide API.
Since I last touched this code, several things have changed.
- We originally wanted to target PHP 7.x, but this is no longer the latest. PHP 8.1.x is the latest. This release of PHP 8.1 for Windows is also built with the same MSVC compiler we use for MapGuide and FDO (MSVC 2019), which means the stars have aligned again where we can source official windows PHP binaries for bundling.
- Our last attempt used SWIG 4.0.2 (the most recent stable release). This release unfortunately cannot generate functional bindings for PHP 8, so our hand has been forced and we are now using and assuming current git master of SWIG for generating PHP bindings. The latest git master also no longer generates a [PHP extension .dll + .php proxy script] combination and goes back to generating just a PHP extension .dll, which is great because that how our (now) legacy PHP binding was generated.
The PHP binding work has now advanced to the stage where we can run this basic sanity test script against a binary PHP 8.1.4 distribution on Windows with no errors or crashes.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120<?php
echo "Initializing web tier";
try {
MgInitializeWebTier("C:\\mg-4.0-install\\Web\\www\\webconfig_dev.ini");
} catch (MgException $initEx) {
echo "Init failure!";
die;
} catch (Exception $ex) {
echo "[php]: Exception: " . $ex->getMessage() . "\n";
die;
}
echo "[php]: Initialized\n";
// We haven't and shouldn't need to require/include constants.php
// they are now baked into the PHP extension along with the other
// MapGuide API proxy classes
echo "[php]: Testing some constants\n";
echo " - " . MgMimeType::Agf . "\n";
echo " - " . MgMimeType::Kml . "\n";
echo " - " . MgMimeType::Mvt . "\n";
echo " - " . MgImageFormats::Png . "\n";
echo " - " . MgImageFormats::Gif . "\n";
echo " - " . MgLogFileType::Authentication . "\n";
echo " - " . MgServerInformationProperties::ClientOperationsQueueCount . "\n";
$user = new MgUserInformation("Anonymous", "");
// Basic set/get
$user->SetLocale("en");
echo "[php]: Locale is: " . $user->GetLocale() . "\n";
$conn = new MgSiteConnection();
$conn->Open($user);
// Create a session repository
$site = $conn->GetSite();
$sessionID = $site->CreateSession();
echo "[php]: Created session: $sessionID\n";
$user->SetMgSessionId($sessionID);
// Get an instance of the required services.
$resourceService = $conn->CreateService(MgServiceType::ResourceService);
echo "[php]: Created Resource Service\n";
$mappingService = $conn->CreateService(MgServiceType::MappingService);
echo "[php]: Created Mapping Service\n";
$resId = new MgResourceIdentifier("Library://");
echo "[php]: Enumeratin'\n";
$resources = $resourceService->EnumerateResources($resId, -1, "");
echo $resources->ToString() . "\n";
echo "[php]: Coordinate System\n";
$csFactory = new MgCoordinateSystemFactory();
echo "[php]: CS Catalog\n";
$catalog = $csFactory->GetCatalog();
echo "[php]: Category Dictionary\n";
$catDict = $catalog->GetCategoryDictionary();
echo "[php]: CS Dictionary\n";
$csDict = $catalog->GetCoordinateSystemDictionary();
echo "[php]: Datum Dictionary\n";
$datumDict = $catalog->GetDatumDictionary();
echo "[php]: Coordinate System - LL84\n";
$cs1 = $csFactory->CreateFromCode("LL84");
echo "[php]: Coordinate System - WGS84.PseudoMercator\n";
$cs2 = $csFactory->CreateFromCode("WGS84.PseudoMercator");
echo "[php]: Make xform\n";
$xform = $csFactory->GetTransform($cs1, $cs2);
echo "[php]: WKT Reader\n";
$wktRw = new MgWktReaderWriter();
echo "[php]: WKT Point\n";
$pt = $wktRw->Read("POINT (1 2)");
$coord = $pt->GetCoordinate();
echo "[php]: X: ".$coord->GetX().", Y: ".$coord->GetY()."\n";
$site->DestroySession($sessionID);
echo "[php]: Destroyed session $sessionID\n";
echo "[php]: Test byte reader\n";
$bs = new MgByteSource("abcd1234", 8);
$content = "";
$br = $bs->GetReader();
$buf = "";
while ($br->Read($buf, 2) > 0) {
echo "Buffer: '$buf'\n";
$content .= $buf;
}
echo "[php]: Test byte reader2\n";
$bs2 = new MgByteSource("abcd1234", 8);
$content = "";
$br2 = $bs2->GetReader();
$buf = "";
while ($br2->Read($buf, 3) > 0) {
echo "Buffer: '$buf'\n";
$content .= $buf;
}
$agfRw = new MgAgfReaderWriter();
echo "[php]: Trigger an exception\n";
try {
$agfRw->Read(NULL);
} catch (MgException $ex) {
echo "[php]: MgException caught\n";
echo "[php]: MgException - Code: ".$ex->GetExceptionCode()."\n";
echo "[php]: MgException - Message: ".$ex->GetExceptionMessage()."\n";
echo "[php]: MgException - Details: ".$ex->GetDetails()."\n";
echo "[php]: MgException - Stack: ".$ex->GetStackTrace()."\n";
echo "Is standard PHP exception too? " . ($ex instanceof Exception) . "\n";
} catch (Exception $ex) {
echo "[php]: Exception: " . $ex->getMessage() . "\n";
}
echo "[php]: Trigger another exception\n";
try {
$r2 = new MgResourceIdentifier("");
} catch (MgException $ex2) {
echo "[php]: MgException caught\n";
echo "[php]: MgException - Code: ".$ex2->GetExceptionCode()."\n";
echo "[php]: MgException - Message: ".$ex2->GetExceptionMessage()."\n";
echo "[php]: MgException - Details: ".$ex2->GetDetails()."\n";
echo "[php]: MgException - Stack: ".$ex2->GetStackTrace()."\n";
echo "Is standard PHP exception too? " . ($ex2 instanceof Exception) . "\n";
} catch (Exception $ex) {
echo "[php]: Exception: " . $ex->getMessage() . "\n";
}
echo "Press any key to exit\n";
readline();
?>
This script is a "sanity check" in that it is testing the key aspects of the MapGuide API that *must* function properly.- We can init the web tier
- We can create a site connection
- We can request instances of MgService-derived subclasses with proper downcasting (eg. if we ask for a resource service, we get a MgResourceService and not its parent MgService)
- We can catch MgExceptions and inspect all relevant properties from it.
- We can access constants. Notice we aren't require/include-ing constants.php? That's because we've found a way to get SWIG to bake all MapGuide constants into the PHP extension itself so this file is no longer necessary!
- We can interact with MgByteReader contents properly
Once this is taken care of, the long journey begins to make sure everything else is working in order of importance:- Our PHP test suite passes
- Our PHP web tier applications (site administrator, schema report, AJAX viewer) are functional
- Fusion is functional
- We can build updated Apache and PHP end-to-end on Linux
- All of the above is functional in both IIS and Apache web server configurations on both Windows and Linux
-
20:14
pycsw Team: pycsw May 2022 code sprint
sur Planet OSGeopycsw May 2022 code sprintpycsw will hold a virtual sprint on 23 - 25 May 2022. The purpose of the sprint will be to focus on features for the 3.0 release (OGC API - Records support, JSON backend support, custom transformations, etc.).
More information on the sprint can be found on the pycsw wiki.
Looking forward to seeing you there!
-
6:20
Cameron Shorter: Open Source Peer Bonuses for Good Doc Templateers
sur Planet OSGeoCongratulations to five templatateers from The Good Docs Project for your Open Source Peer Bonus award from Google. This cool award enables Google employees to recognize and thank a few valued open source contributors. It includes a token financial contribution - enough to take the family out for dinner at a nice restaurant.
Gayathri Krishnaswamy, Chris Ganta and Nelson GuyaGayathri, Chris and Nelson have been peer-writing open source documentation templates within our EMEA-APAC working group. This includes:
- Deep research into “What is a good quickstart document”.
- Established a quickstart template and associated guide for documenting open source projects.
- Projecting their writing expertise into the external OSGeo-Live open source project.
- Establishing and describing "peer writing". Look out for their talk about their experience at the upcoming Write the Docs conference: Peer writing and beyond - An experimental approach to a sustainable open-source projects.
- As well as doing a lot of the research, Gayathri has managed the copying of docs from Google Docs into the github repository.
- Nelson initially worked out the OSGeo-Live documentation pipeline, and then mentored Chris and Gayathri in getting started.
- Chris did a lot of the group coordination, and has delivered an excellent presentation on the peer writing strategy that the group developed, laying foundations for how it can be replicated.
Carrie has grown into a key role in within The Good Docs Project:
- She’s head of the content strategy team, driving the project contributors to frame their work in terms of understanding our user bases, accounting for where individual elements of our project need to live.
- Specifically, in the last year she’s helped the project clarify its scope and focus, with the ideals of providing education to developers needing to write docs, templates for different types of docs, systems for deploying docs, and related doc subjects. That’s all thanks to her stepping in as a product manager to organize a big group of volunteers, alongside her technical writing skills used in article and template contributions.
- In recognition of her work, she's recently accepted a co-chair role of The Good Docs project.
Deanna Thompson is an experienced technical writer who plays an impactful role within The Good Docs Project.
- She done extensive research and community consultation to build a template for writing tutorials that developers can use.
- She continually provides insightful feedback to templates others develop, showing leadership and mentorship our team greatly benefits from.
- She's been playing a lead role in establishing training for using git for tech writers within our project.
- And in recognition of her work, she has recently accepted a role on the Project Steering Committee.
- She’s certainly raised the bar on what we hope to get out of contributors!
-
21:08
Free and Open Source GIS Ramblings: New OGC Moving Features JSON support in MovingPandas
sur Planet OSGeoFirst time, we talked about the OGC Moving Features standard in a post from 2017. Back then, we looked at the proposed standard way to encode trajectories in CSV and discussed its issues. Since then, the Moving Features working group at OGC has not been idle. Besides the CSV and XML encodings, they have designed a new JSON encoding that addresses many of the downsides of the previous two. You can read more about this in our 2020 preprint “From Simple Features to Moving Features and Beyond”.
Basically Moving Features JSON (MF-JSON) is heavily inspired by GeoJSON and it comes with a bunch of mandatory and optional key/value pairs. There is support for static properties as well as dynamic temporal properties and, of course, temporal geometries (yes geometries, not just points).
I think this format may have an actual chance of gaining more widespread adoption.
Image source: [www.opengis.net]
Inspired by Pandas.read_csv() and GeoPandas.read_file(), I’ve started implementing a read_mf_json() function in MovingPandas. So far, it supports basic MovingFeature JSONs with MovingPoint geometry:
You’ll need to use the current development version to test this feature.
Next steps will be MovingFeatureCollection JSONs and support for static as well as temporal properties. We’ll have to see if MovingPandas can be extended to go beyond moving point geometries. Storing moving linestrings and polygons in the GeoDataFrame will be the simple part but analytics and visualization will certainly be more tricky.
-
5:41
Sean Gillies: Superior training weeks one and two recap
sur Planet OSGeoI'm a little behind on running blogging. I'm going to summarize the first two weeks of my season in one post.
The only race I've signed up for so far is the 50 mile Superior Fall Trail Race. I've got lodging reserved at the finish line in Lutzen, Minnesota, tickets to Duluth, rental car reservations. Now I just need to get in shape. 24 weeks of training is my plan. Five four-week blocks of building endurance and one block of fine tuning, tapering, and racing. In the first block I'm ramping up from 2-3 days of running each week to five and doing some higher intensity workouts.
In week one I ran five days, including one speed workout, and one long run with people getting a preview of the Quad Rock course. It was fun being an ambassador of sorts for the event. After running it three of the last four years, I'm taking a year off. I'll be volunteering at an aid station instead. Here are the numbers for week one.
7 hours, 19 minutes
36.5 miles
4626 ft D+
And for week two, in which I did my first back-to-back long runs.
8 hours, 0 minutes
39.1 miles
5026 ft D+
April has been sort of cold and windy. I'm looking forward to milder weather.
-
11:00
CARTO Blog: Site Selection for Retailers Using Commercial Hotspot Analysis
sur Planet OSGeoOne of the most impactful applications of spatial data and analytics is in the area of retail site selection. Retailers continue to evaluate their network of brick-and-mort... -
7:49
GeoTools Team: Unchecked JNDI lookups in GeoTools (CVE-2022-24818)
sur Planet OSGeoThe recent log4shell vulnerability has brought to our attention that unchecked JNDI lookups are inadvisable. We have isolated the JNDI lookup code responsible in GeoTools and reported the vulnerability as GHSA-jvh2-668r-g75x / CVE-2022-24818.To address this issue we are pleased to introduce the jndiLookup(String) function:DataSource dataSource = (DataSource) GeoTools.jndiLookup(name);This method -
14:30
3liz: Sortie Lizmap Web Client 3.4.10 et 3.5.2
sur Planet OSGeo3Liz est heureux d'annoncer la sortie de Lizmap Web Client 3.4.10 et 3.5.2 ainsi que de plusieurs extensions QGIS et modules.
Lizmap Web ClientCes versions ne font que corriger des régressions ou des bugs. Concernant la version 3.5.2, on peut citer en autre :
- Amélioration de l'interface utilisateur pour l'envoie d'image depuis un mobile
- Amélioration des messages d'erreur concernant le nouveau panneau "Information serveur"
Les deux versions comportent les mises à jour suivantes :
- Correction des formulaires ayant des menus déroulants avec un élément vide
- Amélioration des performances pour la récupération des données de QGIS Serveur
Les paquets et la liste complete des modifications se trouvent sur la page des sorties :
Pour information, nous ne faisons que des mises à critiques désormais sur la branche 3.4.
Les clients qui ont souscrit une offre d'hébergement chez nous ont bénéficié des mises à jour automatiquement.
Extensions QGIS ServeurDurant le mois de Mars, nous avons également sorti des versions des extensions QGIS Serveur :
- WfsOutputExtension 1.7.0 avec la correction de la détection des types de champs, financé par la région Hauts-de-France.
- Lizmap QGIS Serveur 3.7.5, amélioration de l'API Lizmap, filtrage par polygone etc
- AtlasPrint 3.3.1 pour afficher l'utilisateur connecté dans le navigateur web au sein du PDF
Pour rajouter des fonctionnalités en plus dans Lizmap :
- AltiProfil 0.2.3
- openADS 1.0.0
- Adresse 1.0.0
- Cadastre 1.8.1, mise à jour obligatoire si vous utilisez les dernières versions Lizmap Web Client
Bonnes mises à jour ?
L'équipe 3Liz
-
14:30
3liz: Release Lizmap Web Client 3.4.10 and 3.5.2
sur Planet OSGeo3Liz is pleased to announce the release of Lizmap Web Client 3.4.10 and 3.5.2 and also modules and QGIS plugins.
Lizmap Web ClientThese versions are fixing regressions or issues. About the 3.5.2, we can notice :
- Improve the user experience when uploading a picture from a mobile in an input form
- Improve error message about the new panel "Server information"
These two versions includes :
- Fixing forms having drop down menu with an empty item
- Improve performance when fetching data from QGIS Server
Packages and the full list of modifications are available on the release page
For your information, we are now only doing critical bug-fixing on the 3.4 branch.
Customers who have subscribed to a hosting package with us have received all updates automatically.
QGIS Server pluginsDuring this month, we have also released new versions about QGIS Server plugins :
- WfsOutputExtension 1.7.0, fixing the field type detection when exporting layers, funded by the Hauts-de-France province.
- Lizmap QGIS Server 3.7.5, improve the Lizmap API, filter by polygon etc
- AtlasPrint 3.3.1 to display the current logged Lizmap user in a PDF
To add additional features on top of Lizmap :
- AltiProfil 0.2.3
- openADS 1.0.0, French use case only
- Adresse 1.0.0, French use case only
- Cadastre 1.8.1, French use case only
Happy upgrading ?
The 3Liz team
-
11:00
CARTO Blog: Working Toward a Sustainable Future with CARTO & Google Cloud
sur Planet OSGeoAfter announcing our Sustainability Partnership with Google Cloud last October, we’re excited to further expand on the work and real-world solutions we’ve been developing t... -
2:00
GeoServer Team: Jiffle and GeoTools RCE vulnerabilities
sur Planet OSGeoA few critical vulnerabilities have been located in the GeoServer ecosystem that allow Remote Code Execution. This article describes the vulnerabilities, their mitigation, and links to patched versions of the various projects involved.
All the issues described in this post have been patched in:
- GeoServer 2.20.4, 2.19.6 or 2.18.6
- GeoWebCache 1.20.2, 1.19.3 or 1.18.5
- GeoTools 26.4, 25.6 or 24.6
- JAI-EXT 1.1.22
The rest of the POST describes the issues and their mitigation.
RCE in JiffleThe Jiffle map algebra language, provided by jai-ext, allows efficiently execute map algebra over large images. A vulnerability has been recently found in Jiffle, that allows a Code Injection to be performed by properly crafting a Jiffle invocation.
In the case of GeoServer, the injection can be performed from a remote request.
AssessmentGeoTools includes the Jiffle language as part of the
gt-process-raster-<version>
module, applications using it should check whether it’s possible to provide a Jiffle script from remote, and if so, upgrade or remove the functionality (see also the GeoServer mitigation, below).Stand-alone GeoWebCache is not affected, as it does not include Jiffle support.
The issue is of particular interest for GeoServer users, as GeoServer embeds Jiffle in the base WAR package. Jiffle is available as a OGC function, for usage in SLD rendering transformations.
This allows for a Remote Code Execution in properly crafted OGC requests, as well as from the administration console, when editing SLD files.
MitigationsIn case you cannot upgrade at once, then the following mitigation is strongly recommended:
- Stop GeoServer
- Open the war file, get into
WEB-INF/lib
and remove thejanino-<version>.jar
- Restart GeoServer.
This effectively removes the Jiffle ability to compile scripts in Java code, from any of the potential attack vectors (Janino is the library used to turn the Java code generated from the Jiffle script, into executable bytecode).
GeoServer should still work properly after the removal, but any attempt to use Jiffle will result in an exception.
ResolutionIssue:
- GEOS-10458 Upgrade to JAI-EXT 1.1.22
The GeoTools data stores, as well as the disk quota mechanism of GeoWebCache, and the JDBC user/role providers for GeoServer can all fetch connection pools from JNDI.
A properly crafted JNDI source name can cause uncontrolled deserialization of classes and eventually a Remote Code Execution, in a way similar to Log4Shell. However, unlike Log4Shell, it requires the administrator to enter these strings.
MitigationsIn terms of mitigation, GeoTools users should make sure the JNDI strings given to stores cannot be provided from remote, or external parties, without validation.
Stand-alone GeoWebCache users must now allow external or remote users to change the disk quota XML configuration files, guarding both local file system access, and the REST configuration API. The REST API can only be accessed authenticating as administrator, good practices in this regard involve:
- Disallowing remote access to the “/rest” endpoint in a GeoWebCache installation
- Rotating the administrator passwords.
GeoServer is affected though the Web administration interface and the REST configuration API, both of which require an administrator login to be used in order to setup JNDI connection strings. In order to mitigate the issue:
- Disallow remote access to the “/rest” and “/web” endpoints in a GeoServer installation.
- Change/rotate the administrator passwords.
The following issues have been resolved, and patched releases are available.
Issue:
- GEOT-7115 Streamline JNDI lookups
Thanks to Andrea Aime (GeoSolutions) for working so hard on this fix.
SpringShellBoth GeoServer and GeoWebCache use Spring MVC, for REST API controllers in both projects, and for the OGC API, GSR and taskmanager community modules, in GeoServer. The projects are commonly deployed as WAR files in Tomcat, with a fair amount of deploys using Java 11 and above.
This sets up both projects for exploit via the SpringShell vulnerability. however we looked, and could not find an actual attack vector.
This release train updates to newer a version of spring-framework that patched this potential issue.
MitigationsFor those that cannot upgrade, the recommended mitigations are:
- Run GeoServer and GeoWebCache on Java 8 instead, which is not vulnerable to the issue.
- Upgrade Tomcat to the releases that patched the attack vector, either 9.0.62 or 8.5.78 (don’t try to use Tomcat 10.x, GeoServer cannot run on it due to incompatible J2EE libraries).
- For extra security, limit access to the REST API, and remove community modules providing new service endpoints (OGC API, GSR, taskmanager).
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
Issue:
- GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
Thanks to Gabriel Roldan (camptocamp) for troubleshooting and performing this spring-framework update.
-
2:00
GeoServer Team: GeoServer 2.20.4 Released
sur Planet OSGeoGeoServer 2.20.4 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a stable release of the 2.20.x series recommended for production systems. This release was made in conjunction with GeoTools 26.4.
Thanks to everyone who contributed, and to Andrea Aime (GeoSolutions) and Jody Garnett (GeoCat) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended upgrade for production systems.
This release includes two improvements addressing Jiffle and GeoTools RCE vulnerabilities:
-
GEOS-10458 Upgrade to JAI-EXT 1.1.22
-
GEOT-7115 Streamline JNDI lookups
This release also includes:
-
GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
Allows layer group (layer mode
SINGLE
orOPAQUE
) list alternate styles in addition to the default one. Each alternate style is defined by a named configuration of layers and styles providing a unique visual representation.- GEOS-10252 Add Styles support to LayerGroup
- GEOS-10274 Geofence follow up LayerGroup Style addition
For more information see GSIP-205 Add Styles support to LayerGroup proposa.
Improvements and FixesImprovements:
-
GEOS-10434 Externalized GeoServer environment properties
-
GEOS-10427 Improve access check in ImportProcess
-
GEOS-10409 Improve deletion of WPS Execute input temp files
Fixes:
-
GEOS-10437 Breaking SLD 1.1 style by REST upload
-
GEOS-10419 NullPointerException from GeoServerOAuthAuthenticationFilter
-
GEOS-10418 Bad request sent to GeoFence when matching roles only
-
GEOS-10401 WPS GetExecutionResult doesn’t validate the mimetype parameter
-
GEOS-10400 Disabling WMS dynamic styling does not affect GetLegendGraphic requests
-
GEOS-10393 WFS-T deletes the wrong features (and further BatchManager issues)
-
GEOS-9978 WMS vendor parameter CLIP - ignores TIME/CQL_FILTER and other parameters when using with ImageMosaic
Tasks:
-
GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
-
GEOS-10303 Upgrade to jackson 2.13.2
For more information see 2.20.4 release notes.
About GeoServer 2.20Additional information on GeoServer 2.20 series:
- Jiffle and GeoTools RCE vulnerabilities
- Spring RCE Spring4Shell CVE-2022-22965 assessment
- Log4J2 zero day vulnerability assessment
- Internationalization of title and abstract
- State of GeoServer 2.20 edition
- Windows Installer
Release notes: ( 2.20.4 | 2.20.3 | 2.20.2 | 2.20.1 | 2.20.0 | 2.20-RC )
-
-
2:00
GeoServer Team: GeoServer 2.19.6 Released
sur Planet OSGeoGeoServer 2.19.6 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is an extra maintenance release of the 2.19.x series recommended for production systems. This release was made in conjunction with GeoTools 25.6.
Thanks to everyone who contributed, and to Andrea Aime (GeoSolutions) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended upgrade for production systems.
This release includes two improvements addressing Jiffle and GeoTools RCE vulnerabilities:
-
GEOS-10458 Upgrade to JAI-EXT 1.1.22
-
GEOT-7115 Streamline JNDI lookups
This release also includes:
-
GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
Fixes:
-
GEOS-10437 Breaking SLD 1.1 style by REST upload
-
GEOS-10336 INSPIRE failure: version not propagated in GetCapabilities LegendURL
-
GEOS-9978 WMS vendor parameter CLIP - ignores TIME/CQL_FILTER and other parameters when using with ImageMosaic
Tasks:
- GEOS-10303 Upgrade to jackson 2.13.2
For more information see 2.19.6 release notes.
About GeoServer 2.19Additional information on GeoServer 2.19 series:
- Jiffle and GeoTools RCE vulnerabilities
- Log4J2 zero day vulnerability assessment
- WMS GetFeatureInfo includes labels from ColorMap
- Promote WMTS multidim to extension
- Promote WPS-Download to extension
- Promote params-extractor to extension
- Promote GWC-S3 to extension
- Promote WPS-JDBC to extension status
- Promote MapML to extension status
- GeoServer repository transition to main branch
Release notes ( 2.19.6 | 2.19.5 | 2.19.4 | 2.19.3 | 2.19.2 | 2.19.1 | 2.19.0 | 2.19-RC )
-
-
2:00
GeoServer Team: GeoServer 2.18.6 Released
sur Planet OSGeoGeoServer 2.18.6 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is an extra maintenance release of the 2.18.x series recommended for production systems that have not yet upgraded to 2.19. This release was made in conjunction with GeoTools 24.6.
Thanks to everyone who contributed, and to Andrea Aime (GeoSolutions) and Jody Garnett (GeoCat) for making this release.
Security ConsiderationsThis release includes security enhancements and is a recommended upgrade for production systems.
This release includes two improvements addressing Jiffle and GeoTools RCE vulnerabilities:
-
GEOS-10458 Upgrade to JAI-EXT 1.1.22
-
GEOT-7115 Streamline JNDI lookups
This release also includes:
-
GEOS-10445 Upgrade Spring Framework from 5.1.20.RELEASE to 5.2.20.RELEASE
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
-
GEOS-10437 Breaking SLD 1.1 style by REST upload
-
GEOS-10249 GWC produce NPE when it comes to race condition
-
GEOS-10215 Layers nested inside a group maintain their prefix even in workspace specific services
-
GEOS-10213 WMS requests fail on LayerGroup default style names, when used in GetMap/GetFeatureInfo/GetLegendGraphics
-
GEOS-10200 GetLegendGraphic can fail if SCALE removes all rules
-
GEOS-10321 WCS 2.0 might fail to return coverages whose native BBOX goes slighly outside of the dateline
-
GEOS-10194 Improve importer LOGGING
-
GEOS-10335 Update GeoServer to a log4j version that does not support RCEs
For more information see 2.18.6 release notes.
About GeoServer 2.18Additional information on GeoServer 2.18 series:
- Jiffle and GeoTools RCE vulnerabilities
- Log4J2 zero day vulnerability assessment
- State of GeoServer 2.18 (slides)
-
GeoServer Orientation (slides video)
Release Notes ( 2.18.6 | 2.18.5 | 2.18.4 | 2.18.3 | 2.18.2 | 2.18.1 | 2.18.0 | 2.18-RC )
-
-
2:00
GeoServer Team: Jiffle and GeoTools RCE vulnerabilities
sur Planet OSGeoA few critical vulnerabilities have been located in the GeoServer ecosystem that allow Remote Code Execution. This article describes the vulnerabilities, their mitigation, and links to patched versions of the various projects involved.
All the issues described in this post have been patched in:
- GeoServer 2.20.4, 2.19.6 or 2.18.6
- GeoWebCache 1.20.2, 1.19.3 or 1.18.5
- GeoTools 26.4, 25.6 or 24.6
- JAI-EXT 1.1.22
The rest of the POST describes the issues and their mitigation.
RCE in JiffleThe Jiffle map algebra language, provided by jai-ext, allows efficiently execute map algebra over large images. A vulnerability has been recently found in Jiffle, that allows a Code Injection to be performed by properly crafting a Jiffle invocation.
In the case of GeoServer, the injection can be performed from a remote request.
AssessmentGeoTools includes the Jiffle language as part of the
gt-process-raster-<version>
module, applications using it should check whether it’s possible to provide a Jiffle script from remote, and if so, upgrade or remove the functionality (see also the GeoServer mitigation, below).Stand-alone GeoWebCache is not affected, as it does not include Jiffle support.
The issue is of particular interest for GeoServer users, as GeoServer embeds Jiffle in the base WAR package. Jiffle is available as a OGC function, for usage in SLD rendering transformations.
This allows for a Remote Code Execution in properly crafted OGC requests, as well as from the administration console, when editing SLD files.
MitigationsIn case you cannot upgrade at once, then the following mitigation is strongly recommended:
- Stop GeoServer
- Open the war file, get into
WEB-INF/lib
and remove thejanino-<version>.jar
- Restart GeoServer.
This effectively removes the Jiffle ability to compile scripts in Java code, from any of the potential attack vectors (Janino is the library used to turn the Java code generated from the Jiffle script, into executable bytecode).
GeoServer should still work properly after the removal, but any attempt to use Jiffle will result in an exception.
ResolutionIssue:
- GEOS-10458 Upgrade to JAI-EXT 1.1.22
The GeoTools data stores, as well as the disk quota mechanism of GeoWebCache, and the JDBC user/role providers for GeoServer can all fetch connection pools from JNDI.
A properly crafted JNDI source name can cause uncontrolled deserialization of classes and eventually a Remote Code Execution, in a way similar to Log4Shell. However, unlike Log4Shell, it requires the administrator to enter these strings.
MitigationsIn terms of mitigation, GeoTools users should make sure the JNDI strings given to stores cannot be provided from remote, or external parties, without validation.
Stand-alone GeoWebCache users must now allow external or remote users to change the disk quota XML configuration files, guarding both local file system access, and the REST configuration API. The REST API can only be accessed authenticating as administrator, good practices in this regard involve:
- Disallowing remote access to the “/rest” endpoint in a GeoWebCache installation
- Rotating the administrator passwords.
GeoServer is affected though the Web administration interface and the REST configuration API, both of which require an administrator login to be used in order to setup JNDI connection strings. In order to mitigate the issue:
- Disallow remote access to the “/rest” and “/web” endpoints in a GeoServer installation.
- Change/rotate the administrator passwords.
The following issues have been resolved, and patched releases are available.
Issue:
- GEOT-7115 Streamline JNDI lookups
Thanks to Andrea Aime (GeoSolutions) for working so hard on this fix.
SpringShellBoth GeoServer and GeoWebCache use Spring MVC, for REST API controllers in both projects, and for the OGC API, GSR and taskmanager community modules, in GeoServer. The projects are commonly deployed as WAR files in Tomcat, with a fair amount of deploys using Java 11 and above.
This sets up both projects for exploit via the SpringShell vulnerability. however we looked, and could not find an actual attack vector.
This release train updates to newer a version of spring-framework that patched this potential issue.
MitigationsFor those that cannot upgrade, the recommended mitigations are:
- Run GeoServer and GeoWebCache on Java 8 instead, which is not vulnerable to the issue.
- Upgrade Tomcat to the releases that patched the attack vector, either 9.0.62 or 8.5.78 (don’t try to use Tomcat 10.x, GeoServer cannot run on it due to incompatible J2EE libraries).
- For extra security, limit access to the REST API, and remove community modules providing new service endpoints (OGC API, GSR, taskmanager).
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
Issue:
- GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
Thanks to Gabriel Roldan (camptocamp) for troubleshooting and performing this spring-framework update.
-
2:00
GeoServer Team: GeoServer 2.20.4 Released
sur Planet OSGeoGeoServer 2.20.4 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a stable release of the 2.20.x series recommended for production systems. This release was made in conjunction with GeoTools 26.4.
Thanks to everyone who contributed, and to Andrea Aime (GeoSolutions) and Jody Garnett (GeoCat) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended upgrade for production systems.
This release includes two improvements addressing Jiffle and GeoTools RCE vulnerabilities:
-
GEOS-10458 Upgrade to JAI-EXT 1.1.22
-
GEOT-7115 Streamline JNDI lookups
This release also includes:
-
GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
Allows layer group (layer mode
SINGLE
orOPAQUE
) list alternate styles in addition to the default one. Each alternate style is defined by a named configuration of layers and styles providing a unique visual representation.- GEOS-10252 Add Styles support to LayerGroup
- GEOS-10274 Geofence follow up LayerGroup Style addition
For more information see GSIP-205 Add Styles support to LayerGroup proposa.
Improvements and FixesImprovements:
-
GEOS-10434 Externalized GeoServer environment properties
-
GEOS-10427 Improve access check in ImportProcess
-
GEOS-10409 Improve deletion of WPS Execute input temp files
Fixes:
-
GEOS-10437 Breaking SLD 1.1 style by REST upload
-
GEOS-10419 NullPointerException from GeoServerOAuthAuthenticationFilter
-
GEOS-10418 Bad request sent to GeoFence when matching roles only
-
GEOS-10401 WPS GetExecutionResult doesn’t validate the mimetype parameter
-
GEOS-10400 Disabling WMS dynamic styling does not affect GetLegendGraphic requests
-
GEOS-10393 WFS-T deletes the wrong features (and further BatchManager issues)
-
GEOS-9978 WMS vendor parameter CLIP - ignores TIME/CQL_FILTER and other parameters when using with ImageMosaic
Tasks:
-
GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
-
GEOS-10303 Upgrade to jackson 2.13.2
For more information see 2.20.4 release notes.
About GeoServer 2.20Additional information on GeoServer 2.20 series:
- Jiffle and GeoTools RCE vulnerabilities
- Spring RCE Spring4Shell CVE-2022-22965 assessment
- Log4J2 zero day vulnerability assessment
- Internationalization of title and abstract
- State of GeoServer 2.20 edition
- Windows Installer
Release notes: ( 2.20.4 | 2.20.3 | 2.20.2 | 2.20.1 | 2.20.0 | 2.20-RC )
-
-
2:00
GeoServer Team: GeoServer 2.19.6 Released
sur Planet OSGeoGeoServer 2.19.6 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is an extra maintenance release of the 2.19.x series recommended for production systems. This release was made in conjunction with GeoTools 25.6.
Thanks to everyone who contributed, and to Andrea Aime (GeoSolutions) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended upgrade for production systems.
This release includes two improvements addressing Jiffle and GeoTools RCE vulnerabilities:
-
GEOS-10458 Upgrade to JAI-EXT 1.1.22
-
GEOT-7115 Streamline JNDI lookups
This release also includes:
-
GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
Fixes:
-
GEOS-10437 Breaking SLD 1.1 style by REST upload
-
GEOS-10336 INSPIRE failure: version not propagated in GetCapabilities LegendURL
-
GEOS-9978 WMS vendor parameter CLIP - ignores TIME/CQL_FILTER and other parameters when using with ImageMosaic
Tasks:
- GEOS-10303 Upgrade to jackson 2.13.2
For more information see 2.19.6 release notes.
About GeoServer 2.19Additional information on GeoServer 2.19 series:
- Jiffle and GeoTools RCE vulnerabilities
- Log4J2 zero day vulnerability assessment
- WMS GetFeatureInfo includes labels from ColorMap
- Promote WMTS multidim to extension
- Promote WPS-Download to extension
- Promote params-extractor to extension
- Promote GWC-S3 to extension
- Promote WPS-JDBC to extension status
- Promote MapML to extension status
- GeoServer repository transition to main branch
Release notes ( 2.19.6 | 2.19.5 | 2.19.4 | 2.19.3 | 2.19.2 | 2.19.1 | 2.19.0 | 2.19-RC )
-
-
2:00
GeoServer Team: GeoServer 2.18.6 Released
sur Planet OSGeoGeoServer 2.18.6 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is an extra maintenance release of the 2.18.x series recommended for production systems that have not yet upgraded to 2.19. This release was made in conjunction with GeoTools 24.6.
Thanks to everyone who contributed, and to Andrea Aime (GeoSolutions) and Jody Garnett (GeoCat) for making this release.
Security ConsiderationsThis release includes security enhancements and is a recommended upgrade for production systems.
This release includes two improvements addressing Jiffle and GeoTools RCE vulnerabilities:
-
GEOS-10458 Upgrade to JAI-EXT 1.1.22
-
GEOT-7115 Streamline JNDI lookups
This release also includes:
-
GEOS-10445 Upgrade Spring Framework from 5.1.20.RELEASE to 5.2.20.RELEASE
Although GeoServer assessment did not identify any issue we have now updated the the spring framework library.
-
GEOS-10437 Breaking SLD 1.1 style by REST upload
-
GEOS-10249 GWC produce NPE when it comes to race condition
-
GEOS-10215 Layers nested inside a group maintain their prefix even in workspace specific services
-
GEOS-10213 WMS requests fail on LayerGroup default style names, when used in GetMap/GetFeatureInfo/GetLegendGraphics
-
GEOS-10200 GetLegendGraphic can fail if SCALE removes all rules
-
GEOS-10321 WCS 2.0 might fail to return coverages whose native BBOX goes slighly outside of the dateline
-
GEOS-10194 Improve importer LOGGING
-
GEOS-10335 Update GeoServer to a log4j version that does not support RCEs
For more information see 2.18.6 release notes.
About GeoServer 2.18Additional information on GeoServer 2.18 series:
- Jiffle and GeoTools RCE vulnerabilities
- Log4J2 zero day vulnerability assessment
- State of GeoServer 2.18 (slides)
-
GeoServer Orientation (slides video)
Release Notes ( 2.18.6 | 2.18.5 | 2.18.4 | 2.18.3 | 2.18.2 | 2.18.1 | 2.18.0 | 2.18-RC )
-
-
18:38
Free and Open Source GIS Ramblings: Geospatial: where MovingPandas meets Leafmap
sur Planet OSGeoMany of you certainly have already heard of and/or even used Leafmap by Qiusheng Wu.
Leafmap is a Python package for interactive spatial analysis with minimal coding in Jupyter environments. It provides interactive maps based on folium and ipyleaflet, spatial analysis functions using WhiteboxTools and whiteboxgui, and additional GUI elements based on ipywidgets.
This way, Leafmap achieves a look and feel that is reminiscent of a desktop GIS:
Image source: [https:]]
Recently, Qiusheng has started an additional project: the geospatial meta package which brings together a variety of different Python packages for geospatial analysis. As such, the main goals of geospatial are to make it easier to discover and use the diverse packages that make up the spatial Python ecosystem.
Besides the usual suspects, such as GeoPandas and of course Leafmap, one of the packages included in geospatial is MovingPandas. Thanks, Qiusheng!
I’ve tested the mamba install today and am very happy with how this worked out. There is just one small hiccup currently, which is related to an upstream jinja2 issue. After installing geospatial, I therefore downgraded jinja:
mamba install -c conda-forge geospatial mamba install -c conda-forge jinja2=3.0
Of course, I had to try Leafmap and MovingPandas in action together. Therefore, I fired up one of the MovingPandas example notebook (here the example on clipping trajectories using polygons). As you can see, the integration is pretty smooth since Leafmap already support drawing GeoPandas GeoDataFrames and MovingPandas can convert trajectories to GeoDataFrames (both lines and points):
Clipped trajectory segments as linestrings in Leafmap
Leafmap includes an attribute table view that can be activated on user request to show, e.g. trajectory information
And, of course, we can also map the original trajectory points
Geospatial also includes the new dask-geopandas library which I’m very much looking forward to trying out next.
-
11:00
CARTO Blog: What's New in CARTO - Q1 2022
sur Planet OSGeoDuring the first quarter of 2022, we released some exciting new features and enhancements to the CARTO platform, giving users unparalleled spatial analysis capabilities, na... -
11:00
CARTO Blog: CARTO Self Hosted on Kubernetes in Partnership with VMware
sur Planet OSGeoAs legal regulations on how user data is managed becomes stricter, Data Governance is becoming a priority for many Enterprises across the globe. In many cases, because of t... -
15:21
GeoSolutions: MapStore Release 2022.01.00
sur Planet OSGeoEnclosure: [download]
You must be logged into the site to view this content.
-
8:00
Lutra consulting: Point cloud and QGIS 3D improvements - progress report 2
sur Planet OSGeoIn this post, we will update you with our progress on QGIS point clouds and 3D improvements.
Point cloud filteringWith this feature, you can filter the point cloud data based on the classes or any other attributes. This is very similar to filtering available for vector layers.
Filtering data allows you superimpose for example building on top of the raster representation of your point cloud data:
Examples of filtering you can use:
-
Classification = 2
- only show ground points -
ReturnNumber = 1
- only show the first return orReturnNumber = NumberOfReturns
for the last return -
Z >= 10 AND Z <= 50
- only show a slice from the range of elevations
The filtering window also displays statistics of some of the parameters.
2D/3D Camera syncWhen you navigate in the 2D map, you often want to see the 3D map view also updated and vice versa. This feature also allows you to view the extent and camera angle of your 3D map view on 2D map.
New point clouds styling methodThere is a new 3D styling mode for point cloud which follows the 2D styling. This means you do not need to apply the same styling, e.g. Classification twice: once for the 2D map view and another for the 3D map view. Once you set the 3D style to follow 2D map, any changes in 2D map style will be automatically displayed in 3D map.
Camera and navigation improvementsThis feature was funded by QGIS.org to improve 3D map navigation. Users can now better move, rotate both the map and camera. The 3D map navigation is now more inline with other applications like Google Earth.
More to comeWe are busy adding more new features. Stay tuned for some more exciting development.
-
-
2:00
EOX' blog: VirES for Aeolus - VRE Open to public
sur Planet OSGeoAs we mentioned in a previous blog post we have been working on implementing an extension to the VirES for Aeolus service. The extension is called "Virtual Research Environment" (VRE) and since March it has been opened to the public. We see a great potential to help scientific activities with the VR ... -
2:00
GeoServer Team: Spring RCE vulnerability
sur Planet OSGeoCVE-2022-22965 Spring Core VulnerabilityA recently discovered vulnerability in the Spring (CVE-2022-22965) has been reported as affecting systems running Java 9+. Note systems using Java 8 are not thought to be vulnerable at this time.
As far as we can determine at this time while GeoServer does use a potentially vulnerable version of the library but we do not think it is exploitable via GeoServer.
The GeoServer team are aware of the reports of this vulnerability, so please do not contact us asking about it unless you are reporting an actual demonstration of the problem in a GeoServer installation or are offering to assist in the upgrade process with developer time or money.
We are working on upgrading to a patched version of the library and will post an update when that work is complete.
-
2:00
GeoServer Team: Spring4Shell RCE vulnerability
sur Planet OSGeoA vulnerability has located in the Spring Framework ecosystem that allow Remote Code Execution. This article describes the vulnerability, assessment, mitigation, and links to patched versions of the various projects involved.
Please do not contact us asking about this vulnerability unless you are reporting an actual demonstration of the problem in a GeoServer installation or are offering to assist in the upgrade process with developer time or money.
If you wish to report a security vulnerability, see instructions on responsible reporting. We also welcome your direct financial support.
Spring4Shell (CVE-2022-22965)A recently discovered vulnerability in the Spring (CVE-2022-22965) has been reported as affecting systems running Java 9+.
Note systems using Java 8 are not thought to be vulnerable at this time.
AssessmentBoth GeoServer and GeoWebCache use Spring MVC, for REST API controllers in both projects, and for the OGC API, GSR and taskmanager community modules, in GeoServer. The projects are commonly deployed as WAR files in Tomcat, with a fair amount of deploys using Java 11 and above.
This sets up both projects for exploit on the SpringShell vulnerability.
We looked , and could not find an actual attack vector yet, but have scheduled a release that contains a spring-framework update that patches the potential issue.
MitigationFor those that cannot upgrade, the recommended mitigations are:
- Run GeoServer and GeoWebCache on Java 8 instead, which is not vulnerable to the issue.
- Upgrade Tomcat to the releases that patched the attack vector, either 9.0.62 or 8.5.78 (don’t try to use Tomcat 10.x, GeoServer cannot run on it due to incompatible J2EE libraries).
- For extra security, limit access to the REST API, and remove community modules providing new service endpoints (OGC API, GSR, taskmanager).
We are working on upgrading to a patched version of the spring framework library and will post an update when that work is complete.
Issue:
- GEOS-10445 Upgrade springframework from 5.1.20.RELEASE to 5.2.20.RELEASE
Patched releases:
- We have now updated the the spring framework library used, please upgrade to GeoServer 2.20.4 stable release, or GeoServer 2.19.6 maintenance release.
Thanks to everyone who reported this issue, Andrea Aime (GeoSolutions) for initial assessment, and to Gabriel Roldan (camptocamp) for troubleshooting and performing this spring-framework update.
-
11:00
CARTO Blog: What You Should Know About Spatial SQL
sur Planet OSGeoTraditionally, spatial analysis has been behind the rest of the analytics world when it comes to features and capabilities. However, this is no longer the case due to the r... -
2:00
geOps: Next.js Routing mit Nginx
sur Planet OSGeoAutomatisch eine Nginx Routing-Konfiguration für statische Next.js Projekte generieren. -
10:39
Ecodiv.earth: MODIS fire data in GRASS GIS
sur Planet OSGeo- 1 Preparations
- 2 Import the data
- 3 Reclassify the layers
- 4 Fire frequencies
- 5 Printing the map
- References
In this post, I’ll show how to calculate the yearly fire frequency based on the Moderate Resolution Imaging Spectroradiometer (MODIS) MYD14A2 and MOD14A2 products.1–3 As input, the 8-day composite products, available from 2002 to February 2022, will be used.
Calculating the fire frequencies is easy enough. The tricky bit, as is often the case, is to get all the data in order. You’ll first have to import 900+ MYD14A2 and MOD14A2 images into a GRASS GIS database,4 and then register them in a time-space data-set.5,6 Mind you, you could do without the last step. However, it makes life a lot easier, especially if at a later stage you want to do more temporal analyses.
Importing and registring all these data layers by hand is a bit much. Luckily, with just a bit of Python code, this can be automated. I used the code in this post to create a fire frequency map for the TAL, a region covering the lowlands of Nepal and an area in the north of India. But you can use any region you wish. Just be aware that it may take a bit of time to download the data.
1 Preparations 1.1 Get the dataYou can get the data from the A??EEARS portal from the NASA.7 The site offers a simple and efficient way to access geospatial data from a variety of federal data archives, including MODIS satellite data. The first step is to select your area of interest and date range through a simple menu.
You can opt to download the layers in the native projection (MODIS Sinusoidal projection) or in several other projections. In addition, you have the option to the layers in Geotifs or NetCDF-4 format. In the example below, I assume you have downloaded the data as Geotifs. I’ll leave the choice of the projection to you.
After selecting your region of interest and the product, you can batch download the selected layers directly. See this help page for other download options. Note that for this tutorial, you only need the FireMask layers. If you want to import the QA layers as well, you’ll need to adapt the code in this post.
1.2 Create a location/mapsetTo work in GRASS GIS you first need to create a GRASS GIS database that includes a location with the same projection as the data layers you downloaded earlier. You can use the Location Wizard to create one. To open the wizard, use the
button. Alternatively, in the menu, go to
settings
?grass working environment
?create new location
.The wizard guides you through a series of dialogs to browse and select or define the appropriate projections. These steps are fairly self-explanatory. Just make sure that in the second step (
2 Import the data 2.1 Librariesselect the CRS
), you select the option toread the CRS from a georeferenced data file
. On the next screen, you can select one of the Geotifs you just downloaded. Make sure to selectNo
when asked if you want to import the file.GRASS GIS has advanced temporal data processing functions. To use them, you need to register the layers in a grass gis space-time raster dataset (strds). If you are not familiar with the temporal data processing framework, I suggest you first read this overview.
To run a Python script, open GRASS GIS’s own Python editor, or start up your favorite editor from the GRASS GIS command line. Now, the first step is to import the required libraries. Next, define the working directory with the downloaded Geotif files.
# Import libraries import os import glob import datetime from grass.pygrass.modules import Module from dateutil.relativedelta import relativedelta # Set data directory os.chdir("/home/Data/MODIS")
The Firemask layers have 9 categories, including a number of not processed, non-fire and fire categories. These categories are described in the metadata. The code below defines the labels of each of these categories. These will later be used to define the labels of the imported layers using the r.category function. Obviously, this step is only useful if you plan to keep the imported layers.
# Categories satellite data categories = """\ 0|Not processed (missing input data) 1|Not processed (obsolete; not used since Collection 1) 2|Not processed (other reason) 3|Non-fire water pixel 4|Cloud (land or water) 5|Non-fire land pixel 6|Unknown (land or water) 7|Fire (low confidence, land or water) 8|Fire (nominal confidence, land or water) 9|Fire (high confidence, land or water) """
Optionally, you can prepare the color definition rules. These will later be used to define the colors scheme of the imported layers. Again, this is only useful if you plan to keep the imported layers.
2.2 Import MOD14A datacolor_rules = """ \ 0 164:119:185 1 164:119:185 2 164:119:185 3 30:144:255 4 173:216:230 5 0:128:0 6 210:169:210 7 255:169:0 8 255:131:0 9 255:78:0 nv 255:255:255 default 255:255:255 """
To import the MOD14A data layers, you need to create a list with all the file names of the MOD14A layers. A convenient way to get such a list is by using the pathname pattern expansion offered by the glob function.
"""Get a list with the MOD14a files""" list_files = glob.glob(pathname = "./MOD*FireMask*", recursive=True) list_files.sort()
You may have noticed that the file names include the string
doy
followed by 7 digits. The number is an ordinal date (also called the Julian date). The first 4 digits represent the year, and the last 3 digits represent the day of the year. I am actually not sure whether the date represents the start, middle or end date of the 8-day period, so I am assuming here that it represents the end date.The first part of the for loop uses the strptime function in the Python datetime library to extract the end date (image_end) of the 8-day period represented by the image. It uses this to calculate the start date (image_start) and time period (period). You’ll need the latter as input in the r.timestamp function to set the timestamp of the raster layer.
The second part of the for loop imports the Geotif in GRASS GIS, defines the categories, writes the metadata, and defines the color table. In addition, the name of the layer is written to the list_of_layers list. This list is later used to define the layers that need to be registered in the space-time raster dataset (strds).
# Import layers in grass list_of_layers = [] for i, input_layer in enumerate(list_files): # time period image doy = (list_files[i] .replace("./MOD14A2.061_FireMask_doy", "") .replace("_aid0001.tif", "")) image_end = datetime.datetime.strptime(doy, '%Y%j') image_start = (image_end - relativedelta(days=7)).strftime("%-d %b %Y") image_end = ((image_end + relativedelta(hours=23, minutes=59))\ .strftime("%-d %b %Y")) period = f"{image_start}/{image_end} 23:59:59" # import layer_name = "{}_{}".format("MOD14A", doy) list_of_layers.append(layer_name) Module("r.in.gdal", flags=["r"], input=input_layer, output=layer_name, overwrite=True) Module("r.category", map=layer_name, separator="pipe", rules="-", stdin_=categories) layer_title=("Confidence of fire {}:{}" .format(str(image_start), str(image_end))) Module("r.support", map=layer_name, title = layer_title) Module("r.colors", map=layer_name, rules="-", stdin_=color_rules) Module("r.timestamp", map=layer_name, date=period)
After the layers are imported (this may take some time), you define the space-time raster dataset MOD14A.
# Create the timespace data-set Module("t.create", output="MOD14A", semantictype="sum", title='Confidence of fire 8-day interval', description='MOD14A2 8-day fire product', temporaltype="absolute")
Now you can register the layers in the strds using the t.register function. It uses the list with the layers you created in the loop above as input.
# Import layers in a time-space dataset Module("t.register", type = "raster", input=timespacedata, maps = list_of_layers)
Note that this function has the option to directly define the start and end time. So, you could have made this step part of the loop above. However, I have the (not properly tested) impression that doing this step separately is faster. But let me know in the comment section below if I am wrong.
2.3 Import MYD14A dataRepeat the steps above to import the MYD14A layers and register them in a strds.
3 Reclassify the layers# Get a list with the MOD14a files list_files = glob.glob(pathname = "./MYD*FireMask*", recursive=True) list_files.sort() # Import layers in grass list_of_layers = [] for i, input_layer in enumerate(list_files): # dates doy = (list_files[i] .replace("./MYD14A2.061_FireMask_doy", "") .replace("_aid0001.tif", "")) image_end = datetime.datetime.strptime(doy, '%Y%j') image_start = (image_end - relativedelta(days=7)).strftime("%-d %b %Y") image_end = ((image_end + relativedelta(hours=23, minutes=59))\ .strftime("%-d %b %Y")) period = f"{image_start}/{image_end} 23:59:59" # import layer_name = "{}_{}".format("MOD14A", doy) list_of_layers.append(layer_name) Module("r.in.gdal", flags=["r"], input=input_layer, output=layer_name, overwrite=True) Module("r.category", map=layer_name, separator="pipe", rules="-", stdin_=categories) layer_title=("Confidence of fire {}:{}" .format(str(image_start), str(image_end))) Module("r.support", map=layer_name, title = layer_title) Module("r.colors", map=layer_name, rules="-", stdin_=color_rules) Module("r.timestamp", map=layer_name, date=period) # Create the timespace data-set Module("t.create", output="MYD14A", semantictype="sum", title='8-day fire occurrences', description='Confidence of fire 8-day interval', temporaltype="absolute") # Register the layers in the time-space data set Module("t.register", type = "raster", input=timespacedata, maps = list_of_layers, start = image_start, end = image_end)
Now that you have all the data layers, you need to reclassify them to -99 (no data), 0 (no fire) and 1 (fire). In the code below, the low, nominal, and high confidence fires are all three reclassified as fire. If you want to go for a more conservative estimate, you can opt to reclassify category 7 or 7 and 8 as no fire.
# Categories satellite data reclassrules = """\ 0 thru 2 = -99 3 = 0 4 = -99 5 = 0 6 = -99 7 thru 9 = 1 """
You’ll reclassify the layers MOD14A and MYD14A according to the rules defined above. But first, define the region to match that of the imported layers.
3.1 Reclassify MOD14A layers# Set region Module("g.region", raster=list_of_layers[0])
Get a list of the MOD14A layers using g.list. As an alternative, you can also use the t.rast.list to get the list of raster layers in the strds.
# Create a list with the MOD14A layers lays = Module("g.list", type="raster", pattern="MOD14A_*", stdout_=PIPE).outputs.stdout.split("\n") lays = [_s for _s in lays if _s]
Now, you can reclassify the raster layers according to the rules you defined earlier. In the example, the reclassified layers get the name of the original layers with the suffix _recl. Note that in the last two lines, the timestamp of the original layers is copied to the reclassified layer.
# Reclassify the layers for _,layname in enumerate(lays): Module("r.reclass", input=layname, output="{}_recl".format(layname), rules="-", stdin_=reclassrules) timst = Module("r.timestamp", map=layname, stdout_=PIPE).outputs.stdout Module("r.timestamp", map="{}_recl".format(layname), date=timst)
Create a new strds MOD14A_reclass79 and register the layers.
3.2 Reclassify MYD14A layers# Create spacetime for MOD14A reclass Module("t.create", output="MOD14A_reclass79", semantictype="sum", title='fire/no fire 8-day interval', description='fire (cats 7-9) or no fire', temporaltype="absolute") # Add reclass layers to new strds Module("t.register", type = "raster", input="MOD14A_reclass79", maps = newlays)
Now, repeat the steps above to reclassify the MYD14A layers
4 Fire frequencies 4.1 Select layers# Get list of MYD14A layers lays = Module("g.list", type="raster", pattern="MYD14A_*", stdout_=PIPE).outputs.stdout.split("\n") lays = [_s for _s in lays if _s] # Reclassify the layers and copy timestamp for _,layname in enumerate(lays): Module("r.reclass", input=layname, output="{}_recl".format(layname), rules="-", stdin_=reclassrules) timst = Module("r.timestamp", map=layname, stdout_=PIPE).outputs.stdout Module("r.timestamp", map="{}_recl".format(layname), date=timst) # Create spacetime for MYD14A reclass Module("t.create", output="MYD14A_reclass79", semantictype="sum", title='fire/no fire 8-day interval', description='fire (cats 7-9) or no fire (MYD14A)', temporaltype="absolute") # Add reclass layers to new strds Module("t.register", type = "raster", input="MYD14A_reclass79", maps = newlays)
You can visualize the temporal coverage of both data sets using the timeline tool. The results will show you that the MOD14A data set covers a longer period than the MYD14A dataset. It starts at an earlier date, but coverage of this earlier period is incomplete.
To have a uniform approach for the entire period, select the subset of MOD14A data layers covering the same time period as the MYD14A dataset. This can be done using the t.rast.extract function. The result is a new strds with the extracted data layers.
4.2 Combine the layers# Start time MYD14A strt = Module("t.info", flags="g", input="MYD14A", stdout_=PIPE).outputs strt = strt.stdout.split("\n")[8].split("=")[1] # Extract all layers after the MYD14A start date Module("t.rast.extract", input="MOD14A_reclass79", where="start_time >= {}".format(strt), output="terra", basename="terra")
Now combine for each 8-day period the mod14a and myd14a layers by computing for each grid cell the maximum value of the corresponding cells in the input grid layers. This means that in the output layers, a fire occurrence will be recorded if the category value of at least one of the two corresponding input layers is 7 or higher.
Module("t.rast.mapcalc", inputs=["MYD14A_reclass79", "terra"], output="MODIS14A", basename="modis14a", method="equal", expression="max({}, 'terra')".format("MYD14A_reclass79"), nprocs=4)
If you want to be more cautious, and only accept a fire occurrence if recorded by both the MOD14A and MYD14A layers, you can use the minimum instead of the maximum value of the two layers.
Next, convert all raster cells with a value of -99 to NULL (no data). This can be done for all layers in once using the t.rast.null function.
Module("t.rast.null", input="MODIS14A", setnull=-99, nprocs=4)
This step ensures that no-data values are ignored when computing the average fire frequency numbers. This may result in a biased estimate if fires are more (or less) likely to occur in periods with an high likelihood of cloud coverage. To identify areas where this may be an issue, you can calculate the number of 8-day periods with fire/no-fire observations as well.
4.3 Compute fire frequenciesYou use the t.rast.series function to compute the average number of fires per 8-day period. In the code below, the number of layers with a value is counted as well. You can use this layer to check the number of 8-day periods without value (nodata).
# Compute series stats Module("t.rast.series", input="MODIS14A", output='fire_count,fire_average', method=['count', 'average'])
The last step is to compute the estimated average number of fire occurrences per year. Note that the underlying assumption is that there will never be more than one fire per 8-day period. Or in other words, within a grid cell, multiple fires within an 8-day period will always be registered as one fire occurrence.
# Compute estimates average fires per 10 years Module("r.mapcalc", expression="Fire_YearlyAverage = fire_average * (365/8)")
As a very last, optional, step, you can remove all the intermediate layers and strds.
5 Printing the map# Clean up Module("t.remove", flags=['r', 'f'], inputs="terra") Module("t.remove", flags=['r', 'f', 'd'], inputs="MODIS14A") Module("t.remove", flags=['r', 'f', 'd'], inputs="MOD14A_reclass79") Module("t.remove", flags=['r', 'f', 'd'], inputs="MYD14A_reclass79")
To print out the map presented at the top of this post, I used the code below. And yes, a lot of code to create a map. But in case you are going to create many maps of the same area, a bit of coding will save you time in the longer run.
# Input raster inputraster="Fire_YearlyAverage@ModisFire" # Output settings outputfile = "TAL_fireyearly.png" width_image = 3600 title = "Average fire occurrences per year" # Get width/height ratio of image Module("g.region", raster=inputraster) region_settings = gs.parse_command("g.region", flags="g") height = float(region_settings['n']) - float(region_settings['s']) width = float(region_settings['e']) - float(region_settings['w']) height_image = width_image / (width/height) # Set environmental variables os.environ['GRASS_RENDER_IMMEDIATE'] = "cairo" os.environ['GRASS_RENDER_FILE'] = outputfile os.environ['GRASS_RENDER_HEIGHT'] = str(height_image) os.environ['GRASS_RENDER_WIDTH'] = str(width_image) os.environ['GRASS_RENDER_FILE_READ'] = "TRUE" os.environ['GRASS_FONT'] = "DejaVuSansCondensed" # Render image Module("d.rast", map=inputraster, values=value_range) Module("d.grid", size=1, color="190:190:190", text_color="100?100", border_color="160:160:160", fontsize=32, width=1) Module("d.vect", map="ne_10m_admin_0", type="area", color="0:0:0", fill_color="none", width=8) Module("d.vect", map="ne_10m_admin_0, type="area", color="255:255:255", fill_color="none", width=4) Module("d.legend", flags=['t', 's', 'b'], raster=inputraster, bgcolor="255:255:255", title=title, title_fontsize=42, fontsize=42, digits=digits, font="arial", at=[90,92,70,90], range=legend_range, border_color="none")
References 1. Giglio L, Justice C. MODIS/Aqua Thermal Anomalies/Fire Daily L3 Global 1km SIN Grid V061 [Data set]. Published online 2021. Accessed February 10, 2022. [https:]] 2. Giglio L, Justice C. MODIS/Terra Thermal Anomalies/Fire Daily L3 Global 1km SIN Grid V061 [Data set]. Published online 2021. Accessed February 10, 2022. [https:]] 3. Justice CO, Giglio L, Korontzi S, et al. The MODIS fire products. Remote Sensing of Environment. 2002;83(1):244-262. doi:10.1016/S0034-4257(02)00076-7 4. GRASS Development Team. Geographic Resources Analysis Support System (GRASS GIS) Software, Version 8.01. Open Source Geospatial Foundation; 2022. [grass.osgeo.org] 5. Gebbert S, Leppelt T, Pebesma E. A Topology Based Spatio-Temporal Map Algebra for Big Data Analysis. Data. 2019;4(2):86. doi:10.3390/data4020086 6. Gebbert S, Pebesma E. The GRASS GIS temporal framework. International Journal of Geographical Information Science. 2017;31(7):1273-1292. doi:10.1080/13658816.2017.1306862 7. AppEEARS Team. Application for Extracting and Exploring Analysis Ready Samples (AppEEARS). Ver. 3.0.1. NASA EOSDIS Land Processes Distributed Active Archive Center (LP DAAC), USGS/Earth Resources Observation and Science (EROS) Center; 2022. Accessed March 27, 2022. [https:]] -
1:00
GRASS GIS: New Video Tutorials for GRASS GIS 8
sur Planet OSGeoNew video tutorials now available for GRASS GIS version 8 Announcing a new series of publicly available YouTube video tutorials for GRASS 8. These tutorials, originally created for a GIS course at San Diego State University titled “ANTH 562 Computational Archaeology”, are aimed to help novice to advanced GIS practioners learn how to use GRASS GIS. The subject matter is nominally archaeological GIS, but all the basics of GRASS are covered, as well as some advanced topics, such as Least Cost Analysis, Visibility Analysis, Hydrological Modeling, Terrain Analysis, and more. -
11:01
OTB Team: OTB release 8.0.0
sur Planet OSGeoDear all, We are pleased to announce that OTB version 8.0.0 is out ! Ready-to-use binary packages are available on the package page of the website: OTB-8.0.0-Darwin64.run (Mac OS) OTB-8.0.0-Linux64.run (Linux) OTB-8.0.0-Win64.zip (Windows 64 bits) You can also checkout the release branch with git: The documentation for OTB 8.0.0 can be found here. This major […] -
10:00
CARTO Blog: Introducing GeoParquet: Towards geospatial compatibility between Data Clouds
sur Planet OSGeoToday we are happy to introduce the first community proposal for GeoParquet. Our goal is to standardize the storage of geospatial vector data in Parquet, a very popular col... -
1:22
Sean Gillies: Spring break
sur Planet OSGeoThe week before last was Poudre School District's spring break. My family and I took a road trip over the Rocky Mountains to spend 3 days in the desert canyons of Southwestern Colorado and Southeastern Utah.
Our first destination was Goblin Valley State Park on the southeast corner of the San Rafael Swell. We arrived with plenty of time to set up our tents and play hide-and-seek among the sandstone hoodoos. If you've ever watched the movie "Galaxy Quest", you've seen Goblin Valley. It is a remarkable spot and well worth a visit. The campground has a few upgrades since my last visit about 25 years ago. There are showers, a disc golf course, and every campsite has a shade structure.
Goblin Valley, 2022-03-15
Solo goblin
The Goblin Valley S.P. campground was our base for exploring canyons of the nearby San Rafael Reef. I wanted to take my family to Little Wild Horse Canyon and go up the narrows if the weather allowed. I've hiked through it twice, in 1988 and in 2004. Nobody else in my family had been in the canyon before but were intrigued by the hype.
Our first morning was a bit cold and drizzly, but by ten the weather was improving and we loaded into our minivan to drive to the Little Wild Horse Canyon trailhead a few miles southwest of the campground. We arrived in dry and mild weather and determined that we would make a go of the Little Wild Horse and Bell Canyons loop, with the option of turning back early if conditions weren't great.
Heading up Little Wild Horse Canyon, 2022-03-16
Little Wild Horse Canyon's existence is almost impossible. Because it is just steep enough and sees enough water flow, stretches of it are entirely scoured of sand and soil, bare sculpted sandstone is the only surface. But no part of it requires ropes or other technical gear or swimming. It's unique in this way. There are more less steep and less thrilling canyons and a few more thrilling and more technical canyons on the edge of the San Rafael Swell. See this Zero Gravity canyon video for example. But there are no other canyons with such easy access to miles of narrow, twisting sandstone slots.
Though Little Wild Horse Canyon is dry most of the time, flash flooding is a real hazard. I've seen videos on YouTube showing people hiking through knee-deep running water. And there was a tragic, fatal accident as recently as May, 2020.
Crossing a puddle deep in the narrows
After a few miles, Little Wild Horse Canyon ends, and the trail climbs out of Little Wild Horse Creek and over to the next drainage, Bell Creek. This creek also carves its way through the San Rafael Reef's Navaho sandstone formation. The narrows are shorter than Little Wild Horse's, but are still a lot of fun.
Hiking out Bell Canyon
We got out of the canyons about 30 minutes before serious rain started on the Swell. A strong storm cell passed north of our campground after we returned and started cooking dinner. Intense lightning lit up this storm and there was obviously some heavy precipitation along with it. I don't know whether these storms caused any flooding in the canyons we hiked.
Late afternoon thunderstorm
The next morning we broke camp, did some more hiking and running in the area, and drove to spend a night in Fruita, Colorado, at the base of Colorado National Monument. Fruita is a town we've driven by many times. This was our first stay. I like the place a lot. After some beer, pizza, Netflix (Shang-Chi and the Legend of the Ten Rings), and sleep, we packed up and left Fruita to drive the road around the rim of the Monument's canyons.
Monument Rock, Colorado National Mounument, 2022-03-17
Ruth did the driving because she has nerves of steel and I get vertigo. Going counter-clockwise, as we did, puts you on the inside of the road. If you go the other direction, it's 25 miles of winding road with nothing but hundreds of feet of air just inches from your right wheels. Exciting! The views are amazing.
The Coke Ovens
We'll be coming back to Colorado National Monument. There are a lot of canyons and arches to see and trails to be run.
-
3:59
Sean Gillies: Late winter at Horsetooth
sur Planet OSGeoOn the second day of spring I'm reflecting on winter running. I ran just for fun, no serious workouts, and one long run in the hills each week at most.
The Spring Creek, Mill Creek, Towers Trail intersection, 2022-02-26
The second half of winter was rather snowy, but also had some breaks of sunny and mild weather. Running on freshly packed snow under a blue sky is a lot of fun. The traction is good and the crunching sound is pleasing and there are lots of interesting animal tracks.
Mountain lion tracks, 2022-02-26
On this particular day I saw mountain lion tracks all over the Towers summit. Several adult cats or one very busy individual using the hiking trail and circling off to follow deer tracks or do other feline business. If I'd been up there a few hours earlier I might have awkwardly bumped into them. Being bigger and more stinky than the average runner, I'm relatively safe, but still, the hair on the back of my neck was standing up as I trotted to the top and immediately turned around and went back down, not too quickly, not too slowly.
-
10:00
CARTO Blog: Analyzing NYC Caffeine Deprivation through Location Intelligence
sur Planet OSGeoHow does the city that never sleeps keep moving so fast? Coffee, of course! In this article, we investigate the spatial patterns of coffee shops across New York City and sh... -
12:51
Andrea Antonello: SMASH 1.7.3 is out
sur Planet OSGeoWe just released SMASH 1.7.3 to the stores.
New features:
Enhanced editing workflowEditing was a bit messy with the fact that upon new geometry creating a complete geometry was placed in the selected point. This has now been made properly. First touch point, second line, third polygon. Also, now a simple tap adds a geometry, a long tap puts in edit mode.
Area and perimeterThe attribute table now always also shows at the bottom the area (polygons) and length (polygon perimeter and lines length).
TranslationsNew language updates have been added for: Italian, French, Japanese, Norwegian, Russian
To help out with translations please head over here: [https:]
This version of SMASH is aligned with the version 3.5 of the survey server.
Other stuff- single tap now centers on map position
- images of forms now have their own position, not the note's
- fix for empty exported image folder
- fix for misbehaving measure tool
- fix for geopackage export (was connecting logs)
Need an apk because you do not use the store?You can download it here: [https:]
As a reminder, the user manual is here: [https:]
Enjoy!
-
7:00
Lutra consulting: Point cloud and QGIS 3D improvements - progress report 1
sur Planet OSGeoAfter the successful crowdfunding campaign in collaboration with North Road and Hobu late last year, we immediately started the work on the items from the proposal. Below you can read our progress to date and some of the exciting features which are already available in QGIS master.
A big thanks!This work was made possible with generous donations and support by the individuals and organisations below (not in a particular order):
Stuart Smith, BayesMap Solutions, Tibor Lieskovský, Balanced Risk Strategies, Yoichi Kayama, Basel Land Registry and Surveying Office (GVA), Rudaz + Partner, Jakub Fuska, Richard Barnes, Spatial Thoughts, Hans van der Kwast, António Pestana, Richard Lorion, Eagle Resources, Suresh Muthukrishnan, 12P Consulting, Alta, JCIS Consultants, Brenna Hughes, Amt für Geoinformation Basel-Landschaft, Darren Farmer, F.A.R.M. Facilitazioni Agroecologiche Regionali Mobili, Ali Nayeri, Land Vorarlberg, Landesamt für Vermessung und Geoinformation, QGIS User Group Switzerland, Robert Thunen, Twomile Heavy Industries, Inc., Roberto Moyano, Jens Grehl, P?teris Daknis, Rob Willson (Ecophylla Consulting), Daniel Löwenborg, Ville de Vevey, Alfredo Toledo (Suriyaco), QTIBIA Engineering, Ian Burrows (FAS), Pascal Obstetar, Lidar Guys, Mapping Automation, LLC, Featherstone Survey and Civil, Peter Schmitz, Fernando Michel Tuesta Chichipe, Hugo Sørensen, Bernie Connors, Watershed Research and Training Center, MBS Environmental, Andreas Neumann, Adrian Matter, Mapfly, Enso, João Gaspar, Eric van Dijk, City of Uster, Switzerland, QGIS Usergroup Denmark, STAEREA, Ostschweizerische Gesellschaft für Höhlenforschung, Department of Environment, Land, Water and Planning (Victoria), IGN FI, Travis Flohr, Amt für Wald beider Basel, Matthew Bodnar, Surface libre, OSGeo:UK, National Land Survey of Finland,Natural Resources Canada, Fonds Brukhalter, Arbeitsgemeinschaft Höllochforachung AGH, gis experts, BNHR, Rogue Geoscience Ltd. and Ian Huitson.
In addition to the list above, we thank several anonymous donors who chose not to be listed.
If you have made a donation towards this work and your name or your organisation name does not appear here, please contact us (info@lutraconsulting.co.uk).
3D view managerPreviously, if you closed a project with a 3D map view, the 3D map view and all its settings were lost when you reopen that project. So in QGIS 3.24 we’ve added a “3D map view manager” that takes care of listing, removing, renaming and duplicating 3D map views in your projects! We’ve also added a new “3D Map Views” menu, which contains all your created 3D map views for easy access.
To summarise, these are the advantages of this new feature:
- Saving 3D map views within QGIS project (similar to other settings) and being able to retrieve the 3D view after closing (either the view or the project)
- 3D map view manager: which allows you to duplicate, rename and delete 3D map views
Dock/undock 3D views3D map canvas panel was difficult to move, resize and often resulting in unwanted docking. With QGIS 3.24 we added the ability to switch 3D maps from a dockable widget to a top-level window (and back to a dock widget), so that these map views can now be managed, resized and moved just like a standard application window. In addition, you can now use 3D map view in full screen mode.
Respect Z ordering of point clouds in 2DWe’ve added an option to render point clouds according to their Z-order in 2D map views. With the new bottom-to-top ordering option enabled, points with larger Z values will cover lower points – resulting in the appearance of a true orthographic photo. There’s also an option for reverse sorting (top-to-bottom), where the scene appears as if viewed from below. This feature is available in QGIS 3.24
The image below displays the default Z ordering of a LAS file when loaded in QGIS:
The same layer with the ordering of Z switched to bottom-to-top:
Visualisation of point cloud as solid surfacesWith this feature you can render point cloud layer in the 3D view as solid surfaces generated by triangulation. The triangulation is available for all the 3D point cloud renderers: unique color, ramp color, classification and RGB. This feature will be available in QGIS 3.26 and you can try it in the current QGIS nightly/master.
-
14:44
Fernando Quadro: Usando Geofence para adicionar segurança em nível de camada no Geoserver
sur Planet OSGeoO sistema de segurança do Geoserver é muito bom por si só. Ele permite criar vários Papéis, Grupos, Usuários e fazer combinações entre eles, protegendo nossos dados. Caso você não conheça o sistema de segurança do GeoServer temos uma série com 1, 2, 3, 4 posts aqui no blog.
Como mencionado no título, iremos utilizar neste post o GeoFence, e para um melhor entendimento irei descrever um problema para demonstrar o funcionamento do plugin.
1. Descrição do Problema
Imagine um cenário, onde você tem uma camada que contém informações para todas as regiões do mundo e diversos atributos. Por exemplo, a camadas de Lugares (Places) que pode ser encontrada em [https:]]
Baixe o shape no link acima e configure como uma camada do workspace cite no seu GeoServer.
Neste cenário nós queremos restringir o acesso de acordo com a planilha abaixo:
Se você perceber estamos entrando no nível de camada, e querendo realizar restrições nas informações (ex: ter acesso apenas aos lugares localizados no Brasil e apenas a alguns atributos específicos por role e/ou usuário).
Para conseguir isso, usaremos o GeoFence, que nos permite subir ao nível da camada e definir a permissão conforme nossa necessidade. A ferramenta de GeoFence pode ser usada via interface do usuário ou como uma API REST.
2. Trabalhando com GeoFence
2.1 Instalação
Se você estiver usando GeoServer a partir da versão 2.18, lembre-se de instalar apenas o plugin GeoFence Server, e não instalar o plugin GeoFence Client. Para este teste, eu estou usando a versão 2.18.4, desta forma a página para download é http://geoserver.org/release/2.18.4/
Uma vez realizado o download, coloque todos os jars em /geoserver/webapps/geoserver/WEB-INF/lib/ e reinicie o geoserver. Uma vez feito, você verá novas opções adicionadas na guia de segurança:
2.2 Configuração
Finalizada a instalação, você deve ir na guia GeoFence e clicar no botão de conexão de teste e ver a mensagem de conexão bem-sucedida. Se você não vir isso, significa que você não instalou o plugin corretamente, ou seja, reveja os passos anteriores.
2.3 Definindo papéis e usuários
Precisamos definir os usuários e papéis (roles) de acordo com a declaração do problema, na guia Configurações -> Usuários, Grupos, Funções. Veja como:
2.3.1. Criar os papéis (roles) brasil_gov, brasil_public e latam
2.3.2. Criar os usuários class_1, class_2 e normal vinculados ao papel brasil_public
2.3.3. Criar o usuário gov vinculado ao papel brasil_gov
2.3.4. Criar o latam_user vinculado ao papel latamA configuração deverá ficar assim:
2.4 Definindo regras de dados do GeoFence
Para definir as regras de dados do GeoFence de acordo com a declaração do nosso problema vamos em Secutiry -> Geofencing Data Rules, e em seguinte clique em adicionar nova regra:
Vamos agora entender os parâmetros para realizar as configurações:
Priority — Mantenha essa prioridade
Role — Selecione o nome da role
Username — Se você deseja criar uma regra específica para um determinado usuário, selecione o nome, caso contrário, mantenha o valor selecionado como *
Service – Se você deseja criar uma regra específica para o serviço (WMS, WFS, etc.), selecione o nome do serviço, caso contrário, mantenha o valor selecionado como *
Request — Se você selecionar qualquer serviço específico, as solicitações vinculadas a ele estarão disponíveis para seleção
Workspace — Selecione a área de trabalho em qual sua camada pertence, mantendo * aplicará uma regra a todas as áreas de trabalho
Layer — Se você deseja aplicar a regra a uma camada específica na workspace selecionada, selecione o nome, mantendo * aplicará a regra a todas as camadas da workspace
IP Address range — O endereço IP permitido que pode usar o geoserver pode ser escrito aqui, mantendo ele em branco tornará o geoservidor disponível globalmente
Access — Aqui definimos se queremos permitir que o usuário/função selecionado acesse o espaço de trabalho/camada selecionado. as opções disponíveis são ALLOW (PERMITIR), DENY (NEGAR), LIMIT (LIMITAR).
Layer details — Se você selecionar um nome de camada específico, essa opção estará disponível. Aqui será definida a regra de acordo com a especificação da camada. Marque
a caixa de seleção “Specify Layer Details” para ver mais opções.
Allowed Styles — Aqui você pode definir o estilo permitido visível para o usuário, se deixado em branco, todos os estilos estarão disponíveis
CQL Read Filter — Aqui você pode definir o filtro CQL que será aplicado à camada, limitando assim os recursos baseados a este filtro
CQL Write Filter — Aqui você pode definir o filtro que será aplicado na solicitação de gravação (por exemplo, WFSTransaction)
Allowed area (WKT) — Usando isso, você pode restringir a visibilidade dos recursos específicos apenas para determinadas áreas. Como indica o rótulo do campo, o formato aceito é o WKT, como no exemplo abaixo:
POLYGON ((-127.96875 -57.51582286553883, -32.34375 -57.51582286553883, -32.34375 31.952162238024975, -127.96875 31.952162238024975, -127.96875 -57.51582286553883))
Layer Attributes — Selecione os atributos da camada que você deseja permitir que os usuários usem. Certifique-se de que o atributo de geometria esteja sempre ATIVADO para que você possa ver a camada. As opções disponíveis para seleção são:
None — para ocultar o atributo
Readonly — Apenas para ler os dados, mas a transação não será permitida
Readwrite — O usuário pode ler e gravar este atributoPS: Lembre sempre de permitir o acesso ao campo geometria
Assim, todas as regras serão definidas. Veja:
Para criar as regras acima, na guia “Layer Details” foram usados os campos de CQL para todas as regras que continham as roles brasil_gov e brasil_public. Para a regra latam, não foi utilizado o campo CQL e sim o campo WKT, passando um polígono com as dimensões da América Latina.
3. Testes
Quando fizermos login como gov, veremos os seguintes dados:
Quando fizermos login como class_1, veremos os seguintes dados:
Quando fizermos login como class_2, veremos os seguintes dados:
Quando fizermos login normal, veremos os seguintes dados:
Quando fizermos login como latam_user, veremos os seguintes dados:
Este material foi baseado no post “Using Geofence to add layer level security in Geoserver” escrito originalmente por Krishna G. Lodha
Fonte: Blog Krishna G. Lodha
-
12:53
GIScussions: On the side of the angels?
sur Planet OSGeoThanks to Rotislav Artov – [https:]
This is going to be a brain dump, I don’t know if it will make any sense!
I have been an evangelist for open source software for a decade or longer and I sincerely believe that the open source model offers a strong alternative to proprietary software, particularly for public sector and even more so in recent years as we have seen an accelerated move to the cloud. This is not going to be another piece on why open source is better than proprietary or what are the weaknesses of one model or the other. I just needed to get that out of the way.
I am writing this as we enter the third week of Russia’s invasion of Ukraine. Several high profile companies have closed their operations in Russia either as a temporary response to the invasion or in the case of the UK oil companies announced their intention to divest of their Russian investments. Big Tech is stepping back from Russia as fast as it can and smaller companies are following suit. This may be a genuine case of “doing the right thing” or it may be bowing to the inevitable, regardless of what we think of their motives we surely prefer this response to sitting on their hands and pretending some faux neutrality as we have seen on occasions in the recent past. We might laugh at Google’s “Do no evil” and point to the numerous failures on that count but it is a laudable aspiration.
I have presented on the tense community dynamics within our geo-space in my talk “Open Communities – we love to hate” and I questioned the belief within the open source community that we are on the side of the angels and that proprietary software is not.
In our little geospace Big Tech = Esri, so inevitably they are a big target for criticism but I wonder if some on “my side” are indulging in some virtue signalling in their critique of Esri’s recent statement re the supply of their products to Russia and Belarus
Esri have also claimed that they have not supplied the Russian military
https://twitter.com/Esri/status/1500560845922779138/photo/1
Quite a few people have suggested that the statements are not strong enough or are carefully worded to give a positive impression without saying much. Maybe, but I am not sure what Esri could say or do that would make people happy, if you have provided software and services to the Russian government in the past then it probably isn’t possibly to just pull the plug on those systems.
Meanwhile, there is nothing on the QGIS or GeoServer sites to prevent their software being downloaded by Russian organisations. On a broader level, I would hazard a guess that most of the cyber warriors working for the Russian side hacking and misinforming are using open source platforms rather than Windows 11!
Do we want software businesses deciding who may use their software? Or is it the responsibility of governments to decide who companies can sell to? Most countries have strict controls on the sale of technology with military or security applications and clearly that should include GI. Esri is a multi billion dollar US tech corp, their largest customer is the US government, I would guess that their past sales to Russia had US government approval and their recent cessation of sales will also have followed US guidelines. But what about open source, can government or anyone control where and how open source software is deployed? At this moment I would say “unfortunately not” however in the long term government may have to play a role in determining how and where open source software, which is often partly funded by government, can be deployed.
You know what? If you believe that software providers should have some retrospective ability/obligation to switch off service to todays’s bad actors, then those pesky license servers with their “kill switches” start to look like an attractive proposition! And that is not an open source model.
Not sure any of this has made a lot of sense, final thought:
Regardless of the commercial model software engineers create products and services to solve problems and fulfil needs. We don’t always foresee all of the ways software will be used and we may have to wrestle with the problems that we have created, you could call that The Rutherford Conundrum. There will be a time to learn from recent events and maybe to make changes, now is a time to support the people in Ukraine in any way we can.
Thanks to Reinder Storm [https:]
-
1:00
EOX' blog: EOxMaps 'The Update'
sur Planet OSGeoThe update of our EOxMaps infrastructure has been long overdue. Finally, in 2021 we have completely reworked our former EOxMaps infrastructure, which allows us to generate, alter and update EOxMaps more frequently than before. Firstly, we focused on updating the somewhat outdated map label layers. D ... -
1:00
SourcePole: FOSSGIS 2022
sur Planet OSGeoSourcepole hat auch an der Online FOSSGIS 2022 diverse Themen mit Vorträgen abgedeckt:
- IoT Sensordaten in Karten integrieren
- QGIS Web Client 2 (QWC2) - Neues aus dem Projekt
- Cloud-optimierte Geoformate
- 3D Tiles Next
-
14:44
GeoSolutions: GeoSolutions is attending GEOINT 2022!
sur Planet OSGeoYou must be logged into the site to view this content.
-
10:00
CARTO Blog: International Women’s Day: Mapping Financial Inequality by Gender
sur Planet OSGeo“Imagine a gender equal world.” -
1:00
GeoServer Team: GeoServer 2.20.3 Released
sur Planet OSGeoGeoServer 2.20.3 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a stable release of the 2.20.x series recommended for production systems. This release was made in conjunction with GeoTools 26.3.
Thanks to everyone who contributed, and to Jody Garnett (GeoCat) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended upgrade for production systems.
This release includes two improvements limiting Server-side request forgery (SSRF) opportunities:
-
GEOS-10389 Introduce
ENTITY_RESOLUTION_ALLOWLIST
parameter to further restrict external entity resolution.See the user guide on external entities resolution for instructions on use. Keep in mind that the application schema plugin requires external entity resolution to local files be available. The global setting required by application schema has been renamed to Unrestricted XML External Entity Resolution.
-
GEOS-10384 Change GetMap to URIKvpParser.
This improvement is used in conjunction with WMS dynamic styling setting disabling of SLD and SLD_BODY parameters. By handling SLD and SLD_BODY as URI values we can avoid a well-known java side-effect when comparing URL values.
We would like to thank GeoCat for addressing these two issues on behalf of Fisheries and Oceans Canada. If you wish to report a security vulnerability, please visit our website for instructions on responsible reporting.
Improvements and FixesImprovements:
- GEOS-10367 Allow GetTimeSeries to have a maximum times limit separate than WMS max dimensions
Fixes:
-
GEOS-10379 WCS 2.0 requested ScaleSize not being respected when crossing the dateline
-
GEOS-10377 Layers and Layer Groups get default abstract in capabilities document when none set in configuration.
-
GEOS-10373 GetTimeSeries does not work on source data with time ranges
-
GEOS-10362 Username remains in roles.xml after user removal operation
-
GEOS-10316 Regression in 2.20.x: Unable to specify JAVA_OPTS for startup.sh
-
GEOS-10066 CSS ArrayList class cast exception in layer rendering
-
GEOS-9785 Invalid argument type=null when trying to use gs:Download WPS identifier
-
GEOS-9770 Cascading WMS server sets invalid I and J when using EPSG:3006 on GetFeatureInfo calls
For more information see 2.20.3 release notes.
About GeoServer 2.20Additional information on GeoServer 2.20 series:
- Log4J2 zero day vulnerability assessment
- Internationalization of title and abstract
- State of GeoServer 2.20 edition
- Windows Installer
Release notes: ( 2.20.3 | 2.20.2 | 2.20.1 | 2.20.0 | 2.20-RC )
-
-
1:00
GeoServer Team: GeoServer 2.19.5 Released
sur Planet OSGeoThe GeoServer team are happy to announce GeoServer 2.19.5 release is available for download (zip and war) along with docs and extensions.
This GeoServer 2.19.5 release was produced in conjunction with GeoTools 25.5 and GeoWebCache 1.19.2, this is a maintenance release recommended for production systems.
Thanks to everyone who contributed, and to Ian Turton (Astun Technology) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended update for production systems.
This release includes two improvements limiting Server-side request forgery (SSRF) opportunities:
-
GEOS-10389 Introduce
ENTITY_RESOLUTION_ALLOWLIST
parameter to further restrict external entity resolution.See the user guide on external entities resolution for instructions on use. Keep in mind that the application schema plugin requires external entity resolution to local files be available. The global setting required by application schema has been renamed to Unrestricted XML External Entity Resolution.
-
GEOS-10384 Change GetMap to URIKvpParser.
This improvement is used in conjunction with WMS dynamic styling setting disabling of SLD and SLD_BODY parameters. By handling SLD and SLD_BODY as URI values we can avoid a well-known java side-effect when comparing URL values.
We would like to thank GeoCat for addressing these two issues on behalf of Fisheries and Oceans Canada. If you wish to report a security vulnerability, please visit our website for instructions on responsible reporting.
Improvements and FixesFixes:
- GEOS-9785 Invalid argument type=null when trying to use gs:Download WPS identifier
- GEOS-9770 Cascading WMS server sets invalid I and J when using EPSG:3006 on GetFeatureInfo calls
Additional information on GeoServer 2.19 series:
- Log4J2 zero day vulnerability assessment
- WMS GetFeatureInfo includes labels from ColorMap
- Promote WMTS multidim to extension
- Promote WPS-Download to extension
- Promote params-extractor to extension
- Promote GWC-S3 to extension
- Promote WPS-JDBC to extension status
- Promote MapML to extension status
- GeoServer repository transition to main branch
Release notes ( 2.19.5 | 2.19.4 | 2.19.3 | 2.19.2| 2.19.1 | 2.19.0 | 2.19-RC )
-
-
1:00
GeoServer Team: GeoServer 2.20.3 Released
sur Planet OSGeoGeoServer 2.20.3 release is now available with downloads (bin, war, windows), along with docs and extensions.
This is a stable release of the 2.20.x series recommended for production systems. This release was made in conjunction with GeoTools 26.3.
Thanks to everyone who contributed, and to Jody Garnett (GeoCat) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended upgrade for production systems.
This release includes two improvements limiting Server-side request forgery (SSRF) opportunities:
-
GEOS-10389 Introduce
ENTITY_RESOLUTION_ALLOWLIST
parameter to further restrict external entity resolution.See the user guide on external entities resolution for instructions on use. Keep in mind that the application schema plugin requires external entity resolution to local files be available. The global setting required by application schema has been renamed to Unrestricted XML External Entity Resolution.
-
GEOS-10384 Change GetMap to URIKvpParser.
This improvement is used in conjunction with WMS dynamic styling setting disabling of SLD and SLD_BODY parameters. By handling SLD and SLD_BODY as URI values we can avoid a well-known java side-effect when comparing URL values.
We would like to thank GeoCat for addressing these two issues on behalf of Fisheries and Oceans Canada. If you wish to report a security vulnerability, please visit our website for instructions on responsible reporting.
Improvements and FixesImprovements:
- GEOS-10367 Allow GetTimeSeries to have a maximum times limit separate than WMS max dimensions
Fixes:
-
GEOS-10379 WCS 2.0 requested ScaleSize not being respected when crossing the dateline
-
GEOS-10377 Layers and Layer Groups get default abstract in capabilities document when none set in configuration.
-
GEOS-10373 GetTimeSeries does not work on source data with time ranges
-
GEOS-10362 Username remains in roles.xml after user removal operation
-
GEOS-10316 Regression in 2.20.x: Unable to specify JAVA_OPTS for startup.sh
-
GEOS-10066 CSS ArrayList class cast exception in layer rendering
-
GEOS-9785 Invalid argument type=null when trying to use gs:Download WPS identifier
-
GEOS-9770 Cascading WMS server sets invalid I and J when using EPSG:3006 on GetFeatureInfo calls
For more information see 2.20.3 release notes.
About GeoServer 2.20Additional information on GeoServer 2.20 series:
- Log4J2 zero day vulnerability assessment
- Internationalization of title and abstract
- State of GeoServer 2.20 edition
- Windows Installer
Release notes: ( 2.20.3 | 2.20.2 | 2.20.1 | 2.20.0 | 2.20-RC )
-
-
1:00
GeoServer Team: GeoServer 2.19.5 Released
sur Planet OSGeoThe GeoServer team are happy to announce GeoServer 2.19.5 release is available for download (zip and war) along with docs and extensions.
This GeoServer 2.19.5 release was produced in conjunction with GeoTools 25.5 and GeoWebCache 1.19.2, this is a maintenance release recommended for production systems.
Thanks to everyone who contributed, and to Ian Turton (Astun Technology) for making this release.
Security ConsiderationsThis release includes several security enhancements and is a recommended update for production systems.
This release includes two improvements limiting Server-side request forgery (SSRF) opportunities:
-
GEOS-10389 Introduce
ENTITY_RESOLUTION_ALLOWLIST
parameter to further restrict external entity resolution.See the user guide on external entities resolution for instructions on use. Keep in mind that the application schema plugin requires external entity resolution to local files be available. The global setting required by application schema has been renamed to Unrestricted XML External Entity Resolution.
-
GEOS-10384 Change GetMap to URIKvpParser.
This improvement is used in conjunction with WMS dynamic styling setting disabling of SLD and SLD_BODY parameters. By handling SLD and SLD_BODY as URI values we can avoid a well-known java side-effect when comparing URL values.
We would like to thank GeoCat for addressing these two issues on behalf of Fisheries and Oceans Canada. If you wish to report a security vulnerability, please visit our website for instructions on responsible reporting.
Improvements and FixesFixes:
- GEOS-9785 Invalid argument type=null when trying to use gs:Download WPS identifier
- GEOS-9770 Cascading WMS server sets invalid I and J when using EPSG:3006 on GetFeatureInfo calls
Additional information on GeoServer 2.19 series:
- Log4J2 zero day vulnerability assessment
- WMS GetFeatureInfo includes labels from ColorMap
- Promote WMTS multidim to extension
- Promote WPS-Download to extension
- Promote params-extractor to extension
- Promote GWC-S3 to extension
- Promote WPS-JDBC to extension status
- Promote MapML to extension status
- GeoServer repository transition to main branch
Release notes ( 2.19.5 | 2.19.4 | 2.19.3 | 2.19.2| 2.19.1 | 2.19.0 | 2.19-RC )
-
-
16:09
Fernando Quadro: I Encontro de Usuários e Desenvolvedores do GeoNode Brasil
sur Planet OSGeoPrezados Leitores,
Entre os dias 17 e 18 de Março, das 9h às 12h, no Canal da Embrapa no Youtube acontecerá o I Encontro de Usuários e Desenvolvedores do GeoNode Brasil: Gerenciamento de Conteúdo Geoespacial Ambiental.
O evento contará com grandes nomes do Software Livre Geoespacial, confira a programação abaixo:
Link da transmissão no YouTube do dia 17/03 aqui.
Link da transmissão no YouTube do dia 18/03 aqui.
Se você ficou interessado, basta preencher o Formulário de Inscrição para participar do evento!
Fonte: GeoNode-BR
-
1:00
Geomatic Blog: Peace
sur Planet OSGeoIt’s not the way we’d like to start a new episode for this blog, but current events make this change so irrelevant that we may cover it some other time. It’s heartbreaking to see the evolution of the invasion of a sovereign country, the destruction of so many lives. Our thoughts are with the displaced, and all the innocent people that are watching their world to fall apart.
There’s not much to say, just stay safe and if you have any means, please give a hand to the extent of your capabilities.