Some music for the occasion :

First Snow – Stephan Micus (from Desert Poems)

Taken on my way to Bossy. The Mont-Blanc can be seen in the background.

Apollo 11

Tomorrow will mark the 40th anniversary of the launch of Apollo 11. The Big Picture has some fantastic photographs taken during the mission.

Maps for change

There is an interesting article in this week’s Economist about the use of modern mapping tools to campaign for change. Among other tools and websites, PostGIS and MapServer get a mention. On a related subject, this blog post lists a few resources that teach about actually making maps for the purpose of advocacy.

Triptyque

I had been trying to get into iPhone / iPod Touch application development for some time, but I was just too lazy until I bought a few weeks ago an iPod Touch (which I really like – I am playing the Sudoku game from Mighty Mighty Good Games all the time).

As my first app and to learn how it works, I have developed an opensource browser for the ArcGIS Server 9.3 REST API, which I have called AGS Touch. It is quite bare-boned right now : It is possible to browse the folders of a REST endpoint (something like http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/), look at the details of a map service (such as its description, extent, layers…) and navigate the corresponding map. That’s basically it (and the map service details are not even completely filled yet). Still I have released version 0.1 with the limited functionality. Hopefully, I will make it better in the near future. Something I would like to have in the end is some kind of ArcGIS Server iPhone API (like what exists in Flex or SilverLight), although it is not quite ready yet…

There has been some effort to bring ArcGIS Server to the iPhone by using a UIWebView and include an existing JavaScript library (modified to respond to touches) such as OpenLayers (this is the approach taken for IOL.js) or the ArcGIS Server JavaScript API (like what is shown there).

I went instead with RouteMe, which is a native Objective-C library to display slippy maps on the iPhone. It works very well with OpenStreetMap and is being used in the GPS Mission client for the iPhone (see Make article). The main RouteMe library has many features, like Proj4 integration, marker overlays or multiple layers. For my purpose, I actually adapted a subproject currently in the SVN trunk called freemap-iphone (to display FreeMap tiles) since it looked simpler and easier to adapt to get something quickly. To make it event simpler, I actually dropped the tile rendrering  completely : The map viewier in AGS Touch has a load-a-complete-image-for-the-extent kind of scheme, although I intend to allow tiles as well in the future.

The new version has been released a few days ago. There does not seem to be anything earth-shattering in the update, according to the release notes and my own experience with it. Just a few corrections here and there and more samples in the documentation. I have been using version 1.0 of the API since it got out of beta in October last year and I have enjoyed it very much. It may also have something to do with the fact Flex can be much less frustrating to work with than the HTML + JavaScript combo.

There is still something that irks me a bit: The “Powered by ESRI” logo that always appears when not using ArcGIS Server 9.3 layers, which for some reason I am mostly doing currently (with ArcIMS 9.3, although it would happen as well with WMS or other custom layers). There is a logoVisible property on the map that can be set but it is ignored in this case. I can understand it since this is after all the AGS Flex API, but still… Using Flex Spy to peek at the runtime component tree, I came up with this :


function reallyHideESRILogo() : void {
  if(! map.logoVisible)
    for(var i : int = 0 ; i < map.numChildren ; i++){
      var component : UIComponent = map.getChildAt(i) as UIComponent;
      if(component.className == "StaticLayer")
         for(var j : int = 0 ; j < component.numChildren ; j++){
           var stComponent : UIComponent = component.getChildAt(j) as UIComponent;
           if(stComponent.className == "Image"){
             stComponent.visible = false;
             return;
           }
        }
    }
}

This function is called when the map loads and every time a new layer is added, so that the logo does not appear, even with ArcIMS or custom layers.

I was in Rome for a few days last week. Here are some pictures I took. Above the Saint-Angel Castle.

Above, view from the forum.

Above, Rome from the Gianicolo hill.

Above, Saint-Peter at night and the Tiber river.

This tutorial will show how to use version 3.1 of the Calais API to identify geographic references in a text and display them on an OpenLayers map. I am going to use the Calais API with JSON output (which is a new feature of version 3.1), so that all the processing can be done easily in JavaScript entirely inside a web browser.

A running version of the demo application can be found here. The code can be downloaded here.

What is the Calais API?

From the documentation:

The Calais Web Service allows you to automatically annotate your content with rich semantic metadata, including entities such as people and companies and events and facts such as acquisitions and management changes.

Version 3.1, currently in beta, has added information regarding the latitude/longitude of a few types of entities: Cities, provinces/states and countries. It makes it possible to plot those entities on a map, in a way similar to what can be done with the Metacarta GeoTagger API.

calais

Read the rest of this entry »