<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Geodan Research</title>
	<atom:link href="http://research.geodan.nl/feed/" rel="self" type="application/rss+xml" />
	<link>http://research.geodan.nl</link>
	<description>Showing the latest developments of the Research Lab of Geodan</description>
	<lastBuildDate>Tue, 29 Jan 2013 09:43:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Concurrent Online WebGIS</title>
		<link>http://research.geodan.nl/2013/01/concurrent-online-webgis/</link>
		<comments>http://research.geodan.nl/2013/01/concurrent-online-webgis/#comments</comments>
		<pubDate>Tue, 29 Jan 2013 09:42:36 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[crowdsourcing]]></category>
		<category><![CDATA[Microsoft Surface]]></category>
		<category><![CDATA[Advanced User Interaction]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mobile]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=570</guid>
		<description><![CDATA[Last year we were playing around with websockets and we: &#8220;&#8230;figured that an interesting use-case would to have a multi-user GIS where you can actually see where the other guy is, what he is seeing and together edit the map; &#8230; <a href="http://research.geodan.nl/2013/01/concurrent-online-webgis/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Last year we were playing around with websockets and we:</p>
<blockquote><p>&#8220;&#8230;figured that an interesting use-case would to have a multi-user GIS where you can actually see where the other guy is, what he is seeing and together edit the map; think google-docs for map editing.&#8221;</p></blockquote>
<p>We showed a first version of our application &#8216;cow&#8217; (concurrent online webgis). Since then we&#8217;ve been expanding the possibilities. An obvious one is being able to add, edit and delete objects on the map; symbols, lines and polygons. We created a version where you could mark where the nature fire started with a portable device, that location would be shared over websockets and the nature fire model would calculate the spread of the fire and return the resulting time-polygons to all connected devices.</p>
<p>Another important possibility we explored was connecting <a href="http://www.geodan.nl/phoenix">Phoenix</a> with websockets. This way you can expand Phoenix&#8217; &#8216;same place, same time&#8217; multi-user capabilities with &#8216;different place, same time&#8217; collaboration. This could mean that someone in the field can see the results of discussions around the table as they are drawn into Phoenix on his smartphone or that different groups of experts in different countries all can contribute on the same map using multiple instances of Phoenix. What you see below is a combination of Phoenix with cow&#8217;s webviewer on a Windows 8 all-in-one PC, an Android tablet and an Android smartphone.</p>
<p><a href="http://research.geodan.nl/2013/01/concurrent-online-webgis/"><em>Click here to view the embedded video.</em></a></p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2013/01/concurrent-online-webgis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Websocket based 3D viewer</title>
		<link>http://research.geodan.nl/2013/01/websocket-based-3d-viewer/</link>
		<comments>http://research.geodan.nl/2013/01/websocket-based-3d-viewer/#comments</comments>
		<pubDate>Mon, 28 Jan 2013 16:08:29 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[Microsoft Surface]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[Advanced User Interaction]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=567</guid>
		<description><![CDATA[Our French intern Nils created a nifty extension on Phoenix; the Google Earth connector. This allows an user to control a seemingly unlimited number of 3D views from within Phoenix. The user has a control showing the current position in &#8230; <a href="http://research.geodan.nl/2013/01/websocket-based-3d-viewer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Our French intern Nils created a nifty extension on <a href="http://www.geodan.nl/phoenix">Phoenix</a>; the Google Earth connector. This allows an user to control a seemingly unlimited number of 3D views from within Phoenix. The user has a control showing the current position in the 3D space and the point in the middle of the 3D view (the viewpoint). The user can change the 3D view by either dragging the viewpoint, the control or the map. You also can load 3D models in Phoenix and position them on the map.</p>
<p><a href="http://research.geodan.nl/2013/01/websocket-based-3d-viewer/"><em>Click here to view the embedded video.</em></a></p>
<p>If you connect more than one 3D view they will be connected to the initial control. However dragging a screen away from the control will create a new control, allowing for multiple views with independent control. This way multiple users can control their own 3D view, or an object or area can be shown from different angles in a in intuitive way.</p>
<p>The setup works with a websocket server which receives the coordinates, models, etc from Phoenix and passes them on to the connected webclients. The clients run the google earth plugin, which is controlled by some javascript and the commands received through the websocket connection. If a new client connects or an existing one disconnects the server informs Phoenix.</p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2013/01/websocket-based-3d-viewer/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De TR-bril van Geodan</title>
		<link>http://research.geodan.nl/2012/11/de-tr-bril-van-geodan/</link>
		<comments>http://research.geodan.nl/2012/11/de-tr-bril-van-geodan/#comments</comments>
		<pubDate>Thu, 29 Nov 2012 14:41:33 +0000</pubDate>
		<dc:creator>frans</dc:creator>
				<category><![CDATA[Augmented Reality]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=562</guid>
		<description><![CDATA[(as an exception to the rule, this post is Dutch, especially for the readers of our magazine, Geodata) Hieronder kunt u een filmpje zien dat een indruk geeft van de mogelijkheden van Toegevoegde Realiteit (TR) (in het Engels Augmented Reality &#8230; <a href="http://research.geodan.nl/2012/11/de-tr-bril-van-geodan/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>(as an exception to the rule, this post is Dutch, especially for the readers of our magazine, Geodata)</em></p>
<p>Hieronder kunt u een filmpje zien dat een indruk geeft van de mogelijkheden van Toegevoegde Realiteit (TR) (in het Engels Augmented Reality (AR)) als manier om op locatie, in het volledige blikveld, om te gaan met geo-informatie. Of klik <a href="http://youtu.be/6yKi51LE6ps">hier</a> om het filmpje met een hogere resolutie te zien.</p>
<p><a href="http://research.geodan.nl/2012/11/de-tr-bril-van-geodan/"><em>Click here to view the embedded video.</em></a></p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/11/de-tr-bril-van-geodan/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>AR eyewear shows underground infrastructure</title>
		<link>http://research.geodan.nl/2012/11/ar-eyewear-shows-underground-infrastructure/</link>
		<comments>http://research.geodan.nl/2012/11/ar-eyewear-shows-underground-infrastructure/#comments</comments>
		<pubDate>Wed, 28 Nov 2012 21:21:32 +0000</pubDate>
		<dc:creator>frans</dc:creator>
				<category><![CDATA[Augmented Reality]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=523</guid>
		<description><![CDATA[It has been a while since our last blog on the subject of Augmented Reality (AR), but now we can give a first look at the progress that has been made. The progress has been made largely thanks to Nils, our &#8230; <a href="http://research.geodan.nl/2012/11/ar-eyewear-shows-underground-infrastructure/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p align="LEFT">It has been a while since our l<a href="http://research.geodan.nl/2011/09/augmented-reality/">ast blog</a> on the subject of Augmented Reality (AR), but now we can give a first look at the progress that has been made. The progress has been made largely thanks to Nils, our intern from Toulouse. He is a true IT wizard!</p>
<p align="LEFT">Our video eyewear has been reworked into a platform that can make the unseen data cloud that surrounds us all visible. See the short video (below or <a href="http://www.youtube.com/watch?v=Igh6rwBuiU8">go to youtube for a higher resolution view</a>) a  to get an impression of what it is like to walk around wearing the future of spatial awareness.</p>
<p align="LEFT"><p><a href="http://research.geodan.nl/2012/11/ar-eyewear-shows-underground-infrastructure/"><em>Click here to view the embedded video.</em></a></p></p>
<p align="LEFT">You will probably notice that the system is experimental. Some paper and tape was needed to block direct sunlight from the eyes. Also, the system is not as portable as it could be. We use a laptop and a smartphone to make the system work. In theory, just one small but powerful portable device should be sufficient. And, as can be expected, there is a fair amount of calibration and tweaking to be done. Nevertheless, we think that the system in its present state already makes a fine proof-of-concept.</p>
<p align="LEFT">About that concept: we are aiming at a uniform approach towards interacting with all kinds of data. The basic function of the glasses is to display the world in front of the user without any augmentation. It does so with a stereoscopic effect, the same effect that you see when you watch a 3D movie. All visual extras can be switched on or off with voice commands. All you need to control the eyewear is a small microphone (In the video you see Nils wearing a headset with earphones, but that is just because we had no wearable microphone without earphones lying around. Although it is possible to imagine the system using audio to give information, we do not intend to make use of that option). Voice commands can not only be used to switch visual elements on or off, they can also be used to change the behaviour of a single element. For example, voice commands can be used to zoom in or zoom out on the inset map.</p>
<p align="LEFT">Some of the visual extras have their own designated space in the wearer&#8217;s view. Things like the current time, the compass direction and the index map will always be shown in the same place of the field of view. Other information can appear anywhere within the field of vision, because it has a real world location. For example, the user can switch on locations of aircraft in the sky, or points of interest in the immediate vicinity.</p>
<p align="LEFT">When spatial objects like buildings, aircraft or underground pipes are visualised, the wearer of the glasses can select an object by bringing it in the centre of the field of vision &#8211; by looking straight at it. That object will then be highlighted and extra information can be displayed. In other words, looking at an object is enough to identify it.</p>
<p align="LEFT">Sometimes it may be desirable to track a selected object and to keep the about the object information (which may change) visible. In that case it is not necessary to keep the object in the centre of vision. Again, a voice command like &#8216;lock focus&#8217; is sufficient. And of course an vocalized instruction like &#8216;unlock focus&#8217; deselects the object.</p>
<p align="LEFT">We hope to show you some more video demonstrations of our AR experiments soon. Meanwhile &#8211; as always &#8211; we like to know what you think, so don&#8217;t hesitate to comment!</p>
<p align="LEFT">
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/11/ar-eyewear-shows-underground-infrastructure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building a websocket based multi-user map</title>
		<link>http://research.geodan.nl/2012/11/building-a-websocket-based-multi-user-map/</link>
		<comments>http://research.geodan.nl/2012/11/building-a-websocket-based-multi-user-map/#comments</comments>
		<pubDate>Fri, 09 Nov 2012 17:12:08 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=550</guid>
		<description><![CDATA[Websockets are the next big thing for full-duplex communication on the web. At least that is what they are saying for a while now. Actual implementations are hard to find and documentation is a bit sparse. However, the idea of &#8230; <a href="http://research.geodan.nl/2012/11/building-a-websocket-based-multi-user-map/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="https://en.wikipedia.org/wiki/Websockets">Websockets </a>are the next big thing for full-duplex communication on the web. At least that is what they are saying for a while now. Actual implementations are hard to find and documentation is a bit sparse. However, the idea of full-duplex communication is intriguing, the most used example is a webchat client. No more polling, long-polling, keep-a-lives and other tricks. Since there are already an over abundance of webchat clients it is not really a strong use-case. We figured that an interesting use-case would to have a multi-user GIS where you can actually see where the other guy is, what he is seeing and together edit the map; think google-docs for map editing.</p>
<p>Websockets are really easy to start with, especially if you use node.js, on the client it is:</p>
<pre>var url = ws://host/
var ws = new WebSocket(url, 'connect');
ws.onopen = onOpen;
ws.onmessage = onMessage;
ws.onclose = onClose;
ws.onerror = onError;</pre>
<p>On the server I used <a href="https://github.com/Worlize/WebSocket-Node">this</a>; basically you start a websocket server and define what it has to do when people connect, send messages and disconnect again. This worked like a charm. In no time we were sending view-extents, features and the like around on the local network.</p>
<p>The problem however is that websockets are really really new. There is not that much information about them and hardly any tools to work with them. Most of the hardware of the internet does not know how to deal with it. We already had a problem when the node.js server was moved onto a different network within the company. The gateway didn&#8217;t understand the websocket packages and dropped them. There is a nice <a href="http://www.infoq.com/articles/Web-Sockets-Proxy-Servers">article </a>explaining what is happening and what you should do. Basically the way forward is not using websockets (ws://) but <strong>secure</strong> websockets (wss://). So while websockets are new and not too well documented, secure websockets are a complete disaster in that respect.</p>
<p>Setting up a secure websocket with node.js is also very easy; just use wss:// on the client side and on the serverside use:</p>
<pre>var http = require('https');

var options = {
      key: fs.readFileSync( 'ssl/socket-key.pem'),
      cert: fs.readFileSync('ssl/socket-cert.pem')
};
var server = http.createServer(options, function(request, response) {
      response.writeHead(200);
      response.end();
});
....etc</pre>
<p>Since I am using self-signed certificates I needed to get the user sign the certificate, otherwise the wss:// connection fails silently. So I added an empty HTTP 200 response so the browser would show an unsecure certificate warning. This worked nicely through the company gateways. However, it was still impossible to access the server from the outside, because non of the proxy server we use understand websocket or secure websocket. So while I made a little progress within the different networks of the company I still couldn&#8217;t access the socket server from outside the network.</p>
<p>It took me a while, but with the help of <a href="http://afitnerd.com/2012/08/14/websockets-over-ssl-stunnel-haproxy-node-js/">this </a>article I figured out the trick. He uses stunnel to unencrypt the secure websocket, but I prefer a one stop shop so: You need to setup a proxy facing the internet using the latest <a href="http://haproxy.1wt.eu/">haproxy </a>(with SSL support). Configure it as such:</p>
<pre>global
        log 127.0.0.1   local0 info
        maxconn 4096
        user haproxy
        group haproxy
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        option http-server-close
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

backend ws
        balance roundrobin
        option forwardfor # This sets X-Forwarded-For
        timeout connect 86400000s
        timeout server 86400000s
        server ws1 localhost:8080 weight 1 maxconn 1024 check

backend ww
        balance roundrobin
        option forwardfor # This sets X-Forwarded-For
        timeout connect 10s
        timeout server 30s
        server ww1 localhost

frontend https_proxy
        bind *:443 ssl crt /etc/ssl/cert.key_pem
        mode http
        acl is_websocket hdr(Upgrade) -i WebSocket
        acl is_websocket hdr_beg(Host) -i ws
        use_backend ws if is_websocket
        timeout client 86400000s
        default_backend ww</pre>
<p>What this does is providing an https &#8216;server&#8217; on the internet and filtering the wss requests out, unencrypt them and send them to the node.js instance. <a href="http://afitnerd.com/">http://afitnerd.com</a> really did a great job explaining their setup, only two things weren&#8217;t that clear. The first is that the client is using the wss:// protocol, so your config looks like this:</p>
<pre>var url = wss://host/
var ws = new WebSocket(url, 'connect'); 
ws.onopen = onOpen; 
ws.onmessage = onMessage; 
ws.onclose = onClose; 
ws.onerror = onError;</pre>
<p>The second is that the server still provides a non secure websocket service. So you need to use <code>var http = require('http');</code> and not <code>var https = require('https');</code>. Now we have secure websockets working through all proxies, gateways and routers between you and the ws server, so without further ado:</p>
<p>Please accept the self-signed certificate, use a websocket enabled browser and click <a href="https:///80.113.1.130">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/11/building-a-websocket-based-multi-user-map/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenJDK7 vs. Oracle JDK7 with Geoserver</title>
		<link>http://research.geodan.nl/2012/10/openjdk7-vs-oracle-jdk7-with-geoserver/</link>
		<comments>http://research.geodan.nl/2012/10/openjdk7-vs-oracle-jdk7-with-geoserver/#comments</comments>
		<pubDate>Wed, 31 Oct 2012 17:54:32 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Benchmarking]]></category>
		<category><![CDATA[Geoserver]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=541</guid>
		<description><![CDATA[Introduction: After installing a new server with ubuntu 64 I noticed that only openjdk packages are available nowadays. A quick search learned me that, though it is still possible, installing Oracle&#8217;s JDK wasn&#8217;t advisable. It is hard to keep up &#8230; <a href="http://research.geodan.nl/2012/10/openjdk7-vs-oracle-jdk7-with-geoserver/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction:</strong></p>
<p>After installing a new server with ubuntu 64 I noticed that only openjdk packages are available nowadays. A quick search learned me that, though it is still possible, installing Oracle&#8217;s JDK wasn&#8217;t advisable. It is hard to keep up to date and people even claim that Oracle&#8217;s JDK is a security risk in itself. However the Geoserver <a title="OpenJDK vs Sun JDK" href="http://opengeo.org/publications/geoserver-production/#gp4.4">developers </a>recommend Oracle (Sun) JDK over OpenJDK. This is a test they did in september 2010 with Sun JDK 1.6 and OpenJDK 6.</p>
<p><strong>Test setup:</strong></p>
<p>Development has continued since then and now Java 7 is available, both in Oracle and OpenJDK flavour. I asked on <a href="https://twitter.com/stvno/status/263278628257812482">twitter </a>whether or not it still mattered which version you use. Apparently it is not entirely clear, so I did a quick test with two virtual machines on an ESX-cluster[*] I had handy. One I installed the standard OpenJDK that comes with ubuntu (7u9-2.3.3-0ubuntu1~12.04.1), the other I installed the latest Oracle JDK and JRE (jdk7u9).</p>
<p>On the database server the dutch <a href="http://kadaster.nl/window.html?inhoud=/Top10NL/">top10 </a>topographic map was loaded and styled with the <a href="https://github.com/opengeogroep/NLExtract/tree/master/top10nl/style/sld">SLD </a>from <a href="http://www.nlextract.nl/">NLextract</a>. I used geoserver&#8217;s preview layer function to get an idea how fast the two JDKs are and how the results look. I&#8217;ve first zoomed in step by step from the entire Netherlands to village level (8steps) and changed the mapsize to 1280&#215;1024 and zoomed back up. Obviously I had atop running on all three servers to prevent accidentally starting a request before the server were ready.</p>
<p><strong>Results:</strong></p>
<p>This produced the following graph:</p>
<p><img class="alignnone size-full wp-image-542" title="geoserver-rendertime-graph" src="http://research.geodan.nl/wp-uploads/2012/10/graph.png" alt="" width="731" height="388" /></p>
<p>Interestingly oracle&#8217;s render time tops around 48seconds and openjdk gets a DNF at the lower zoomlevels.In general you can say that Oracle is faster in parsing the millions of features from the database. On more detailed zoom levels the differences disappear:</p>
<table width="683" border="0" cellspacing="0" cellpadding="0">
<colgroup>
<col width="107" />
<col span="9" width="64" /> </colgroup>
<tbody>
<tr>
<td width="107" height="20"></td>
<td width="64">z0</td>
<td width="64">z1</td>
<td width="64">z2</td>
<td width="64">z3</td>
<td width="64">z4</td>
<td width="64">z5</td>
<td width="64">z6</td>
<td width="64">z7</td>
<td width="64">z8</td>
</tr>
<tr>
<td height="20">openjdk</td>
<td align="right">60</td>
<td></td>
<td align="right">41.3</td>
<td align="right">11.97</td>
<td align="right">3.65</td>
<td align="right">1.44</td>
<td align="right">0.552</td>
<td align="right">0.294</td>
<td align="right">0.183</td>
</tr>
<tr>
<td height="20">openjdk-2</td>
<td align="right">60</td>
<td></td>
<td align="right">41.35</td>
<td align="right">11.98</td>
<td align="right">3.92</td>
<td align="right">1.35</td>
<td align="right">0.598</td>
<td align="right">0.272</td>
<td align="right">0.213</td>
</tr>
<tr>
<td height="20">oracle</td>
<td align="right">48.49</td>
<td align="right">48.32</td>
<td align="right">26.06</td>
<td align="right">8</td>
<td align="right">2.49</td>
<td align="right">0.9</td>
<td align="right">0.363</td>
<td align="right">0.228</td>
<td align="right">0.197</td>
</tr>
<tr>
<td height="20">oracle-2</td>
<td align="right">48.32</td>
<td align="right">48.44</td>
<td align="right">27.25</td>
<td align="right">7.99</td>
<td align="right">2.44</td>
<td align="right">0.701</td>
<td align="right">0.384</td>
<td align="right">0.484</td>
<td align="right">0.197</td>
</tr>
<tr>
<td height="20">openjdk-large</td>
<td></td>
<td></td>
<td></td>
<td align="right">60</td>
<td align="right">28.47</td>
<td align="right">9.3</td>
<td align="right">3.53</td>
<td align="right">1.62</td>
<td align="right">0.802</td>
</tr>
<tr>
<td height="20">openjdk-large-2</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td align="right">28.59</td>
<td align="right">9.22</td>
<td align="right">3.18</td>
<td align="right">1.4</td>
<td align="right">0.784</td>
</tr>
<tr>
<td height="20">oracle-large</td>
<td align="right">48.25</td>
<td align="right">48.53</td>
<td align="right">48.84</td>
<td align="right">31.58</td>
<td align="right">11.81</td>
<td align="right">3.75</td>
<td align="right">1.83</td>
<td align="right">1.01</td>
<td align="right">0.721</td>
</tr>
<tr>
<td height="20">oracle-large-2</td>
<td align="right">48.48</td>
<td align="right">48.13</td>
<td align="right">48.83</td>
<td align="right">31.43</td>
<td align="right">12.21</td>
<td align="right">3.78</td>
<td align="right">1.85</td>
<td align="right">1.1</td>
<td align="right">0.76</td>
</tr>
</tbody>
</table>
<p>The render quality was on par though, this is with openjdk:</p>
<p><img class="alignnone size-full wp-image-543" title="openjdk-zoom8-top10nl" src="http://research.geodan.nl/wp-uploads/2012/10/j-8-research-terrein.png" alt="" width="442" height="512" /></p>
<p>and this with oracle:</p>
<p><img class="alignnone size-full wp-image-544" title="oraclejdk-zoom8-top10nl" src="http://research.geodan.nl/wp-uploads/2012/10/o-8-research-terrein.png" alt="" width="442" height="512" /></p>
<p>On zoom level 2, openjdk:</p>
<p><img class="alignnone size-full wp-image-545" title="openjdk-zoom2-top10nl" src="http://research.geodan.nl/wp-uploads/2012/10/j-2-research-terrein.png" alt="" width="442" height="512" /></p>
<p>and oracle:</p>
<p><img class="alignnone size-full wp-image-546" title="oraclejdk-zoom2-top10nl" src="http://research.geodan.nl/wp-uploads/2012/10/o-2-research-terrein.png" alt="" width="442" height="512" /></p>
<p><strong>Conclusion:</strong></p>
<p>This quick and dirty test shows that a reasonably configured openjdk-based geoserver instance is slower than a oracle-jdk based one when rendering a lot of features out of a database. Since the image quality seems to be the same (no labels here) it shouldn&#8217;t be too much of a problem though if you use geoserver as a backend of a tiling server. The millions of tiles of the deep-zoomlevels contain less features.</p>
<p>[*] test machine specs, all run Ubuntu 12.04 64bit:<br />
Database server &#8216;cumulus&#8217;:<br />
16GB RAM, 4CPU 2.67GHZ XEON X5650, postgresql 9.1 postgis 2.0, 2GB shared_buffers</p>
<p>Geoserver machines:<br />
8GB RAM, 4CPU 2.67GHZ XEON X5650, tomcat 7, geoserver 2.2.1</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/10/openjdk7-vs-oracle-jdk7-with-geoserver/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenLayers and XKCD</title>
		<link>http://research.geodan.nl/2012/09/openlayers-and-xkcd/</link>
		<comments>http://research.geodan.nl/2012/09/openlayers-and-xkcd/#comments</comments>
		<pubDate>Wed, 19 Sep 2012 13:38:36 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[Open Source Software]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=535</guid>
		<description><![CDATA[Today Randall of XKCD created a most astonishing comic, which is a giant side view of a world with stuff in the air and underground. Looking at the comic I realised that it was a tiled map, though with a &#8230; <a href="http://research.geodan.nl/2012/09/openlayers-and-xkcd/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Today Randall of <a href="http://xkcd.com">XKCD </a>created a most astonishing <a href="http://xkcd.com/1110/">comic</a>, which is a giant side view of a world with stuff in the <a href="http://research.geodan.nl/sites/xkcd/?zoom=3&amp;lat=1.29563&amp;lon=12.545&amp;layers=B">air </a>and <a href="http://research.geodan.nl/sites/xkcd/?zoom=3&amp;lat=1.29563&amp;lon=12.545&amp;layers=B">underground</a>. Looking at the comic I realised that it was a tiled map, though with a slightly odd tilescheme, in stead of a simple x/y it used a more complex, n/s,e/w starting from the middle, so the centre tile is <a href="http://imgs.xkcd.com/clickdrag/1n1e.png">1n1e</a> one to the left is <a href="http://imgs.xkcd.com/clickdrag/1n2e.png">1n2e</a> and one to the right is <a href="http://imgs.xkcd.com/clickdrag/1n1w.png">1n1w</a>, similar with going up or down.<img class="alignnone size-full wp-image-536" title="xkcd" src="http://research.geodan.nl/wp-uploads/2012/09/xkcd.png" alt="" width="583" height="397" /></p>
<p>OpenLayers to the rescue: being open source it is very easy to extend and modify their tiling-schema to work with the slightly weird XKCD system, see it in action here: <a href="http://research.geodan.nl/sites/xkcd">http://research.geodan.nl/sites/xkcd</a></p>
<p>The slightly horrible code:<br />
<code>
<pre>
OpenLayers.Layer.XKCD = OpenLayers.Class(OpenLayers.Layer.XYZ, {
	getXYZ: function(bounds) {
		var res = this.getServerResolution();
		var x = Math.round((bounds.left - this.maxExtent.left) /
			(res * this.tileSize.w));
		if(x >= 50)  x = (x - 49)+'e';
		else if (x <50) x = (50 - x)  + 'w';
		var y = Math.round((this.maxExtent.top - bounds.top) /
			(res * this.tileSize.h));
		if(y > 50) y = (y -50)+'s';
		else if (y <=50) y = (51 -y )+ 'n';
	        var z = this.getServerZoom();
		return {'x': x, 'y': y, 'z': z};
	}
})
</pre>
<p></code><br />
&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/09/openlayers-and-xkcd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Phoenix is finished</title>
		<link>http://research.geodan.nl/2012/09/phoenix-is-finished/</link>
		<comments>http://research.geodan.nl/2012/09/phoenix-is-finished/#comments</comments>
		<pubDate>Wed, 19 Sep 2012 13:22:58 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[Microsoft Surface]]></category>
		<category><![CDATA[Advanced User Interaction]]></category>
		<category><![CDATA[Spatial Data Infrastructure]]></category>
		<category><![CDATA[Video]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=533</guid>
		<description><![CDATA[After several years of doing research with touch tables and GIS we&#8217;ve finally build an application which is so intuitive that even children can use it: This application (Phoenix) is a spatial discussion platform where people can discuss issues while &#8230; <a href="http://research.geodan.nl/2012/09/phoenix-is-finished/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After several years of doing research with touch tables and GIS we&#8217;ve finally build an application which is so intuitive that even children can use it:</p>
<p><a href="http://research.geodan.nl/2012/09/phoenix-is-finished/"><em>Click here to view the embedded video.</em></a></p>
<p>This application (<a href="http://www.geodan.nl/phoenix">Phoenix</a>) is a spatial discussion platform where people can discuss issues while standing around an interactive map. Different ideas we have tried out in earlier <a href="http://research.geodan.nl/category/projects/surface/">prototypes </a>have been polished into a consistent application which is extendible with plugins. I made a teaser movie for those who are not in the neighbourhood to play with it themselves:</p>
<p><a href="http://research.geodan.nl/2012/09/phoenix-is-finished/"><em>Click here to view the embedded video.</em></a></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/09/phoenix-is-finished/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Geolocation API without maps</title>
		<link>http://research.geodan.nl/2012/03/geolocation-api-without-maps/</link>
		<comments>http://research.geodan.nl/2012/03/geolocation-api-without-maps/#comments</comments>
		<pubDate>Tue, 27 Mar 2012 14:40:00 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[EduGIS]]></category>
		<category><![CDATA[Advanced User Interaction]]></category>
		<category><![CDATA[HTML5]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=500</guid>
		<description><![CDATA[HTML5 provides the geolocation api. This is commonly used to move the map to the position of the user. Quite a useful feature, but obviously it is not limited to this. I made a quick HTML5 site which will give &#8230; <a href="http://research.geodan.nl/2012/03/geolocation-api-without-maps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://research.geodan.nl/sites/hoogte"><img class="alignleft size-full wp-image-506" title="nAPP" src="http://research.geodan.nl/wp-uploads/2012/03/nAPP2.png" alt="" width="318" height="484" /></a>HTML5 provides the<a title="geolocation api" href="http://dev.w3.org/geo/api/spec-source.html#get-current-position"> geolocation api</a>. This is commonly used to move the map to the position of the user. Quite a useful feature, but obviously it is not limited to this. I made a quick HTML5 site which will give the height of you location according to the <a href="http://ahn.nl">AHN</a> - the dutch height model.</p>
<p>It is very simple: the geolocation API will provide a coordinate and I use that coordinate to do a getfeatureinfo on the AHN-service of <a href="http://www.edugis.nl">EduGIS</a>. To make it slightly more interesting it will show a cow if you&#8217;re above sea level, a nice coral reef if below and a foggy picture if the app doesn&#8217;t know where you are, or doesn&#8217;t have a height for that location.</p>
<p>Obviously this only works for the Netherlands, since the AHN only provides heights for the Netherlands.</p>
<p>You can find your own height here:<a href="http://research.geodan.nl/sites/hoogte/"> http://research.geodan.nl/sites/hoogte/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/03/geolocation-api-without-maps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Timesliding canvas maplayer</title>
		<link>http://research.geodan.nl/2012/01/timesliding-canvas-maplayer/</link>
		<comments>http://research.geodan.nl/2012/01/timesliding-canvas-maplayer/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 16:41:13 +0000</pubDate>
		<dc:creator>stvn</dc:creator>
				<category><![CDATA[EduGIS]]></category>
		<category><![CDATA[Advanced User Interaction]]></category>
		<category><![CDATA[HTML 5]]></category>
		<category><![CDATA[HTML5]]></category>

		<guid isPermaLink="false">http://research.geodan.nl/?p=479</guid>
		<description><![CDATA[After someone saw my BAG building data movie he asked if it would be possible to create an interactive map of the entire Netherlands. This made me think, since creating the movie was a very time consuming action. The problem &#8230; <a href="http://research.geodan.nl/2012/01/timesliding-canvas-maplayer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>After someone saw my BAG building data movie <p><a href="http://research.geodan.nl/2012/01/timesliding-canvas-maplayer/"><em>Click here to view the embedded video.</em></a></p> he asked if it would be possible to create an<a title="interactive bag viewer" href="http://bag.edugis.nl/" target="_blank"> interactive map</a> of the entire Netherlands. This made me think, since creating the movie was a very time consuming action. The problem is that there are about 6 million buildings in the <a href="http://bag.vrom.nl/">BAG</a> database. This makes the data a bit unwieldy to use directly in the browser. The old fashioned way to do time series on maps involves creating a new layer for each time-moment (year in this case). This would mean that there would be over 150 layers to be loaded on the map and switching between those for the &#8216;time sliding&#8217; effect. Apart from the hideous task to set up 150 almost the same layers, it would end up with too much images for a browser to handle.</p>
<p><img title="More..." src="http://blog.minst.net/wp-includes/js/tinymce/plugins/wordpress/img/trans.gif" alt="" />However modern browsers have the &lt;canvas&gt; element. This element allows for the manipulation of single pixels within this element. So I figured if I could encode the building-dates in a PNG and use canvas to display only those pixels which represent a building older than the given date it should be possible to time-slide through the buildings. Fortunately the fancy new mapping library <a href="http://leaflet.cloudmade.com/">Leaflet.js</a> has a canvas tile layer build in. The BAG data is already available through EduGIS, so I only needed it to encode the data differently in the PNGs.</p>
<p>The encoding is very simple: per pixel there are 4 values available: red, green, blue and alpha. Since I only needed to encode 200-odd values I used just the red value. The years before 1850 are encoded as groups, since the data is so sparse, after 1850 each year is individually encoded. This means that from 1850 onwards the red value increases with 1. The client retrieves the encoded PNGs as normal tiles and look like this:<img class="alignright" title="Encoded BAG tile" src="http://bag.edugis.nl/tiles/tilecache.py/ibag/14/8416/10998.png" alt="" width="256" height="256" /></p>
<p>The image appears grey because I kept the green and blue values of the PNG the same as the red. This image is loaded into canvas and the imageData is retrieved using ctx.getImageData(0, 0, 256, 256) and stored as a jQuery data object on the canvas. This is important, since for visual effect we will manipulate the imageData on the canvas and we want to keep track of the original values. Once the imageData is attached to the canvas the colors are being calculated. It will take the original values, compares them to the current year and will decide whether or not to show the pixel and in which color.</p>
<p>Since only the grey tile is needed, the actual sliding through time is really fast because it doesn&#8217;t need to retrieve more data. With 4 bands of 255 values each you can encode an insane amount of data into a PNG, readily available through canvas for direct manipulation. Apart from time sliding, is detailed representation of DEM data an obvious use case.</p>
]]></content:encoded>
			<wfw:commentRss>http://research.geodan.nl/2012/01/timesliding-canvas-maplayer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
