Welcome to Planet OSGeo

May 26, 2016

Nathan Woodrow

Speeding up QGIS build times with Ninja

As a developer, feedback is important when you are working.  The quicker you have the feedback the quicker you can fix the issues.  This doesn’t just apply to feedback from users/clients but also from your tooling.

Finding a new tool that increases my productivity is one of the best feelings, and this is one of those cases.   I was told about using Ninja for building instead Make, Visual Studio, Jom (Qt Build Tool).

If you are not a developer and don’t know what those tools are, they are what we use to build and compile all the code in QGIS.  If this step is slow the feedback loop is slow and it becomes annoying.  Improving this feedback loop greatly increases your workflow and happiness, and by happiness I really do mean that.

Ninja is one of these tools that did this. It’s optimized to be fast.  It does very little work in order to be faster any time it can.  Ninja was built by a developer on the Google Chrome team in order to improve their build times (read the history here)

Building QGIS with Ninja is super easy:

Install Ninja from package manager or using the ninja.exe (the whole tool is a single exe) if you are on windows

cd qgis-src
mkdir ninja-build
cd ninja-build
ccmake -GNinja ..
ninja

Done

You can build just the targets you need using

ninja qgis
ninja pycore

etc

The ccmake setup generates the ninja.build file that ninja uses. Myself and Matthias Kuhn have already patched our QGIS cmake files to handle any odd things that got generated – only a handful of things which was nice

The best thing I find about Ninja is how smart it is on knowing if it needs to build something or not, and this is the point that I find other tools fail on. They spend ages wasting time looking for what to do. Ninja knows it in a instant.

When running Ninja with no code changes I get this (on Windows):

21:18:54: Running steps for project qgis2.15.0...
21:18:54: Starting: "C:\QtCreator\bin\ninja.exe" qgis
ninja: no work to do.
21:18:54: The process "C:\QtCreator\bin\ninja.exe" exited normally.
21:18:54: Elapsed time: 00:00. 

Not even a second. If I did the same with VS or JOM I could have written this post before it finished working out what to do.

Here is what happens changing a single file:

21:19:48: Running steps for project qgis2.15.0...
21:19:48: Starting: "C:\QtCreator\bin\ninja.exe" qgis
[1/6] Building CXX object src\core\CMakeFiles\qgis_core.dir\raster\qgshillshaderenderer.cpp.obj
[2/6] Linking CXX shared library output\bin\qgis_core.dll
21:19:51: The process "C:\QtCreator\bin\ninja.exe" exited normally.
21:19:51: Elapsed time: 00:03.

It’s super impressive. Even a cold build on Windows is shorter now. On Linux it’s even faster due to faster disk access in Linux vs Windows

If you build QGIS form source I would highly recommend giving it a crack because I know you will love it.


Filed under: Open Source, qgis

by Nathan at May 26, 2016 11:25 AM

May 25, 2016

gvSIG Team

gvSIG Festival: Third Day [Videos]

Scripting in gvSIG (English) [Óscar Martínez. gvSIG Association]

gvSIG Roads: gestión de la conservación e inventario de carreteras con software libre (Spanish) [Ricardo Rueda.DiSiD. gvSIG Association]

GIS tools for water supply systems: an implementation using Epanet and gvSIG (English) [Silvia Franceschi. HydroloGIS. gvSIG Association]

gvSIG Online: IDE para la Secretaría de Turismo de México (Spanish) [Juan José del Toro. GeoAlternativa]

Delimitación de Microcuencas hidrográficas con gvSIG (Spanish) [Roxana Sánchez. (Parque Tecnológico Itaipú-Paraguay)]

Sistema de Información Geografico Para Catrastro Municipal con Software Libre (Spanish) [Marino Carhuapoma. IdeasG]

And tomorrow…

11:00-12:00

Evaluating temporal changes to water bodies in Medak India (English) [Gowtham Gollapalli.KAIINOS]

12:00-13:00

New tools for LiDAR, forestry, river management and hydro-geomorphology with jGrassTools in gvSIG (English) [Andrea Antonello and Silvia Franceschi. HydroloGIS. gvSIG Association]

13:00-14:00

Introduction to gvSIG (Turkish) [Yalçin. Univ.Estambul]

16:00-17:00

Geoprocesamiento con gvSIG (Spanish) [Gustavo Agüero. Consultores AA]

17:00-18:00

Novedades gvSIG 2.3: ¿En qué estamos trabajando? (Spanish) [Alvaro Anguix. Asociación gvSIG]

18:00-19:00

Programa de Caminería Rural en Uruguay con gvSIG (Spanish) [Sergio Acosta.MTOP]


Filed under: english, events, gvSIG Desktop, spanish, Turkish Tagged: webinars

by Alvaro at May 25, 2016 04:52 PM

Jackie Ng

MapGuide Open Source 3.1 pre-flight check part 3 (a wild roadblock appeared!)

Stop the presses. We ran into a blocker!

A particular nasty one, that affects not just MapGuide on CentOS, but on Ubuntu as well.

Something slipped into MapGuide or the WMS FDO provider that causes mgserver to segfault when one does a GETFEATUREPROVIDERS request and a WFS/WMS FDO connection is created when inspecting its capabilities. Previously, I thought it was a quirk with the internal FDO source copy of OpenSSL and so FDO was built using the system-installed copy of OpenSSL (like we did for Ubuntu), but this problem still persisted on CentOS, and it turned out it was also segfaulting on Ubuntu as well!

Running this under gdb didn't help us at all. It only shows that the SIGSEGV happens at a function named ?? in libWMSProvider.so on CentOS, and at a function named _init in libWMSProvider.so on Ubuntu. Not very helpful.

Even the venerable valgrind couldn't help me here. Putting mgserver under valgrind and triggering the segfault gives me this incomprehensible gibberish

==11521== Thread 13:
==11521== Jump to the invalid address stated on the next line
==11521==    at 0x6E8A6: ???
==11521==    by 0x4275D9F: FdoConnectionManager::CreateConnection(wchar_t const*) (ConnectionManager.cpp:334)
==11521==    by 0x4BBB543: MgServerGetFeatureProviders::AddConnectionProperties(xercesc_3_1::DOMElement*, wchar_t const*) (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4BBADD3: MgServerGetFeatureProviders::CreateFeatureProvidersDocument() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4BB9E23: MgServerGetFeatureProviders::GetFeatureProviders() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4B67285: MgServerFeatureService::GetFeatureProviders() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4B303A4: MgOpGetFeatureProviders::Execute() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4B19AE6: MgFeatureServiceHandler::ProcessOperation() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x809768A: MgOperationThread::ProcessOperation(MgServerStreamData*) (OperationThread.cpp:397)
==11521==    by 0x8095C1B: MgOperationThread::ProcessMessage(ACE_Message_Block*) (OperationThread.cpp:226)
==11521==    by 0x8094536: MgOperationThread::svc() (OperationThread.cpp:90)
==11521==    by 0x623521B: ACE_Task_Base::svc_run(void*) (in /usr/local/mapguideopensource-3.1.0/lib/libACE.so)
==11521==  Address 0x6e8a6 is not stack'd, malloc'd or (recently) free'd
==11521== 
==11521== 
==11521== Process terminating with default action of signal 11 (SIGSEGV)
==11521==  Bad permissions for mapped region at address 0x6E8A6
==11521==    at 0x6E8A6: ???
==11521==    by 0x4275D9F: FdoConnectionManager::CreateConnection(wchar_t const*) (ConnectionManager.cpp:334)
==11521==    by 0x4BBB543: MgServerGetFeatureProviders::AddConnectionProperties(xercesc_3_1::DOMElement*, wchar_t const*) (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4BBADD3: MgServerGetFeatureProviders::CreateFeatureProvidersDocument() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4BB9E23: MgServerGetFeatureProviders::GetFeatureProviders() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4B67285: MgServerFeatureService::GetFeatureProviders() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4B303A4: MgOpGetFeatureProviders::Execute() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x4B19AE6: MgFeatureServiceHandler::ProcessOperation() (in /usr/local/mapguideopensource-3.1.0/server/lib/libMgServerFeatureService-3.1.0.so)
==11521==    by 0x809768A: MgOperationThread::ProcessOperation(MgServerStreamData*) (OperationThread.cpp:397)
==11521==    by 0x8095C1B: MgOperationThread::ProcessMessage(ACE_Message_Block*) (OperationThread.cpp:226)
==11521==    by 0x8094536: MgOperationThread::svc() (OperationThread.cpp:90)

==11521==    by 0x623521B: ACE_Task_Base::svc_run(void*) (in /usr/local/mapguideopensource-3.1.0/lib/libACE.so)

I admit to not being an expert-level C++ developer, so when I can't find the usual cases for a SIGSEGV (eg. A null pointer de-reference) in gdb/valgrind output, I am often left scratching my head. Google searches on these error messages weren't of much help.

The good thing was that this problem only happens on FDO since 4.0 was branched and released (we're targeting FDO 4.1 here) so in the absence of expert-level C++ knowledge it was time to be systematic and track down the offending FDO revision since 4.0 branched that introduced this breakage. Time to apply that binary search again! After several wasted days of trial and error compilation/testing, we found the offending revision.

At face value, this commit looks innocuous enough, a few new files and some modifications. Nothing in the new and modified files that sounds like dangerous C++ code to my padawan-tier knowledge.


But looking at the overall list of files, something caught my eye. In this commit was a project file update, but it was only for windows (the modified WMSProvider.vcxproj file). Normally if new files are to be added, not only should the windows vcxproj file be updated as well (to include the new .h and .cpp files), but the corresponding Makefile.am files for Linux as well, and this was conspicuously absent.

This lit a light-bulb in my head, I had a look at the Makefile.am file for the WMS provider and lo-and-behold, it didn't have the new .cpp and .h files in this commit. Then it all came together.

The WMS provider was segfaulting because it was being compiled with undefined symbols (to the new FdoWmsGetFeatureInfoFormats class). Updating the Makefile.am with the missing files and re-compiling the WMS provider made the segfault go away.

And that was the tale of how I cleared the final roadblock to releasing MapGuide Open Source 3.1 (smoke tests with this change all pass, the beta 1 binaries are being built as this blog post is being published). Now on Windows with the MSVC compiler, such a problem would've manifested at the compiler phase as LNK2001 unresolved external symbol errors, so it surprised me big time that gcc or ld did not error out about undefined symbols and immediately break the build which would've caught this problem much sooner!

It turns out gcc/ld erroring out is a flag you have to opt-in to. The more you know. Thanks to Johan for the heads up.

So you can now expect the next post to be about ...

by Jackie Ng (noreply@blogger.com) at May 25, 2016 03:16 PM

Tim Waters

Mapwarper featured in A Digital Humanities Primer for English Students

Jenna Herdman has written an excellent free e-book about Digital Humanities for English Students which has an entire chapter titled: Digital Mapping Tool Tutorial which features the Mapwarper. It’s been published using gitbook and is available in pdf, html, epub formats.

The tutorial covers adding a map to mapwarper.net to chart the movements of David in Charles Dickens’s David Copperfield.

unspecified-2

The map is then loaded into Palladio which is a new tool for me. it “is a web-based platform for the visualization of complex, multi-dimensional data”.

unspecified-1

Do check out this great resource. The book has seven chapters in total and all of them are interesting and worthwhile to read! https://www.gitbook.com/book/jennaherdman/a-digital-humanities-primer-for-english-students/details


by tim at May 25, 2016 01:02 PM

Paul Ramsey

Drowning in Passwords

I like the internet, I use a lot of sites, I don’t fear online shopping or discussion or communication or banking. As a result, I have a pretty healthy footprint of accounts, and I have been finding recently that my brain can no longer keep up.

Drowning in Passwords

So I’ve started using a password manager, LastPass, which works just fine.

Once I fully committed to it, the number of passwords managed started a slow and seemingly relentless climb, as over time I returned to all the many sites at which I had been forced to register accounts in the past. As a result, I’ve learned useful things:

  • The number of sites I have accounts on is far larger than I thought. I have 40 entries in LastPass already, and I imagine I’m only about 2/3 of the way through adding all the sites I use more than once a year. Of those, easily a dozen are what you might call “important”: banks, brokerages, email, OAuth sources (Twitter, Facebook, Google), etc. Far more sites than I kept separate passwords for!
  • The centrality and potential vulnerability of the email account is hard to overstate. For 90% of the accounts I have added, the first step was “reset the password”, since I had forgotten it. (In fact, that was my old access mechanism, since I accessed many sites so rarely.) And “reset” uses access to email as a source of proxy authentication. So, 0wn my email address, 0wn me, entirely. If you haven’t enabled two-factor authentication on your email account yet, you need to, because of this.

Usually, improving security involves things getting more inconvenient but in the case of using a password manager, it has actually been a net improvement. No more time spent trying to remember which of the passwords in my limited brain key-chain I had used for a site. No more reset-password-and-wait for the many sites at which I had no idea what the password was.

LastPass has been very good, and I have only one note/caveat. The password manager works by installing a plug-in into your browser, so if you use multiple browsers (I use both Chrome and Safari regularly) you’ll end up with multiple plugins. The preferences on those plugins are managed separately. Same thing if you use multiple computers (I do, desktop and laptop). Each plugin on each computer has separate preferences.

This is important because the LastPass preferences are, in my opinion, a little loose. Once you provide the master password, by default, the password vault remains unlocked and available until you actually shut down your browser. I can go days without shutting down my browser. So, I changed that preference to a time-out of 15 minutes instead. But I had to change it on every browser and on every computer I owned, which was not intuitive, since the plugin is good about sharing other information to other installs transparently (add a password on one browser, it’s available on all).

So far I’ve been using the free version of LastPass, but as I move into the mobile world I will probably have to buck up for the paid version for support on mobile devices. Given how much it has simplified my life, I won’t begrudge them the dollars.

Bonus paragraph: Isn’t saving all my passwords on a cloud service really dumb? Not so much. The passwords are only ever decrypted locally by the password manager plugin. The cloud just stores a big encrypted lump of passwords, and I have a lot of faith in AES256. However, my security does now one big central point of failure: the master password. But since I only have to remember one master password, I have been able to make it nice and long, so any remote technical attack on my security is unlikely. That just leaves all the other kinds of attack (social engineering, keylogging, device theft, human factors, etc, etc).

May 25, 2016 11:00 AM

Fernando Quadro

Introdução ao OpenLayers 3: Controles

Uma ferramenta típica para exibir em seu mapa é a barra de escala, e o OpenLayers 3 fornece a classe ol.control.ScaleLine para esta finalidade.

Vamos adicionar a escala no nosso mapa, para isso abra o arquivo map.html em seu editor de texto, e adicione o seguinte código para criar este novo controle em seu mapa:

controls: ol.control.defaults().extend([
  new ol.control.ScaleLine()
]),

Veja como ficou:

scaleline1

Você pode encontrar dificuldades para ler as informações sobre a barra de escala. Existem algumas atitudes que podem ser tomadas a fim de melhorar a visibilidade da escala. Se você quiser manter o controle dentro do mapa de exibição, você pode adicionar algumas declarações de estilo dentro do CSS do seu documento.

Para testar isso, você pode incluir uma cor de fundo e preenchimento para a barra de escala com algo parecido com o seguinte:

.ol-scale-line, .ol-scale-line:not([ie8andbelow]) {
   background: black;
   padding: 5px;
 }

No entanto, digamos que você acha que o mapa está ficando poluído visualmente. Para evitar isso, você pode exibir a escala em um local diferente. Para isso, precisamos primeiro criar um elemento adicional na nossa página e, em seguida, dizer ao controle de escala para criar-se dentro deste novo elemento.

Vamos então criar um novo elemento no <body> da sua página HTML. Para que seja fácil de referenciar este elemento, vamos dar-lhe um ID. Insira o seguinte código em algum lugar do <body> do seu map.html. (Colocar o elemento escala logo após o elemento do mapa <div id = “map”> </ div> faz sentido.):

<div id="scale-line" class="scale-line"></div>

Agora altere o código do controle de escala para fazer referência ao novo elemento:

controls: ol.control.defaults().extend([
  new ol.control.ScaleLine({className: 'ol-scale-line', target: document.getElementById('scale-line')})
]),

Adicione o código abaixo no seu estilo CSS:

.scale-line {
  position: absolute;
  top: 350px;
}
.ol-scale-line {
  position: relative;
  bottom: 0px;
  left: 0px;
}

Salve as alterações e abra o arquivo map.html no seu browser: @servidor@/map.html

scaleline2

Como vimos no post Vetores, podemos utilizá-los sobre um mapa base. Uma das vantagens de utilizarmos vetores é que podemos interagir com os dados. Neste exemplo, criamos uma camada de vetor, onde os usuários podem selecionar e visualizar as informações.

O exemplo anterior demonstrou a utilização de controles no mapa. A classe ol.interaction.Interaction é um controle responsável por manipular a interação do usuário, mas normalmente não tem uma representação visual. O exemplo abaixo demonstra o uso da classe ol.interaction.Select para interagir com uma camada vetorial. Veja:

<!doctype html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="ol3/ol.css" type="text/css">
    <style>
    #map {
      height: 256px;
      width: 512px;
    }
    </style>
    <script src="ol3/ol.js" type="text/javascript"></script>
    <title>OpenLayers 3 example</title>
  </head>
  <body>
    <h1>My Map</h1>
    <div id="map"></div>
    <script type="text/javascript">
      var map = new ol.Map({
        interactions: ol.interaction.defaults().extend([
          new ol.interaction.Select({
            style: new ol.style.Style({
              image: new ol.style.Circle({
                radius: 5,
                fill: new ol.style.Fill({
                  color: '#FF0000'
                }),
                stroke: new ol.style.Stroke({
                  color: '#000000'
                })
              })
            })
          })
        ]),
        target: 'map',
        layers: [
          new ol.layer.Tile({
            title: "Global Imagery",
            source: new ol.source.TileWMS({
              url: 'http://maps.opengeo.org/geowebcache/service/wms',
              params: {LAYERS: 'bluemarble', VERSION: '1.1.1'}
            })
          }),
          new ol.layer.Vector({
            title: 'Earthquakes',
            source: new ol.source.GeoJSON({
              url: 'data/layers/7day-M2.5.json'
            }),
            style: new ol.style.Style({
              image: new ol.style.Circle({
                radius: 5,
                fill: new ol.style.Fill({
                  color: '#0000FF'
                }),
                stroke: new ol.style.Stroke({
                  color: '#000000'
                })
              })
            })
          })
        ],
        view: new ol.View({
          projection: 'EPSG:4326',
          center: [0, 0],
          zoom: 1
        })
      });
    </script>
  </body>
</html>

Salve as alterações, e para ver o recurso de seleção em ação, use o clique do mouse para selecionar um elemento:

select1

by Fernando Quadro at May 25, 2016 10:08 AM

gvSIG Team

gvSIG Festival: Second Day [Videos]

gvSIG Online: the solution for Spatial Data Infrastructures on Open Source software (English) [César Martínez. Scolab. gvSIG Association]


Digital field mapping with Geopaparazzi and gvSIG (English) [Andrea Antonello. HydroloGIS. gvSIG Association]

Utilización del software gvSIG para el análisis acústico urbano: Sistema de Autopistas de La Ciudad Autónoma de Buenos Aires (Spanish) [Mario Fèvre. Trecc]


gvSIG Online: la solución para Infraestructuras de Datos Espaciales con software libre (Spanish) [César Martínez. Scolab. Asociación gvSIG][La parte final no se grabó por problemas técnicos/The end of the webinar wasn’t recorded because of technical problems]


Введение в gvSIG (Russian) [Alexander Karandeev]

And Today…

11:00-12:00

Scripting in gvSIG (English) [Óscar Martínez. gvSIG Association]

12:00-13:00

gvSIG Roads: gestión de la conservación e inventario de carreteras con software libre (Spanish) [Ricardo Rueda.DiSiD. gvSIG Association]

13:00-14:00

GIS tools for water supply systems: an implementation using Epanet and gvSIG (English) [Silvia Franceschi. HydroloGIS. gvSIG Association]

16:00-17:00

gvSIG Online: IDE para la Secretaría de Turismo de México (Spanish) [Juan José del Toro. GeoAlternativa]

17:00-18:00

Delimitación de Microcuencas hidrográficas con gvSIG (Spanish) [Roxana Sánchez. (Parque Tecnológico Itaipú-Paraguay)]

18:00-19:00

Sistema de Información Geografico Para Catrastro Municipal con Software Libre (Spanish) [Marino Carhuapoma. IdeasG]

* Madrid Time. Click on the time of every webinar to check it in your city.

** Registration is available clicking on the title of every webinar.


Filed under: english, gvSIG Desktop, gvSIG Online, gvSIG Roads, Russian, spanish Tagged: webinars

by Alvaro at May 25, 2016 07:51 AM

May 24, 2016

Paul Ramsey

Intellectual Capital vs Intellectual Property

Building enterprise IT projects as “capital investments” is something I consider potentially dangerous, because it lumps IT “assets” along with much more durable and valuable physical assets.

A key question to ask of an “IT asset” is just how valuable and permanent the asset is. In the venture capital world, nothing makes investors happier than hearing that a company is spending their investment dollars creating “intellectual property”. This is an intellectual product that is defensible and ownable: it’s not locked up between some employee’s ears, it’s owned by the company.

In contrast, building “intellectual capital” is a much more risky proposition. Intellectual capital is my stock in trade, it’s what distinguishes me from a random C/C++ programmer: I know some very detailed things about some specific open source projects that would take quite a long time to learn from scratch. It’s valuable capital, but it lives between my ears. It’s mine and mine alone.

Intellectual Capital vs Intellectual Property

Why is this important for enterprise IT projects? Because so much of the value created in IT projects is “intellectual capital”. Staff are assembled by a consultancy and take months and years to learn a business domain and the particular tools for the problem, and the particular code base that is the system itself.

And then when the project is done… they are sent off to consultancy’s the next project. Flush…

Treating enterprise IT projects as capital projects encourages miscategorization all over the place:

  • The “system” is perceived as the target of the investment. But the value of the pile of code and hardware rapidly diminishes to zero once the knowledgeable staff are removed. Changes and enhancements that would take the original developers minutes now require days and weeks of staff learning time before they can be attempted.
  • The nature of the funding assumes that at some point the system will be “complete”. It will be in “maintenance” mode. Except the budget assigned to maintainance is too low to make any substantial changes in response to unexpected future needs. So when serious new requirements arise, the response is always to start again from scratch. With a new team.

It’s weird that IT projects get this special treatment, because other areas of government are perfectly aware that when staff leave, they carry out the accumulated intellectual capital of years of learning.

The very nature of the outsourced IT relationship has obscured the fact that government is routinely building up very expensive stores of intellectual capital and then sending them on their way only a handful of months or years after they’ve built them.

Maybe it’s time to get back to building systems in house?

May 24, 2016 11:00 AM

Fernando Quadro

Introdução ao OpenLayers 3: Vetores

Camadas vetoriais no OL3 são representadas pela classe ol.layer.Vector que manipula a exibição de dados vetoriais no lado do cliente. Atualmente OpenLayers 3 só suporta renderização vetorial através do renderizador do Canvas.

Vamos voltar ao exemplo WMS para obter um mapa básico do mundo, para isso vamos adicionar alguns recursos em uma camada vetorial.

<!doctype html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="ol3/ol.css" type="text/css">
    <style>
      #map {
        height: 256px;
        width: 512px;
      }
    </style>
    <title>OpenLayers 3 example</title>
    <script src="ol3/ol.js" type="text/javascript"></script>
  </head>
  <body>
    <h1>My Map</h1>
    <div id="map"></div>
    <script type="text/javascript">
      var map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({
            title: "Global Imagery",
            source: new ol.source.TileWMS({
              url: 'http://maps.opengeo.org/geowebcache/service/wms',
              params: {LAYERS: 'bluemarble', VERSION: '1.1.1'}
            })
          })
        ],
        view: new ol.View({
          projection: 'EPSG:4326',
          center: [0, 0],
          zoom: 0,
          maxResolution: 0.703125
        })
      });
    </script>
  </body>
</html>

Agora abra o arquivo map.html em seu editor de texto e copie o conteúdo do exemplo WMS inicial. Salve suas alterações, confirme e veja como ficou no seu navegador: @servidor@/map.html

No seu código de inicialização do mapa adicione outra camada após camada existente (código abaixo). Isso irá adicionar uma nova camada de vetorial para o seu mapa, para este exemplo você precisará de um arquivo GeoJSON que você pode criar no QGIS, por exemplo:

new ol.layer.Vector({
  title: 'Earthquakes',
  source: new ol.source.GeoJSON({
    url: 'data/layers/7day-M2.5.json'
  }),
  style: new ol.style.Style({
    image: new ol.style.Circle({
      radius: 3,
      fill: new ol.style.Fill({color: 'white'})
    })
  })
})

Veja como ficou o nosso mapa:

vector1

Como os dados contidos no arquivo GeoJSON estão em WGS84 (EPSG:4326) e a nossa camada base também, não é necessário uma reprojeção. No caso em que a projeção das camadas for diferente, isso significa que você deve especificar a projeção que deve ser utilizadas no seu mapa.

by Fernando Quadro at May 24, 2016 10:45 AM

gvSIG Team

GIS of Thrones: Mapping Game of Thrones with gvSIG

Sometimes when we are doing training tasks, users ask us about free datasets to practice and learn all the possibilities that gvSIG gives us. Fortunately there are a great quantity of free data today, but it’s true that only a few times we find geographic information that allows us to enjoy while we learn to create legends, labeling, making geoprocesses…

We were thinking in it when we found a dataset, with free license, based on the successful series (in books and on TV) Game of Thrones. After testing it with gvSIG we found several errors at the information layers, but they were able to be solved easily with some geoprocesses. Since we were at that point, why don’t we play with symbology and labeling by scale?

Here you have a short video with the results:

And here you have a zip file with the data and the gvSIG project to be used. We know what project we are going to use to test the next version…

downloads.gvsig.org/download/documents/books/GISofThrones.zip

And another day we will speak about Star Wars…


Filed under: gvSIG Desktop

by Mario at May 24, 2016 10:39 AM

May 23, 2016

gvSIG Team

gvSIG Festival: First Day [Videos]

 Introduction to gvSIG (English) [Mario Carrera. gvSIG Association]

Utilización de gvSIG en estudios sobre desastres naturales y salud mental (Spanish) [Manuel Esteban Lucas Borja. Universidad de Castilla-La Mancha]

Utilização do gvSIG na Defesa Civil (Portuguese) [Gilberto Cugler. Comunidade gvSIG Brasil]

gvSIG applications in East Africa – Kenya and Somaliland (English) [Giuliano Ramat y Maurizio Fòdera]

O Futuro no Passado: o uso das geotecnologias aplicadas às pesquisas históricas (Portuguese) (Maíra Rosin. HIMACO]

And tomorrow…

11:00-12:00

gvSIG Online: the solution for Spatial Data Infrastructures on Open Source software (English) [César Martínez. Scolab. gvSIG Association]

12:00-13:00

Digital field mapping with Geopaparazzi and gvSIG (English) [Andrea Antonello. HydroloGIS. gvSIG Association]

13:00-14:00

gvSIG, un Système d’Information Géographique libre (French) [Victoria Agazzi. gvSIG Association]

16:00-17:00

Utilización del software gvSIG para el análisis acústico urbano: Sistema de Autopistas de La Ciudad Autónoma de Buenos Aires (Spanish) [Mario Fèvre. Trecc]

17:00-18:00

gvSIG Online: la solución para Infraestructuras de Datos Espaciales con software libre (Spanish) [José Vicente Higón. Scolab. Asociación gvSIG]

18:00-19:00

Delimitación de Microcuencas hidrográficas con gvSIG (Spanish) [Roxana Sánchez. (Parque Tecnológico Itaipú-Paraguay)]

19:00-20:00

Введение в gvSIG (Russian) [Alexander Karandeev]

* Madrid Time. Click on the time of every webinar to check it in your city.

** Registration is available clicking on the title of every webinar.


Filed under: english, events, portuguese, Russian, spanish Tagged: webinars

by Alvaro at May 23, 2016 07:14 PM

GeoSolutions

MapStore 2: working hard on the new L&F

MapStore 2 HomePage

Dear All, we just wanted to share with you the work that we are doing on the new Look&Feel for MapStore 2 with our partner Chef Studio

For MapStore 2 as we rewriting from scratch the JavaScript framework using ReactJS as we described in this long post we did not want to leave behind the quality of the UI/UX aspects as such we have set ambitious goals for that part as well; we want MapStore 2 to work nice on the mobile from the first version (i.e. responsive and mobile first or better work nice on all screen sizes) hence we want it to move away from complex desktop like UI as we used to do for MapStore 1 (bye bye Ext-JS) and create something that would be less intimidating at the first glance while retaining the ability to have sophisticated functionalities still available (yes, I am talkin to you QueryBuilder! See below..).

[caption id="attachment_2811" align="alignnone" width="800"]MapStore 2 Query Builder MapStore 2 Query Builder[/caption]

Well, while the first post on MapStore 2 was rather long this one is going to be rather small. If you are willing to have a look at what we are doing and give us your opinion you can find the current mock-up that is driving the GUI at this lin. You can also look at a static HTML+CSS mockup of the various components here which gets updated every time our colleagues at Chef Studio push new samples to GitHub. We are right now working on mounting the L&F on a the Q&A version of MapStore 2 so, stay tuned for an update on that.

Aside, in case you forgot the Q&A instance of MapStore 2 is available here and the stable version is available here. There is a continuous deploy mechanism in place so they both get update quite often, Q&A is update as the developer push something to GitHub while stable is update once the testers press the deploy button :).

If you are curious but you don't want to spend time on checking the links above, here below you have some screenshots (aren't they worth a thousand words?).

[caption id="attachment_2820" align="alignnone" width="800"]MapStore MapView on desktop MapStore MapView on desktop[/caption] [caption id="attachment_2821" align="alignnone" width="800"]MapStore MapView on mobile MapStore MapView on mobile[/caption] [caption id="attachment_2822" align="alignnone" width="800"]MapStore 2 HomePage MapStore 2 HomePage[/caption]

If you want to know more about how we can help your organization, don't hesitate and get in touch with us! Make sure to check our Enterprise Services Offer which is the contracting whicle we use to help our clients reach their goal with our products.

The GeoSolutions Team,

Geosolutions

by simone giannecchini at May 23, 2016 05:35 PM

Fernando Quadro

Introdução ao OpenLayers 3: Raster

Nas seções anteriores, nós exibimos camadas com base no padrão WMS. Quando falamos em mapeamento on-line, é importante ressaltar que ele foi amplamente popularizado pela disponibilidade de serviços de mapas proprietários. O OpenLayers fornece tipos de camadas que trabalham com esses serviços proprietários através da sua API.

Nesta seção, vamos construir a partir do exemplo desenvolvido na seção anterior uma camada usando o Bing. Para ver como utilizar o Google Maps com o OpenLayers 3, basta clicar nesse link.

1. Bing

Vamos adicionar uma camada Bing. Para isso em seu arquivo map.html, encontre onde está a chamada para a camada do OSM e substitua a referência pela classe ol.source.BingMaps conforme demonstrado abaixo:

source: new ol.source.BingMaps({
  imagerySet: 'Road',
  key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3'
})

Salve as alterações e recarregue o arquivo map.html no seu browser: @servidor@/map.html

A API do Bing requer que você registre uma chave para usar com seu aplicativo. O exemplo aqui usa uma chave que você não deve usar na produção. Para usar a camada do Bing na produção, registre sua chave em https://www.bingmapsportal.com/.

proprietary1

Após alterar seu arquivo map.html ele deve ser algo parecido com isto:

<!doctype html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="ol3/ol.css" type="text/css">
    <style>
      #map {
        height: 256px;
        width: 512px;
      }
      .ol-attribution a {
        color: black;
      }
    </style>
    <script src="ol3/ol.js" type="text/javascript"></script>
    <title>OpenLayers 3 example</title>
  </head>
  <body>
    <h1>My Map</h1>
    <div id="map" class="map"></div>
    <script type="text/javascript">
      var map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({
            source: new ol.source.BingMaps({
              imagerySet: 'Road',
              key: 'Ak-dzM4wZjSqTlzveKz5u0d4IQ4bRzVI309GxmkgSVr1ewS6iPSrOvOKhA-CJlm3'
            })
          })
        ],
        view: new ol.View({
          center: ol.proj.transform([-93.27, 44.98], 'EPSG:4326', 'EPSG:3857'),
          zoom: 9
        })
      });
    </script>
  </body>
</html>

No próximo post você verá como criar camadas a partir de vetores e qual a sua utilidade prática.

by Fernando Quadro at May 23, 2016 10:10 AM

May 21, 2016

BostonGIS

pgRouting 2.2.3 released with support for PostgreSQL 9.6beta1

pgRouting 2.2.3 was released last week. Main change is this version now supports PostgreSQL 9.6. Many thanks to Vicky Vergara for working thru the issues with PostgreSQL 9.6 and getting it to work. Vicky has also been doing a good chunk of the coding (a lot of Boost refactoring and integrating more Boost features), testing, and documentation in pgRouting, osm2pgrouting, and QGIS pgRoutingLayer in general for pgRouting 2.1, 2.2, and upcoming 2.3. We are very indebted to her for her hard work.

If you are a windows user testing the waters of PostgreSQL 9.6beta1, we have pgRouting 2.2.3 binaries and PostGIS 2.3.0dev binaries at http://postgis.net/windows_downloads.


Continue reading "pgRouting 2.2.3 released with support for PostgreSQL 9.6beta1"

by Regina Obe (nospam@example.com) at May 21, 2016 04:24 PM

May 20, 2016

gvSIG Team

GIS of Thrones: Mapeando Juego de Tronos con gvSIG

En muchas ocasiones, cuando realizamos tareas de formación, nos preguntan por juegos de datos libres para poder practicar e ir aprendiendo todas las posibilidades que nos da gvSIG. Afortunadamente hoy hay una cantidad inmensa de datos libres, pero también es cierto que pocas veces se encuentra información geográfica que nos permita divertirnos un poco mientras aprendemos a crear leyendas, etiquetados, realizar geoprocesos…

Andaba pensando en esto cuando encontré un juego de datos, con licencia libre, basado en la exitosa serie (de libros y de TV) Juego de Tronos. Tras revisarlo con gvSIG encontré unos cuantos errores en las capas de información, pero que mediante unos pocos geoprocesos se solucionaban con facilidad. Ya que estaba, ¿por qué no jugar un poco con la simbología y el etiquetado por escalas?

Os dejo un pequeño vídeo del resultado:

Y aquí tenéis un zip con los datos y el proyecto de gvSIG listo para ser utilizado. Ya sé con que proyecto voy a comenzar a testear la próxima versión de gvSIG…

downloads.gvsig.org/download/documents/books/GISofThrones.zip

Y otro día hablaremos de Star Wars…


Filed under: gvSIG Desktop, spanish, training

by Alvaro at May 20, 2016 11:34 AM

Fernando Quadro

Introdução ao OpenLayers 3: Cache

Por padrão, uma camada faz requisições para imagens com tamanho de 256 x 256 (pixel). A medida que você realiza as operações de pan e zoom no seu mapa, mais requisições de imagens são executadas para preencher as áreas que você ainda não visitou. Enquanto o seu navegador irá armazenar em cache algumas imagens solicitadas, bastante trabalho de processamento é normalmente necessária para o servidor renderizar imagens dinamicamente.

Para essas requisições é possível que o servidor armazene em cache essa requisições de imagens e retorne o resultado em cache a próxima vez que você (ou outra pessoa) visita na mesma área – o que resulta em um melhor desempenho do seu mapa.

1. ol.source.XYZ

A especificação Web Map Service (WMS) permite uma grande flexibilidade em termos do que um cliente pode solicitar. Sem restrições, o que torna o armazenamento em cache difícil ou impossível na prática.

No extremo oposto, um serviço pode oferecer tiles um conjunto fixo de níveis de zoom e apenas por um determinado extent (Bounding Box). Estes podem ser generalizados como camadas com uma fonte XYZ – você pode considerar X e Y para indicar a coluna e linha e Z para representar o nível de zoom.

2. ol.source.OSM

O OpenStreetMap (OSM) é um esforço para mapear e divulgar dados de mapas disponíveis gratuitamente para o mundo. O OSM fornece algumas representações diferentes de seus dados como conjuntos de tiles em cache. Estas representações estão em conformidade com a base o modelo XYZ e podem ser utilizadas em um mapa com Openlayers. O ol.source.OSM fornece acesso a essa camada.

Agora abra o arquivo map.html, utilizado no post anterior em um editor de texto e altere o código de inicialização do mapa para se parecer com o seguinte:

<script>
  var map = new ol.Map({
    target: 'map',
    layers: [
      new ol.layer.Tile({
        source: new ol.source.OSM()
      })
    ],
    view: new ol.View({
      center: ol.proj.transform([-93.27, 44.98], 'EPSG:4326', 'EPSG:3857'),
      zoom: 9
    }),
    controls: ol.control.defaults({
      attributionOptions: {
        collapsible: false
      }
    })
  });
</script>

No elemento head do mesmo documento, adicione algumas declarações de estilo para camada.

<style>
    #map {
        width: 512px;
        height: 256px;
    }
    .ol-attribution a {
        color: black;
    }
</style>

Salve as alterações e atualize a página no seu navegador: @servidor@/map.html

cached1

No próximo post estaremos falando sobre o uso de camadas raster no OpenLayers 3. Não perca!

by Fernando Quadro at May 20, 2016 10:30 AM

May 19, 2016

Gis-Lab

Плагин Attribute based clustering – простая кластеризация векторных объектов по атрибутам в QGIS

В географических исследованиях часто возникает задача типологии изучаемых объектов по набору формализованных параметров. Как сгруппировать большое количество объектов в небольшое число классов по совокупности показателей, определенных для каждого их этих объектов? Существуют различные подходы, в том числе и математический.

В статье Эдуарда Казакова приводится краткое описание простого метода взвешенной иерархической кластеризации, а также упоминается классический K-Means; описывается разработанный плагин Attribute based clustering, реализующий их; приводится несколько примеров использования.

null

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

by Александр Мурый at May 19, 2016 03:12 PM

Le blog de Geomatys

Geomatys recrute un(e) Front-end développeur(se)

Nous sommes à la recherche d’un(e) développeur(euse) passionné(e) par le design Web, HTML5/CSS3 et le Javascript avec une forte sensibilité pour les différents frameworks émergents que sont Angular2, Babel et Cesium. Vous intégrerez une équipe dédiée au développement d’applications à fortes dominantes géographiques, constituée d’un UX/UI designer en charge de la réalisation des maquettes, et […]

by geoadmin at May 19, 2016 01:43 PM

Le blog de Geomatys

Geomatys recrute Back-end développeur(se) avec 1ère expérience

Nous sommes à la recherche d’un(e) développeur(euse) passionné(e) par la conception et le développement d’applications backend Java avec une bonne connaissance de Spring frameworks. Vous intégrerez une équipe dédiée au développement d’applications à fortes dominantes géographiques. Votre rôle sera de participer à l’Architecture de solutions robustes, évolutives et capables d’intégrer de gros volumes de données. […]

by geoadmin at May 19, 2016 01:38 PM

Fernando Quadro

Introdução ao OpenLayers 3: Layers

No último post você teve uma visão inicial sobre o OpenLayers 3, neste post iremos iniciar o assunto camadas (Layers).

Quando você adiciona uma camada ao seu mapa, os dados solicitados podem ser matriciais (raster) ou vetoriais. Você pode pensar em dados raster como informações prestadas através de imagens de satélite, e vetorial como informações estruturadas que podem ser processadas para exibição no navegador.

Há muitos tipos de serviços que fornecem dados raster. Esta seção vai lidar apenas com os que estão em conformidade com a especificação OGC Web Map Service (WMS).

Vamos começar com um exemplo de mapa completamento e vamos modificar as camadas para que você possa obter uma compreensão de como elas funcionam.

Dê uma olhada no seguinte código que já utilizamos no último post:

<!doctype html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="ol3/ol.css" type="text/css">
    <style>
      #map {
        height: 256px;
        width: 512px;
      }
    </style>
    <script src="ol3/ol.js" type="text/javascript"></script>
    <title>OpenLayers 3 example</title>
  </head>
  <body>
    <h1>My Map</h1>
    <div id="map"></div>
    <script type="text/javascript">
      var map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({
            title: "Global Imagery",
            source: new ol.source.TileWMS({
              url: 'http://maps.opengeo.org/geowebcache/service/wms',
              params: {LAYERS: 'bluemarble', VERSION: '1.1.1'}
            })
          })
        ],
        view: new ol.View({
          projection: 'EPSG:4326',
          center: [0, 0],
          zoom: 0,
          maxResolution: 0.703125
        })
      });
    </script>
  </body>
</html>

Agora vamos detalhar os métodos utilizados na criação da camada do código acima:

1. A classe ol.layer.Tile

Através do construtor da classe ol.layer.Tile obtemos um objeto do tipo olx.layer.TileOptions. Neste caso estamos fornecendo as informações através da classe ol.source.TileWMS. Um título legível para a camada pode ser fornecida com através do parâmetro “title”, mas basicamente qualquer descrição pode ser utilizada como título. No OpenLayers 3 há uma separação entre as camadas e fontes (sources), enquanto que no OpenLayers 2 tudo fazia parte da camada.

A classe ol.layer.Tile representa uma grade de imagens, e a ol.layer.Image representa uma única imagem. Dependendo do tipo de camada, você deve usar uma fonte (source) diferente (ol.source.TileWMS ou ol.source.ImageWMS).

2. A classe ol.source.TileWMS

No construtor da classe ol.source.TileWMS estamos passando dois argumentos, um é o url do serviço WMS, e o outro é o params um objeto que possui os nomes de parâmetros e seus valores.

wms1

A versão 1.3.0 do WMS é a utilizada como padrão no OpenLayers, caso seja necessário fornecer uma versão anterior, é possível indicá-la no argumento params.

layers: [
  new ol.layer.Tile({
    title: "Global Imagery",
    source: new ol.source.TileWMS({
      url: 'http://maps.opengeo.org/geowebcache/service/wms',
      params: {LAYERS: 'bluemarble', VERSION: '1.1.1'}
    })
  })
]

Este mesmo serviço WMS oferece uma camada denominada “OpenStreetMap”. Altere o valor do parâmetro LAYERS de “bluemarble” para “OpenStreetMap”. Seu código da classe ol.layer.Tile deve ficar parecido com o código abaixo:

new ol.layer.Tile({
  title: "Global Imagery",
  source: new ol.source.TileWMS({
    url: 'http://maps.opengeo.org/geowebcache/service/wms',
    params: {LAYERS: 'openstreetmap', VERSION: '1.1.1'}
  })
})

No próximo post trataremos sobre camadas utilizando a prerrogativa do cache, para uma melhor performance do seu mapa.

by Fernando Quadro at May 19, 2016 10:30 AM

May 18, 2016

gvSIG Team

gvSIG Festival: webinars in English

adictos-redes-socialesAs you know, the 1st gvSIG Festival will be held from May 23rd to 27th.

At this post we are going to summarize the webinars that will be given in English. For registrations you only have to press on the title of the webinar.

On Monday, May 23rd, we will start with a webinar about Introduction to gvSIG. The main characteristics about the gvSIG project will be shown at this webinar, as well as several videos about the main functionalities of gvSIG Desktop.

At the same day, Giuliano Ramat and Maurizio Fòdera will speak about gvSIG applications in East Africa – Kenya and Somaliland.  This presentation concerns two projects in east Africa where it has been offered a similar approach adapting the proposal to the different needs of the partners. The main goal was to provide local partner and authorities with a GIS product easy to use and update regularly; fully developed with open source technology to ensure future sustainability; replicated in other main similar neighbouring environments and, especially for urban cadaster, is able to provide a precise measurement of interesting targets.

On Tuesday there will be two webinars in English. At the first one, César Martínex (Scolab. gvSIG Association) will present one of the last products of the gvSIG Association, gvSIG Online, the alternative to ArcXXX Online, with the presentation gvSIG Online: the solution for Spatial Data Infrastructures on Open Source software.

The second one will deal with Digital field mapping with Geopaparazzi and gvSIG, given by Andrea Antonello, from Italy (HydroloGIS. gvSIG Association). Geopaparazzi is an application for fast field surveys. Its simplicity and the possibility to use it on as good as any android smartphone makes it a trusty field companion for engineers and geologists, but also for tourists who wish to keep a geodiary and any user that needs to be aware of his position even in offline mode. The plugin for Geopaparazzi in gvSIG supplies a userfriendly GUI with GIS functionalities to visualize all the data collected in the field, GPS tracks, text notes, pictures and form based notes and gives the possibility to save them as shapefiles.

The scripting module will be shown at the first presentation on Wednesday: Scripting in gvSIG, given by Óscar Martínez, from the gvSIG Association. Here you can discover all the possibilities that gvSIG 2.3 offers!!

At the same day, Silvia Franceschi, from HydroloGIS (Italy) and gvSIG Association, will give another interesting presentation in English, about GIS tools for water supply systems: an implementation using Epanet and gvSIG, tools that can be used by professionals and public administrations to design and verify water supply systems.

On Thursday there will be a presentation from India. Gowtham Gollapalli, from KAIINOS company, will speak about Evaluating temporal changes to water bodies in Medak India. In this presentation the presenters will analyze the effect of change in water spread on the population of Medak district, in India.

The next presentation at that day will deal with New tools for LiDAR, forestry, river management and hydro-geomorphology with jGrassTools in gvSIG. Andrea Antonello and Silvia Franceschi will speak about this issue.

And finally, at the last day of the gvSIG Festival, Manuel Madrid will present Monitoring Global Urban Expansion: Assessing the quality of urban layouts. This webinar will show the basis of a methodology developed by the New York University (NYU) and the gvSIG Association for assessing urban layouts, which is based on digitization on high resolution satellite imagery and on the use of open source software.

The webinar platform allows to connect to the webinars from any operating system, and in case you can’t see some of the webinars, you will be able to watch them at the gvSIG Youtube channel later.

See you at the gvSIG Festival!


Filed under: community, english, events

by Mario at May 18, 2016 11:23 AM

Fernando Quadro

Introdução ao OpenLayers 3: Básico

Estamos iniciando hoje uma série de posts que destina-se a dar uma visão geral sobre o OpenLayers 3 (OL3) como uma solução de mapeamento web. Os exemplos que serão apresentados supõe que você tem um servidor HTTP em execução localmente.

Os posts serão divididos em módulos, e cada módulo tem por base as lições aprendidas nos módulos anteriores e é projetado para construir de forma iterativa a base de conhecimento do leitor.

No OpenLayers, um mapa é um conjunto de camadas e controles para lidar com a interação do usuário. Um mapa é gerado com três ingredientes básicos: marcação, declarações de estilo e inicialização.

Vamos dar uma olhada em um exemplo totalmente funcional de um mapa com OpenLayers 3:

<!doctype html>
<html lang="en">
  <head>
    <link rel="stylesheet" href="ol3/ol.css" type="text/css">
    <style>
      #map {
        height: 256px;
        width: 512px;
      }
    </style>
    <title>OpenLayers 3 example</title>
    <script src="ol3/ol.js" type="text/javascript"></script>
  </head>
  <body>
    <h1>My Map</h1>
    <div id="map"></div>
    <script type="text/javascript">
      var map = new ol.Map({
        target: 'map',
        layers: [
          new ol.layer.Tile({
            title: "Global Imagery",
            source: new ol.source.TileWMS({
              url: 'http://maps.opengeo.org/geowebcache/service/wms',
              params: {LAYERS: 'bluemarble', VERSION: '1.1.1'}
            })
          })
        ],
        view: new ol.View({
          projection: 'EPSG:4326',
          center: [0, 0],
          zoom: 0,
          maxResolution: 0.703125
        })
      });
    </script>
  </body>
</html>

Agora:

1. Baixe o arquivo resources.zip e salve-o na raiz do seu servidor web.
2. Copie o texto acima em um novo arquivo chamado map.html , e guarde-o na raiz da pasta que você fez o download.
3. Abra o mapa em seu navegador: @servidor_url@/map.html

map1

Após criado com sucesso o nosso primeiro mapa, nós vamos olhar para cada uma dessas partes com um pouco mais de detalhes.

1. Markup

A marcação para o mapa no exemplo anterior gera um único elemento do documento:

<div id="map" ></ div>

Este elemento <div> irá servir como contêiner para o nosso mapa. Neste caso, nós damos ao elemento um ID para que possamos referenciá-lo como o destino de nosso mapa.

2. Estilo

OpenLayers vem com um estilo padrão que especifica como os elementos relacionados com o mapa devem ser representados. Nós incluímos esse estilo na página map.html quando inserimos a seguinte linha de código:

<link rel = "stylesheet" href = "OL3 / ol.css" type = "text / css">

O OpenLayers não faz quaisquer suposições sobre o tamanho de seu mapa. Devido a isso, seguindo o estilo padrão, precisamos incluir pelo menos uma declaração de estilo para dar ao mapa um tamanho.

<link rel="stylesheet" href="ol3/ol.css" type="text/css">
<style>
  #map {
    height: 256px;
    width: 512px;
  }
</style>

Neste caso, estamos especificando a largura (512px) e a altura (256px). As declarações de estilo estão incluídas no elemento <head> do nosso documento. Na maioria dos casos, as declarações de estilo relacionados com o mapa será uma parte de um arquivo de estilos (CSS).

3. Inicialização

O próximo passo na geração de seu mapa é incluir o código de inicialização. No nosso caso, nós incluímos um elemento <script> na parte inferior do nosso documento <body> para fazer o trabalho, veja:

<script>
  var map = new ol.Map({
    target: 'map',
    layers: [
      new ol.layer.Tile({
        source: new ol.source.TileWMS({
          url: 'http://maps.opengeo.org/geowebcache/service/wms',
          params: {LAYERS: 'bluemarble', VERSION: '1.1.1'}
        })
      })
    ],
    view: new ol.View({
      projection: 'EPSG:4326',
      center: [0, 0],
      zoom: 0,
      maxResolution: 0.703125
    })
  });
</script>

Devemos ressaltar que a ordem dos passos é importante. Antes do nosso script ser executado, a biblioteca OpenLayers deve ser carregada. No nosso exemplo, a biblioteca OpenLayers é carregada no elemento da seguinte forma: <script src = “OL3 / ol.js”> </ script>.

Da mesma forma, o nosso código de inicialização do mapa (acima) não pode ser executado até que o elemento map, seja lido. Ao incluir o código de inicialização no final do documento <body>, garantimos que a biblioteca é carregada antes da chamada do elemento map, fazendo que com que esteja pronta antes de gerar o nosso mapa.

Vamos olhar com detalhes o que o script de inicialização do mapa está fazendo. Nosso script cria um nova instância do objeto ol.Map com algumas opções de configuração: target: ‘map’

Neste caso, passamos o valor “map” como alvo para o construtor do mapa.

Abaixo vemos a configuração das camadas, que cria uma camada a ser exibida no nosso mapa:

layers: [
  new ol.layer.Tile({
    source: new ol.source.TileWMS({
      url: 'http://maps.opengeo.org/geowebcache/service/wms',
      params: {LAYERS: 'bluemarble', VERSION: '1.1.1'}
    })
  })
],

Não se preocupe com a sintaxe aqui, pois a criação de camadas será abordada em outro módulo. O importante é entender que o nosso mapa é um conjunto de camadas, e para ver um mapa, precisamos incluir pelo menos uma camada.

O passo final é a definição do modo de exibição. Nós precisamos especificar uma projeção, um ponto central e um nível de zoom. Nós também iremos especificar um valor para o parâmetro maxResolution para nos certificarmos de que não serão enviadas solicitações fora do nosso Bounding Box, que o GeoWebCache não possa manipular.

view: new ol.View({
   projection: 'EPSG:4326',
   center: [0, 0],
   zoom: 0,
   maxResolution: 0.703125
})

Você concluiu com sucesso o seu primeiro mapa! No próximo post falaremos com mais detalhes sobre camadas.

by Fernando Quadro at May 18, 2016 10:54 AM

gvSIG Team

TIC: Cero despedidos por meter la pata con las grandes

Una figura relevante en muchas organizaciones con una fuerte componente TIC, tanto públicas como privadas, era la del responsable de echarse en brazos de grandes contratos de soporte del tipo “GoldenSelectConfort” y mil maravillas más que auguraban un maravilloso futuro de vino y rosas.

Esto ocurría sobre todo en tiempos de una figurada bonanza económica. Sin embargo, ¿Qué pasó cuando esta desapareció? ¿Qué ocurrió con los contratos que les ataban a tal gestor de Base de Datos, Solución de Gestión empresarial, transversal de Geomática, etc?

Te encontrabas con contratos millonarios, condiciones de soporte y compromiso de mantenimiento en el tiempo leoninas, proyectos fiasco, nula sostenibilidad. En definitiva, atados de pies y manos, y es que, resulta que eso de la Soberanía en los Sectores Estratégicos, como que no nos lo tomamos muy en serio.

Dibujaban muy bonitos esos días de Vino y Rosas, pero hemos de recordar que sucede en la maravillosa película de Jack Lemmon y Lee Remick dirigida por Blake Edwards. [1] Aquí una de sus memorables escenas. [2]

El autodestructivo alcoholismo se convierte en el caso de que estamos hablando en insostenilibidad, recortes, expedientes de regulación de empleo o cierres.

Sucede que por mi desmemoria no me viene a la mente ningún de estos laureados responsables que haya sido cesado por meter la pata en dichas ruinosas, faraónicas e insostenibles apuestas. Pon un Golden o Platinum acompañado de una de estas grandes firmas ¿Y quién te va a culpar de hacer lo que te indica el mercado y todas sus consultoras y libros blancos?

Ahora imaginen a cualquiera de estos gerentes tomando una decisión en alguna de sus áreas donde la apuesta sea una Solución Libre. Imaginen que los resultados no sean los perfectos. Empiecen a visualizar como le aprieta el cuello de la camisa, como empieza a sudar, como empieza a temer que le peligra el puesto por no haber seguido lo que todos. Pon un Golden en tu vida y firma, que aunque resulte un fiasco, ¿Quién te va culpar de hacer lo que todos tus colegas?

Quizá ese sea uno de los problemas. Las cero responsabilidades exigidas a los gerentes TIC cuando los fiascos vienen avalados por el respaldo de las grandes firmas privativas; pero el temor a equivocarse lo más mínimo cuando la apuesta es por las soluciones libres.

Quizá un cambio cultural sea necesario antes de consolidar realidades de Interoperabilidad y Soberanía Tecnológica.

Quizá los representantes públicos, sobre todo aquellos que hablan del cambio de modelo productivo, deberían ser consecuentes y favorecer dicha transformación cultural.

@GabrielCarrionR

[1] https://es.wikipedia.org/wiki/D%C3%ADas_de_vino_y_rosas

[2] https://www.youtube.com/watch?v=Yip1jxoIEyA


Filed under: gvSIG Desktop, Languages, opinion, spanish

by Gabi at May 18, 2016 07:19 AM

May 17, 2016

gvSIG Team

gvSIG Festival: webinars en español

adictos-redes-sociales

Como ya sabréis la semana del 23 al 27 de mayo se celebra el 1er gvSIG Festival. En este post quiero hacer un breve repaso a las ponencias que se realizarán en español. El programa completo, con horarios y ponencias en todos los idiomas, lo tenéis en la web del evento: http://gvsig.com/festival

Para inscribiros en un webinar en concreto podéis pinchar sobre su título, en este mismo post o hacerlo desde la web del evento.

El lunes tendremos la primera ponencia en español, combinando las disciplinas de la geomática y la psiquiatría, Utilización de gvSIG en estudios sobre desastres naturales y salud mental por Manuel Esteban Lucas Borja de la Universidad de Castilla-La Mancha.

El martes 24 de mayo tendremos tres ponencias. Desde Argentina, Mario Fèvre de Trecc nos presentará la Utilización del software gvSIG para el análisis acústico urbano: Sistema de Autopistas de La Ciudad Autónoma de Buenos Aires, José Vicente Higón de Scolab, una de las empresas de la Asociación gvSIG nos presentará la alternativa libre a ArcXXX Online gvSIG Online: la solución para Infraestructuras de Datos Espaciales con software libre y finalizaremos con la ponencia de Roxana Sánchez, del Parque Tecnológico Itaipú-Paraguay, centrada en el campo de la hidrología Delimitación de Microcuencas hidrográficas con gvSIG.

El tercer día del gvSIG Festival, Ricardo Rueda de Disid, otra de las empresas de la Asociación gvSIG, nos hablará sobre la única aplicación libre existente para gestión de carreteras y la única cuyo modelo de datos de ejes carretera cumple con la normativa INSPIRE de obligado cumplimiento en 2017 gvSIG Roads: gestión de la conservación e inventario de carreteras con software libre. Desde México, Juan José del Toro de Geoalternativa y Responsable de Operaciones México y Caribe de la Asociación gvSIG, nos mostrará los resultados de la implantación de gvSIG Online en SECTUR gvSIG Online: IDE para la Secretaría de Turismo de México. Marino Carhuapoma de IdeasG, empresa colaboradora de la Asociación gvSIG en Perú nos presentará uno de los productos que han desarrollado y que cada vez adoptan más municipios en Perú Sistema de Información Geografico Para Catrastro Municipal con Software Libre.

El jueves comenzaremos con una ponencia sobre las posibilidades de Geoprocesamiento con gvSIG impartida por Gustavo Agüero, de la empresa Consultores AA de Costa Rica. Si estáis interesados en conocer las novedades de la próxima versión de gvSIG no os podéis perder la presentación Novedades gvSIG 2.3: ¿En qué estamos trabajando?. Para finalizar, Sergio Acosta del Ministerio de Topografía y Obras Públicas de Uruguay nos hablará del Programa de Caminería Rural en Uruguay con gvSIG.

Llegamos al viernes 27 de mayo, último día de jornadas, con la ponencia impartida por Valeria Sanguineti de ONG2.0 ONG2.0 formación en gvSIG e ICT4D para proyectos de cooperación internacional.

Un buen número de webinars en castellano, a cual más interesante. Nadie se lo va a querer perder…


Filed under: community, events, spanish Tagged: Festival, webinars

by Alvaro at May 17, 2016 04:01 PM

GeoSpatial Camptocamp

GeoMapFish 2.0 is out!

GeoMapFish makes a big leap forward with the 2.x versions. The 2.0 is now the first step towards the new cutting-edge interface!

Cet article GeoMapFish 2.0 is out! est apparu en premier sur Camptocamp.

by Elisabeth Leu at May 17, 2016 01:45 PM

Fernando Quadro

Vídeo aulas de gvSIG

Se você está querendo aprender sobre gvSIG, gostaria de indicar uma série completa de vídeos sobre o assunto.

Estou falando do canal do YouTube “EdugvSIG”, criado por Jesús Palomar Vázquez e Merche Navarro do Departamento de Engenharia Cartográfica, Geodésia e Fotogrametria da Universidade Politécnica de Valência (UPV).

O objetivo do canal é apresentar, passo a passo, através de exercícios práticos as principais funcionalidades do gvSIG. Os vídeos estão em espanhol, porém possuem legendas tanto em espanhol como em inglês.

Além dos vídeos também são disponibilizados os dados utilizados para que você possa realizar os exercícios propostos.

Veja a lista de vídeos disponíveis:

VT01. Adicione uma camada
VT02. Adicionar um serviço WMS
VT03. Usando o Web Map Context
VT04. Adicionar um serviço WFS
VT05. Adicionar um serviço WCS
VT06. Adicionar um serviço WMTS
VT07. Adicionar um serviço OSM (OpenStreetMap)
VT08. Adicionar uma camada de eventos
VT09. Vista de navegação
VT10. Escalas
VT11. Simbologia de camadas
VT12. Bibliotecas de símbolos
VT13. Simbologia avançada
VT14. Rótulos em camadas
VT15. Criar hiperlinks
VT16. Ferramentas de consulta gráfica
VT17. Ferramentas de seleção
VT18. Ferramentas de edição gráfica
VT19. Geoprocessamento
VT20. Georreferenciamento
VT21. Trabalhar com camadas raster (I)
VT22. Trabalhar com camadas raster (II)
VT23. Ferramentas de Tabela (I). Associação
VT24. Ferramentas de Tabela (II). Vinculação
VT25. Consulta de atributo mediante filtro
VT26. Calculadora
VT27. Criando o documento map
VT28. Importando coordenadas do Excel para o gvSIG
VT29. Gerenciador de complementos
VT30. Scripting

Bons estudos!

Fonte: Blog do gvSIG

by Fernando Quadro at May 17, 2016 10:15 AM

May 16, 2016

OSGeo News

Free registration for gvSIG festival is now open

by jsanz at May 16, 2016 04:44 PM

OSGeo News

SIGSPATIAL 2016 - Call For Papers

by jsanz at May 16, 2016 04:32 PM

Paul Ramsey

Open Source & the Changing of the Guard

Back when I first discovered open source software, at the dawn of my computing and consulting career, I was pretty sure it was some kind of rainbow magic, better than sliced bread. Once other folks found this stuff, it was going to catch on like wildfire, and why not?

  • It was way more flexible to build systems with than proprietary black boxes.
  • The community around it was helpful and knowledgable, further speeding development.
  • The price of deployment was (obviously) unbeatable, and just as importantly, the lack of legal restrictions neatly avoided convoluted “licensing oriented architectures”.

That was over 15 years ago, so clearly I was really, really wrong, at least from the point of view of governments and large corporate enterprises (in the start-up space, the revolution happened over 10 years ago, and nobody is looking back). Over time, I began to reformulate my thesis:

Open Source & the Changing of the Guard

  • Open source is a toolkit best appreciated by tool users, and,
  • Managers have generally moved beyond direct tool using and use proxy data for decision making, but
  • Today’s young staffer is tomorrow’s manager, so,
  • Eventually the sands of time will deliver an open source literate population of managers into decision making authority.

This morning, I saw this tweet, which is fun:

That’s one good data point, hooray!

But in all honesty, I don’t feel like there is necessarily an open source wave cresting, certainly not in the big organization I’m nearest to, the BC government.

  • Yes, there are some young (and not so young) advocates, who have increased their decision making power over time. But, there is a larger population of similarly aged folks who, from an innovation and risk-taking point of view, might as well be from the last generation. Their ascendance will assure continuity: the only change will be from expensive proprietary on-site software to expensive proprietary SaaS solutions.
  • Yes, the overall IT environment is more accepting of open source in general (there is even Linux being run in government!! ooo!). But, in general there is a mismatch in sales fire power between solutions that have high-priced outside sales people promoting them and those that have to be dragged in by staff. Managers (even young ones) have moved beyond direct tool use, and are sitting ducks for a good sales presentation.

So it still falls to in-house innovation centers like GDS or the US Digital Service to try to demonstrate, mandate, and teach a new way of doing things to the old guard of IT.

GDS team

It’s not clear they are succeeding, even on their own terms. More on that another day.

Do you have links to interesting experiments in doing enterprise IT in a new way? Drop them in the comments, I think it’s time to revisit government enterprise IT and what kind of program can chip away at the culture that has accreted over the last generation.

There’s some interesting experiments out there, let’s hear about them.

May 16, 2016 11:00 AM

Fernando Quadro

1º Festival gvSIG

Já estão abertas as inscrições gratuitas para o 1º Festival gvSIG, uma conferência virtual com mais de 25 webinars em espanhol, francês, inglês, Português, russo e turco.

Nesta primeira edição diferentes experiências sobre diferentes produtos gvSIG serão apresentados, e como eles podem ser aplicados a temas variados como saúde, proteção civil, cooperação, estudos históricos, gestão rodoviária, análise acústica, hidrologia, turismo, etc… Em português teremos as seguintes apresentações:

– Utilização do gvSIG na Defesa Civil (Gilberto Cugler)
– O Futuro no Passado: o uso das geotecnologias aplicadas às pesquisas históricas (Maíra Rosin)

A plataforma de Webinar que será utilizada permite conexões de qualquer sistema operacional, e se você não poder assitir as apresentações ao vivo poderá vê-los depois, pois os vídeos serão publicados no canal do Youtube do projeto gvSIG.

Home 1st gvSIG Festival

O registro a cada um dos webinars pode ser feito a partir do site do evento. Te esperamos lá!

by Fernando Quadro at May 16, 2016 10:58 AM

gvSIG Team

Вебинар «Введение в gvSIG» на 1-м фестивале gvSIG

С 23 по 27 мая Ассоциация gvSIG проводит 1-й фестиваль gvSIG, в рамках которого пройдет целая серия онлайновых мероприятий.

festival portada v03Основу программы составят вебинары, список которых представлен на странице фестиваля http://www.gvsig.com/en/events/gvsig-festival/1st-gvsig-festival/program

Российское сообщество gvSIG также примет участие в фестивале с вебинаром  «Введение в gvSIG», который состоится 24 мая (вторник) в 20-00 МСК.

Вебинар будет посвящен новостям проекта gvSIG, новым продуктам Ассоциации gvSIG, а также новым возможностям и изменениям в gvSIG Desktop. Вебинар продлится около 40-60 минут и будет проводится на русском языке.

Проведет вебинар Александр Юрьевич Карандеев, старший преподаватель кафедры географии и экологии, Липецкий государственный педагогический университет. Также в подготовке вебинара принимал участие Сергей Анатольевич Михайлов, начальник отдела ГИС, ООО «Геоинфоцентр».

Для участия в вебинаре можно зарегистрироваться по прямой ссылка на регистрацию в вебинаре http://app.webinarjam.net/register/24718/ed6eb0efb2

Задавать вопросы и высказывать пожелания можно в комментариях в блоге gvSIG или в сообществе в сети «ВКонтакте» https://vk.com/club27058823


Filed under: community, events, Russian

by Mario at May 16, 2016 10:54 AM

May 15, 2016

Tamas Szekeres

OGR MSSQL bulk insert support added in GDAL 2.1

With the release of GDAL 2.1.0 the new bulk insert support has been added to the OGR MSSQL Spatial driver. Using the bulk insert option the upload is approx. 20 times faster comparing to the earlier driver versions, which is especially useful when uploading large data tables to MSSQL server.

The bulk insert option involved the need to implement the write support for the native SqlGeometry/SqlGeography serialization formats, which in turn eliminates the need of the server side geometry conversions from WKB and WKT causing large amount of memory pressure at the server and may cause issues like this one.

The implemented bulk insert support requires the SQL Server Native Client 10+ driver to be installed on the system. This is installed along with a SQL server setup or available from a separate package provided by Microsoft. This requirement is a bit unpleasant for the binary distribution providers, because the driver should link against the corresponding sqlncli dll. Therefore we added support to build the MSSQL spatial driver as a plugin dll (ogr_MSSQLSpatial.dll). The gdal-core msi installers (development, daily) at GISInternals have been modified to include the bulk insert enabled MSSQL driver as an optional component (not installed by default). If you enable this component, make sure that the SQL Server Native Client 11 driver is also installed on your the system, otherwise ogr2ogr will likely fail to start.



By installing this driver, the bulk insert option is enabled by default when using MSSQLSpatial as an ogr2ogr target database, however we can disable bulk insert by using the MSSQLSPATIAL_USE_BCP=FALSE config option which turns the upload to a set of "INSERT INTO" operations as usual, but that option continues to use the native geometry/geography serialization formats. We could also select the earlier WKT/WKB upload by using the UPLOAD_GEOM_FORMAT layer creation option. For more information about the config and layer creation options supported by the driver please refer to the MSSQL Spatial driver information page.

by Tamas Szekeres (noreply@blogger.com) at May 15, 2016 09:56 PM

Jackie Ng

MapGuide Open Source 3.1 pre-flight check part 2

We're close. Soooooooo close to a 3.1 beta release of MapGuide Open Source. But there's one small snag before I am ready to start uploading binaries.

An issue was caught in smoke testing where the WFS/WMS providers seem to destabilize the MapGuide installation on CentOS when listing available FDO providers...

... Which sounds very similar to a problem we had with Ubuntu builds of FDO until we made the change to build FDO against system-installed versions of OpenSSL/libCURL.

So I'm going to give that a try (building against system OpenSSL/libCURL) with the CentOS builds again, which should hopefully pass my smoke tests to give the all clear to upload the long awaited binaries for MapGuide Open Source 3.1

by Jackie Ng (noreply@blogger.com) at May 15, 2016 03:17 PM

May 13, 2016

BostonGIS

PostgreSQL 9.6beta1 out, help test PostGIS 2.3 windows binaries available

PostgreSQL 9.6beta1 came out yesterday. It is the first version of PostgreSQL that will have parallel query support and PostGIS 2.3 will be the first PostGIS to support parallelism in queries. Although work is not yet committed in PostGIS repo to support this, you can expect to see this soon (currently here - https://github.com/pramsey/postgis/tree/parallel , waiting for someone to you know who you are do something about it.)

UPDATE: Some parallel support has been committed. More to come. pgRouting 9.6 issues resolved, many thanks to Vicky Vergara. Now pgRouting 2.2.3 windows binaries available for PostgreSQL 9.6beta1.

Because of the newness of the parallelization feature, there are some caveats. As with all big things, we expect there to be a lot of bugs, and the more eyeballs on those and real workloads we've got hammering on them, the sweeter the PostGIS 2.3.0 and PostgreSQL 9.6 release will be.

Binaries for Windows users

For windows users, winnie the PostGIS windows buildbot is now building PostGIS for 9.6. Get PostgreSQL 9.6 binaries and installers from PostgreSQL 9.6beta1 for windows.

Once you have that, just copy the contents of the respective PostGIS 2.3 9.6 binaries listed here - http://postgis.net/windows_downloads/ into your install folder.

In the extras folder, you'll also find ogr_fdw foreign data wrapper latest development version which we covered extensively in FOSS4GNA2016 PostGIS Spatial Tricks. Talk also covered some new PostGIS 2.3.0 stuff.

We don't have pgRouting binaries available yet. pgRouting team is working out some compatibility issues with PostgreSQL 9.6. Once those are resolved, we will publish pgRouting binaries as well.

by Regina Obe (nospam@example.com) at May 13, 2016 09:02 PM

Fernando Quadro

Criando um mapa de calor no GeoServer com WPS (Parte 3)

Neste post iremos finalizar nosso artigo construindo uma aplicação para apresentar o nosso mapa de calor. Para isso você vai precisar para construir o aplicativo em algum lugar que seja acessível por um navegador web.

O mapa simples que podemos desenvolver usa apenas uma página com OpenLayers que mostra um mapa base e nossa camada WMS (geonames). Para isso você vai precisar de dois arquivos, basic-openlayers.html e basic-openlayers.js. No documento HTML coloque o seguinte:

<html>
  <head>
    <title>Basic Word Map</title>
    <script src="http://www.openlayers.org/api/2.12/OpenLayers.js"></script>
    <script src="basic-openlayers.js"></script>
  </head>
  <body onLoad="initMap()">
  <div id="map"></div>
  </body>
</html>
<html>
  <head>
    <title>Basic Word Map</title>
    <script src="http://www.openlayers.org/api/2.12/OpenLayers.js"></script>
    <script src="basic-openlayers.js"></script>
  </head>
  <body onLoad="initMap()">
  <div id="map"></div>
  </body>
</html>

O documento HTML apenas faz referência ao nosso arquivo javascript (OpenLayers) do aplicativo, e estabelece uma chamada “map” para realizar o vínculo com o OpenLayers. No documento JavaScript, coloque o seguinte código:

function initMap() {
  // Create the map
  var map = new OpenLayers.Map("map");
  // Create a WMS layer, with a base layer (states) and names layer (geonames)
  var wms = new OpenLayers.Layer.WMS("GeoServer WMS",
    "http://localhost:8080/geoserver/wms",
    {
      layers: "usa:states,opengeo:geonames"
    });
  // Set the word parameter for the geonames layer
  var myWord = "Navajo";
  wms.mergeNewParams({viewparams: "word:" + myWord});
  // Add the layer to the map and center the map on the USA
  map.addLayer(wms);
  map.setCenter(new OpenLayers.LonLat(-100, 38), 5);
}

O arquivo Javascript usa como base a camada “states” do GeoServer para servir como contexto para a camada “geonames”.

ol-navajo

Agora altere o valor da váriavel “myWord” e recarregue a página para ver os diferentes resultados no mapa.

Isto é muito interessante, mas seria ainda melhor se pudéssemos digitar uma palavra e imediatamente ver a mudança do mapa, sem precisar recarregá-la. Queremos também visualizar os resultados através de um mapa de calor, não apenas um mapa de pontos!

Para construir nossa aplicação final, usaremos o ExtJS, com a biblioteca GeoExt. Assim como acontece com os exemplos do OpenLayers, a página HTML do ExtJS é muito simples, pois é apenas um lugar para declarar as referências das bibliotecas que serão utilizadas.

<html>
  <head>
    <title>OpenGeo Word Map</title>
    <!-- ExtJS Scripts and Styles -->
    <script type="text/javascript" src="http://cdn.sencha.com/ext/gpl/3.4.1.1/adapter/ext/ext-base.js"></script>
    <script type="text/javascript" src="http://cdn.sencha.com/ext/gpl/3.4.1.1/ext-all.js"></script>
    <link rel="stylesheet" type="text/css" href="http://cdn.sencha.com/ext/gpl/3.4.1.1/resources/css/ext-all.css" />
    <link rel="stylesheet" type="text/css" href="http://cdn.sencha.com/ext/gpl/3.4.1.1/examples/shared/examples.css" />
    <!-- OpenLayers Script -->
    <script src="http://www.openlayers.org/api/2.12/OpenLayers.js"></script>
    <!-- GeoExt Script -->
    <script type="text/javascript" src="http://api.geoext.org/1.1/script/GeoExt.js"></script>
    <!-- Our Application -->
    <script type="text/javascript" src="wordmap-simple.js"></script>
  </head>
  <body>
  </body>
</html>

Você pode perceber que no arquivo HTML acima, são declaradas as bibliotecas ExtJS, GeoExt, OpenLayers e também o documento “wordmap-simple.js” que nada mais é que a nossa aplicação. Veja:

// Use this word on startup
var startWord = "Ocean";
// Base map
var osmLayer = new OpenLayers.Layer.OSM();
// Point map
var wmsLayer = new OpenLayers.Layer.WMS("WMS", "http://localhost:8080/geoserver/wms", {
  format: "image/png",
  transparent: true,
  layers: "opengeo:geonames",
  styles: "point"
}, {
  opacity: 0.6,
  singleTile: true,
});
// Start with map of startWord
wmsLayer.mergeNewParams({viewparams: "word:"+startWord});

Tal como acontece com o nosso exemplo simples, começamos definindo nossas camadas: o OpenStreetMap como mapa base; e a nossa camada WMS. Temos algumas opções extras na definição da camada WMS no OpenLayers, pois a definimos para ter um fundo transparente, e uma opacidade parcial, isso para sobrepor o mapa base.

Nós também definimos uma variável com nome de “startWord”, que irá iniciar o mapeamento da aplicação ao setá-la no parâmetro da URL.

Agora as coisas começam a ficam um pouco mais complicadas:

// Map with projection into (required when mixing base map with WMS)
olMap = new OpenLayers.Map({
  projection: "EPSG:900913",
  center: [-10764594.0, 4523072.0],
  units: "m",
  layers: [wmsLayer, osmLayer],
  zoom: 4
});

Como estamos misturando um mapa WMS e um mapa do OSM, nós precisamos:

1. Garantir que a camada WMS declare a projeção que está usando, que deve ser a Mercator para coincidir com o mapa base (OSM); e,
2. Garantir que o ponto central está convertido em Mercator antes de ser iniciado o mapa.

Agora que o mapa está configurado, só precisamos reunir os componentes ExtJS em uma aplicação:

// Text field component. On 'enter' update the WMS URL
var textField = new Ext.form.TextField({
  value: startWord,
  listeners: {
    specialkey: function(fld, e) {
      // Only update the map when the user hits 'enter'
      if (e.getKey() == e.ENTER) {
        wmsLayer.mergeNewParams({viewparams: "word:"+fld.getValue()});
      }
    }
  }
});

Para introduzir novas palavras precisamos de um campo de texto na tela. Quando o usuário clicar, ele deve pegar o evento e atualizar a camada (WMS).

// Map panel, with text field embedded in top toolbar
var mapPanel = new GeoExt.MapPanel({
  title: "OpenGeo Geonames Heat Map",
  tbar: ["Enter a word to map:", textField],
  map: olMap
});

Agora iremos adicionar um painel com o campo de texto embutido na barra de ferramentas no topo da tela:

// Viewport wraps map panel in full-screen handler
var viewPort = new Ext.Viewport({
  layout: "fit",
  items: [mapPanel]
});
// Start the app!
Ext.onReady(function () {
  viewPort.show();
});

Para finalizamos nossa aplicação vamos ver como ficou o nosso código em um único bloco:

// Use this word on startup
var startWord = "ocean";
// Base map
var osmLayer = new OpenLayers.Layer.OSM();
// Heat map + point map
var wmsLayer = new OpenLayers.Layer.WMS("WMS",
  // Uncomment below to use your local server
  // "http://localhost:8080/geoserver/wms",
  "http://apps.opengeo.org/geoserver/wms",
  {
    format: "image/png8",
    transparent: true,
    layers: "opengeo:geonames,opengeo:geonames",
    styles: "point,heatmap"
  }, {
    opacity: 0.6,
    singleTile: true,
  });
// Start with map of startWord
wmsLayer.mergeNewParams({viewparams: "word:"+startWord});
// Map with projection into (required when mixing base map with WMS)
olMap = new OpenLayers.Map({
  projection: "EPSG:900913",
  units: "m",
  layers: [wmsLayer, osmLayer],
  center: [-10764594.0, 4523072.0],
  zoom: 4
});
// Take in user input, fire an event when complete
var textField = new Ext.form.TextField({
  value: startWord,
  listeners: {
    specialkey: function(field, e) {
      // Only update the word map when user hits 'enter'
      if (e.getKey() == e.ENTER) {
        wmsLayer.mergeNewParams({viewparams: "word:"+field.getValue()});
      }
    }
  }
});
// Map panel, with text field embedded in top toolbar
var mapPanel = new GeoExt.MapPanel({
  title: "OpenGeo Geonames Heat Map",
  tbar: ["Enter a word to map:", textField],
  map: olMap
});
// Viewport wraps map panel in full-screen handler
var viewPort = new Ext.Viewport({
  layout: "fit",
  items: [mapPanel]
});
// Start the app!
Ext.onReady(function () {
  viewPort.show();
});

Veja agora como ficou o nosso mapa:

ext-ocean

Assim, ficou uma aplicação muito bonita, mas foi prometido um mapa de calor, e até agora, este é apenas um mapa de pontos! Nós precisamos adicionar um estilo de mapa de calor:

1. Clique em “Style” na barra de navegação do GeoServer
2. Selecione “Add new style”
3. Adicione o nome do estilo como “heatmap”
4. Cole o código abaixo na área de código

<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
   xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
   xmlns="http://www.opengis.net/sld"
   xmlns:ogc="http://www.opengis.net/ogc"
   xmlns:xlink="http://www.w3.org/1999/xlink"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <NamedLayer>
    <Name>Heatmap</Name>
    <UserStyle>
      <Title>Heatmap</Title>
      <Abstract>A heatmap surface</Abstract>
      <FeatureTypeStyle>
        <Transformation>
         <ogc:Function name="gs:Heatmap">
           <ogc:Function name="parameter">
             <ogc:Literal>data</ogc:Literal>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>radiusPixels</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>radius</ogc:Literal>
               <ogc:Literal>100</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>pixelsPerCell</ogc:Literal>
             <ogc:Literal>10</ogc:Literal>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>outputBBOX</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>wms_bbox</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>outputWidth</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>wms_width</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
           <ogc:Function name="parameter">
             <ogc:Literal>outputHeight</ogc:Literal>
             <ogc:Function name="env">
               <ogc:Literal>wms_height</ogc:Literal>
             </ogc:Function>
           </ogc:Function>
         </ogc:Function>
        </Transformation>
        <Rule>
          <RasterSymbolizer>
          <!-- specify geometry attribute to pass validation -->
            <Geometry>
              <ogc:PropertyName>geom</ogc:PropertyName>
            </Geometry>
            <Opacity>0.6</Opacity>
            <ColorMap type="ramp" >
              <ColorMapEntry color="#FFFFFF" quantity="0"    label="nodata" opacity="0" />
              <ColorMapEntry color="#FFFFFF" quantity="0.02" label="nodata" opacity="0" />
              <ColorMapEntry color="#4444FF" quantity=".1"   label="nodata" />
              <ColorMapEntry color="#FF0000" quantity=".5"   label="values" />
              <ColorMapEntry color="#FFFF00" quantity="1.0"  label="values" />
            </ColorMap>
          </RasterSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

Em seguida, clique no botão “Salvar”, e está pronto o nosso estilo heatmap! (Os parâmetros do estilo são explicados aqui).

Ao invocar a função gs:Heatmap no estilo, o GeoServer está utilizando o método heatmap disponível no serviço WPS (Web Process Service), que realiza o processamento e disponibiliza a camada através do WMS.

Para ativar o mapa de calor em nossa aplicação, nós só precisamos especificar esse estilo em nossa camada WMS. Então vamos fazer esta mudança na aplicação:

// Heat map + point map
var wmsLayer = new OpenLayers.Layer.WMS("WMS", "http://localhost:8080/geoserver/wms", {
  format: "image/png",
  transparent: true,
  layers: "opengeo:geonames,opengeo:geonames",
  styles: "point,heatmap"
}, {
  opacity: 0.6,
  singleTile: true,
});

Note que, em vez de substituir o nosso estilo de ponto, estamos adicionando um estilo heatmap a mesma camada (opengeo:GeoNames) uma segunda vez. Isso nos permite ver os pontos originais, bem como o mapa de calor.

ext-ocean-heat

Este tutorial é uma tradução e adaptação livre do artigo “Building a GeoNames Heat Map” publicado no site da Boundless.

Fonte: Boundless

by Fernando Quadro at May 13, 2016 10:06 AM

May 12, 2016

Fernando Quadro

Criando um mapa de calor no GeoServer com WPS (Parte 2)

No último post baixamos e carregamos os dados para o PostgreSQL, hoje iremos dar sequencia no artigo, configurando a pesquisa Full-text.

A fim de fazer um mapa eficiente, temos que encontrar rapidamente os registros que têm as palavras que estamos interessados. Felizmente, o PostgreSQL fornece a facilidade de uma pesquisa de texto completo (full-text search) para a procura rápida e eficaz dos campos texto. Com ela é possível combinar automaticamente palavras diferentes-mas-semelhante (como “árvore” e “árvores”) e encontrar palavras particulares em grandes blocos de texto.

Nossos dados não são particularmente pesados ​​(a maioria dos nomes de lugares na nossa base de dados consistem em apenas duas palavras, apenas alguns têm três ou mais), mas full-text search ainda será mais eficiente do que uma simples correspondência de padrão, porque ele pode fazer uso do índice full-text.

O full-text faz uso de tipos do PostgreSQL especializadas: tsvector e tsquery.

Ele depende da criação de um índice no tsvector representando um (ou vários) campo de texto. Podemos ver o efeito do índice, executando uma consulta de teste antes e depois de construí-lo.

-- Watch the timing of this query
SELECT Count(*) FROM geonames WHERE to_tsvector('english', name) @@ to_tsquery('english', 'oak');
-- Create the full-text index
CREATE INDEX geonames_fulltext_idx ON geonames USING GIN (to_tsvector('english', name));
-- Again, watch the timing of this query
SELECT Count(*) FROM geonames WHERE to_tsvector('english', name) @@ to_tsquery('english', 'oak');

Quando o nosso aplicativo envia de volta o texto a partir da interface web, o texto pode conter espaços. A função to_tsquery () não gosta de espaços, ela espera que cada palavra na string de consulta devem ser separados por “&”, “AND”, “|” ou “OR”.

Para resolver este problema e retirar qualquer espaço à na palavra, vamos usar a função trim().

-- Example of space trimming
SELECT trim(' New York ');

A seguir, vamos tratar todo o texto com espaços como consultas. Por isso, queremos substituir os espaços entre as palavras com o símbolo “&”.

-- Example of trimming and turning spaces into &s
SELECT regexp_replace(trim(' New York '), E'\\s+', '&', 'g');

Finalmente, podemos colocar o resultado em um to_tsquery() executando na query atual.

-- Again, watch the timing of this query
SELECT Count(*)
FROM geonames
WHERE
to_tsvector('english', name) @@
to_tsquery('english', regexp_replace(trim(' New York '), E'\\s+', '&', 'g'));

Agora, imagine que “New York” poderia ser substituído por qualquer palavra que você quisesse, e que os resultados poderiam ser colocados em um mapa em tempo real! Isso é o que nós vamos configurar a seguir.

Para este artigo, vou considerar que o GeoServer está configurado com as camadas (em uma store PostGIS) e você criou um workspace com o nome “wordmap”.

Tendo dito isto, vamos configurar a nossa camada SQL View, indo na opção “Add Layer”.

newsqllayer1

Vamos setar o nome da nossa camada como geonames, com o SQL a seguir:

SELECT id, name, geom
FROM geonames
WHERE
to_tsvector('english', name) @@
to_tsquery('english', regexp_replace(trim('%word%'), E'\\s+', '&', 'g'))

Esta é basicamente a mesma consulta usada na seção anterior. Ela rapidamente encontra todos os registros em que o nome contém uma palavra particular. Neste caso, em vez de procurar por uma palavra particular, nós colocamos %word% como um parâmetro. Isso nos permite buscar qualquer palavra, apenas passando o parâmetro na URL.

Esta é basicamente a mesma consulta usada na seção anterior. Ela rapidamente encontra todos os registros em que o nome contém uma palavra particular. Neste caso, em vez de procurar por uma palavra particular, nós colocamos %word% como um parâmetro. Isso nos permite buscar qualquer palavra consulta do GeoServer, apenas passando o parâmetro na URL.

Depois de criar a SQL View, vá até a seção “SQL view parameters” e clique em “Guess parameters from SQL”:

– O parâmetro “word” deve estar preenchido na lista de parâmetros.
– Defina o valor padrão para “oceano”.
– Defina a “validação de expressão regular” para “^ [\ w \ d \ s] * $”
*Esta expressão permite apenas letras, números e espaços, incluindo os valores vazios.

sqlviewdetails1

Agora vá para seção “Attributes” e clique em “Refresh”. As colunas “id”, “nome” e “geom” devem ter sido inferidas a partir do SQL.

– Verifique se “id” está como identificador exclusivo.
– Defina o campo “geom” como ponto .
– Defina o “SRID” do “geom” para 4326 .

Agora salve as configurações do SQL View, e você será redirecionado diretamente para a página de configuração da camada.

Na tela de configuração de camada faça o seguinte:

Na aba “Data”:

– Declare SRS como EPSG:4326
– Gere os Bounding Boxes

Na aba “Tile Cache”:

– Na opção Tile Cache, desmarque a opção “Criar camada de cache para esta camada”
– Clique em “Salvar”

Agora você tem uma camada visível!

preview_ocean

Para testar se a camada funcionou, vamos realizar um teste:

http://localhost:8080/geoserver/wms/reflect?layers=wordmap:geonames&viewparams=word:navajo

Comparando com a imagem acima, é possível verificar que houve uma mudança, mas que é difícil de interpretar sem uma mapa base. No próximo post iremos construir um interface web para que possamos explorar esta camada dinâmica.

map-navajo

by Fernando Quadro at May 12, 2016 10:09 AM

gvSIG Team

Free registration for gvSIG festival is now open

festival portada v03Free registrarion period for the 1st gvSIG Festival is now open, a virtual conference about free geomatics with more than 25 presentations in English, Spanish, French, Portuguese, Turkish and Russian.

At this first edition there will be presentations about the different gvSIG products (Desktop, Online, Roads…) and how they can be applied in different themes like mental health, civil protection, cooperation, historic studies, roads management, acoustic analysis, hydrology, tourism, urban analysis…

The webinar platform allows to connect to the webinars from any operating system, and in case you can’t see some of the webinars, you will be able to watch them at the gvSIG Youtube channel later.

Registration for each webinar can be done from the gvSIG Festival website.

See you at the gvSIG Festival!


Filed under: community, english, events

by Mario at May 12, 2016 09:42 AM

gvSIG Team

Abiertas las inscripciones gratuitas para el gvSIG Festival

festival portada v03Ya están abiertas las inscripciones gratuitas para el 1er gvSIG Festival, unas jornadas virtuales sobre geomática libre con más de 25 webinars en Español, Francés, Inglés, Portugués, Ruso y Turco.

En esta primera edición se presentarán distintas experiencias sobre los diferentes productos gvSIG (Desktop, Online, Roads…), y cómo se pueden aplicar a temas tan variados como la salud mental, protección civil, cooperación, estudios históricos, gestión de carreteras, análisis acústico, hidrología, turismo, análisis urbanos…

La plataforma de webinar permite conectarse desde cualquier sistema operativo, y en caso de no poder seguirlos en directo podréis verlos a posteriori, ya que se publicarán en el canal de Youtube del proyecto.

La inscripción a cada uno de los webinars puede realizarse desde la web del evento.

¡Os esperamos!


Filed under: community, events, spanish

by Mario at May 12, 2016 09:37 AM

gvSIG Team

Contributing to gvSIG or bidirectional collaboration

gvSIG_solidarityIf thanks to gvSIG you have saved a good bit of money in licenses,

if thanks to gvSIG you have been able to use gvSIG in the projects of your organization,

if thanks to gvSIG you have been able to generate training services or any other type of services,

if thanks to gvSIG you have been able to develop your solutions,

if thanks to gvSIG your organization doesn’t have technological dependency from software providers,

if thanks to gvSIG you are a little bit free today,

maybe you should consider to contribute to the project.

Because gvSIG is a project for everybody,

but where everybody should do their bit to help.

Contributions:
https://contribution.gvsig-training.com/index.php?idioma=en_GB


Filed under: community, english, opinion

by Mario at May 12, 2016 07:15 AM

Cameron Shorter

Government asks nine open source developers to make baby in one month

We are approaching the 30 June, and the open source community is again being asked to perform our annual miracle of delivering twelve months worth of software services in two. Yes, after living on crumbs from July to March, we're swamped with calls for help in April, and expected to deliver between May and June.
This would be all well and good if we could stock pile product, but our product is open source software, which we give away for free!
Yes, we are in the business of selling free software. And governments love building their systems on our free software. They've even written policies and guidelines on how to use it. You see, using open source reduces vendor lock in, which reduces financial and technical risk. It facilitates international collaboration, rapid development and rapid innovation, which makes it an enabler for the government's innovation agenda. And it is based on openness and transparency, a core tenement of open government initiatives.
But if we give away our software for free, what do governments want to pay us for? It is our services, our time: installing, maintaining, extending and supporting the software, and training people in its use. It is a specialised skill which takes years to develop. It is not practical to quickly ramp up and down software teams for a two month peak load. As explained by Brook's Law on software engineering, you can't use nine women to create a baby in one month. Likewise, throwing fresh developers at a delayed software project typically makes the project even later.
So as government investigate open government opportunities, I urge understanding and tackling some of the hard, root causes hindering open source adoption, such as flattening spending spikes out across the year.

by Cameron Shorter (noreply@blogger.com) at May 12, 2016 12:43 AM