Talk:Maps

From Mapping on MediaWiki
Jump to: navigation, search
Crystal Clear app error.png

Discussion page moved!
Use the new one on mediawiki.org instead!

Contents

Thread titleRepliesLast modified
Maps don't load in wptouch skin.015:43, September 28, 2012
Google service not working anymore421:38, September 27, 2012
Disabling Scrollwheel Zoom with Google Maps 3121:29, September 27, 2012
References not working320:53, September 1, 2012
No Google API Key available313:48, June 19, 2012
KML export problem023:26, May 23, 2012
fatal error using display_points223:16, May 14, 2012
Display Track323:14, May 14, 2012
Something wrong?621:31, March 7, 2012
Setting custom maps715:31, March 4, 2012
Offline world map212:47, January 27, 2012
In China google.com is unstable, how to load ditu.google.cn ondiscussionpage:Talk:Maps019:56, January 26, 2012
Resizing the Markers112:39, September 25, 2011
My Custom Markers - Where do I place them?612:38, September 25, 2011
Displaying bounding boxes and/or WKT representations312:36, September 25, 2011
Resizing the Markers009:12, September 21, 2011
map not loading after doEdit(...)320:15, August 31, 2011
Results table but empty map118:32, July 21, 2011
Moving a marker in edit mode421:13, June 18, 2011
Geocode suggest ajax service300:29, June 19, 2011
First page
First page
Previous page
Previous page
Last page
Last page

Maps don't load in wptouch skin.

Maps are working fine in my custom skin at www.wikiwhereis.com, but not on the mobile version with the WPTouch skin. Only error I see is "Uncaught ReferenceError: mw is not defined" in ";mw.loader.state({"site":"ready"});" on load.php. Not sure if this is causing the problem or if there is another issue with the skin. Any help is appreciated. You can see a map at http://www.wikiwhereis.com/index.php?title=Texas/San_Antonio/Post_Offices/Thousand_Oaks_Post_Office&useskin=wptouch Thanks!

67.78.106.7415:43, September 28, 2012

Google service not working anymore

I had the maps working fine yesterday. Great system. Today none of my pages that have a map on them will load. they all say: Fatal error: Parameter coordinates must be one or more valid locations.

If I take out all the locations that I am trying to display, the map shows. As soon as I put a single location such as "Vancouver", like the example below, I get the error above.

{{#display_map:
Moscow, Russia
}}

However, if I put in |service=osm, the map works, SOMETIMES (depends on what I put as the location). So this, to me, seems like I have it installed correctly. It shows properly on the Special:Version page, as being installed. Validator is installed as well.

What I don't understand is that it was all working fine, I had created a template which pulled the location address information from LDAP and populated it into the display_point call. Then would load the map. Now I can barely get a map to show for anything. I have stared at this all morning and cannot find anything that I may have changed.

Is there anywhere you can point me to troubleshoot this?

97.75.210.22116:08, June 20, 2012

And now it works again. I haven't done anything since posting this original request a half hour ago. I just refreshed my page today and happened to notice the map is working again.

Am I missing something here? Or just going crazy!

Mmiller16:34, June 20, 2012

Moscow, Russia gets geocoded (by default by google) - if this fails for some reason, you will get the error you got.

Jeroen De Dauw16:50, June 29, 2012

I am having the same problem. Maps displayed using display_points suddenly gives the error "Fatal error: Parameter coordinates must be one or more valid locations." No changes have been made to the wiki since a couple of months ago, when the mapping worked perfectly. Changing to osm service I can make the mapping work for simple locations (e.g. city, country) but not for, for example, street addresses. The google geocoder does not seem to work at all. Any idea what could be the problem? Thanks for any input on the issue!

Jonas20:55, September 1, 2012

You could be over your geocoding limit imposed by Googles API.

Jeroen De Dauw21:38, September 27, 2012
 
 
 
 

Disabling Scrollwheel Zoom with Google Maps 3

Our wiki would like to use the features of Google Maps 3, but we also need scrollwheel zooming disabled. Right now, the only way we have found to disable it is with the autozoom=off option - but it only appears to work with Google Maps 2. Is there a way to achieve this functionality with the newer version?

Milgex02:12, September 10, 2012

I guess you're using Maps 0.7.x? Just switch to Maps 1.0.x (or the upcoming 2.0.x release), which does support this for Google Maps v3.

Jeroen De Dauw21:29, September 27, 2012
 

References not working

Howdy,

We are enjoying using this great mapping feature, but have encountered a problem. References (http://www.mediawiki.org/wiki/Extension:Cite) do not show up on a page that uses display_points. You can see an example at http://www.appropedia.org/Arcata_Marsh_Overview#Map. The map shows up wonderfully, but the references no longer show up at the bottom of the page. If you delete the map, the references will show again. I tested this on another site and it exhibited the same problem.

Thanks,

Lonny00:10, November 25, 2011

Thanks for bringing this to my attention, I was not aware of this issue. I will keep it in mind for future releases :)

Jeroen De Dauw23:57, November 29, 2011

Hello:

I recently upgraded to MW-1.19.1 and I'm having the same problem.

When the closing references tag is placed after a map, the references do not appear.

If the closing tag is place before the map, they show up.

Has this issue been fixed?

Here is my set-up:

MediaWiki 1.19.1 (r432)
PHP 5.3.15 (apache2handler)
MySQL 5.1.56-log
Maps (Version 1.0.5)
Validator (Version 0.4.13)

Thank you so much for your help with this and for the awesome maps extension!

Patricia Barden21:58, August 24, 2012
 
 

No Google API Key available

Hello,

It seems to me, that Google supports no longer the Google Maps API key. But in the installation manual is still written, that you have to set the $egGoogleMapsKey - variable. I just needed a new Key because of changing the wiki domain. What can I do to fix this?

MW 1.16.; SMW 1.5.6, Maps/SemanticMaps 0.7.8

Best regards...

UserFlo15:22, March 22, 2012

You only need it for Google Maps v2, not for v3, which is the default service as of Maps 1.0. I no longer support 0.7.x.

Jeroen De Dauw23:18, May 14, 2012

No, if you want the higher limit than the anonymous 2500 requests per day, then you must still specify a key.

Jeroen- do you still pass the key string into the V3 API? This is vital.

Thanks.

Mitchelln11:13, June 18, 2012

This has been implemented in 2.0 alpha

Jeroen De Dauw13:48, June 19, 2012
 
 
 

KML export problem

There's a problem with KML export which it produces duplicate entries. Also the offset and the limit is the same, and if I want to change the offset later, the offset box is unresponsive.

24.5.134.14023:26, May 23, 2012

fatal error using display_points

(Using version 1 of the Maps extension)

I am creating maps automatically and sometimes a map does not have any markers on it - I only want to display a map. However, if I use display_points without any marker data (using display_map is not an easy option for me because of the automation), I get the following fatal error:

{{#display_points: | center=4.5946554, -75.51396 | zoom=10 | type=roadmap | types=roadmap, satellite, terrain | controls=zoom, type | zoomstyle=large | typestyle=dropdown | height=400 }}

Fatal error: Unsupported operand types in C:\clevertrail\trails\includes\parser\LinkHolderArray.php on line 41 Call Stack

  1. Time Memory Function Location

1 0.0020 409608 {main}( ) ..\index.php:0 2 0.4536 10761136 MediaWiki->performRequestForTitle( ) ..\index.php:114 3 0.5013 12310760 MediaWiki->performAction( ) ..\Wiki.php:69 4 0.5258 13240672 EditPage->submit( ) ..\Wiki.php:522 5 0.5259 13240672 EditPage->edit( ) ..\EditPage.php:296 6 0.6032 13775712 EditPage->attemptSave( ) ..\EditPage.php:415 7 0.6033 13775776 EditPage->internalAttemptSave( ) ..\EditPage.php:2656 8 0.7210 14492624 Article->updateArticle( ) ..\EditPage.php:1076 9 0.7211 14492656 Article->doEdit( ) ..\Article.php:1976 10 0.7693 15475776 Article->prepareTextForEdit( ) ..\Article.php:2114 11 1.0513 19259352 Parser->parse( ) ..\Article.php:3602 12 1.0527 19264184 Parser->internalParse( ) ..\Parser.php:283 13 2.1874 25069048 Parser->replaceInternalLinks( ) ..\Parser.php:1022 14 2.8056 25272808 LinkHolderArray->merge( )

Any suggestions?

Dylan16:36, September 29, 2011

This is because the parser is cloned.

I have posted a patch here: Thread:Semantic_mapping/Fatal_error:_Unsupported_operand_types/reply_(5)

Andreas Jonsson09:43, March 5, 2012

It's being cloned for a reason. I forgot what it exactly was. But I'm confident that applying the patch is not a good idea in general. Either way, that parser code seriously sucks, and probably needs to be redone properly.

Jeroen De Dauw23:16, May 14, 2012
 
 

Display Track

Hi all, I'd like to display a GPS track (gpx file or similar) on a osm map (see for example: http://wiki.openstreetmap.org/wiki/Openlayers_Track_example) Does this also work with the maps extension? Thanks Peter

93.134.229.24221:01, February 20, 2011

It doesn't. Probably can be made to though. Any chance you can fund creating such functionality?

Jeroen De Dauw22:10, February 27, 2011
 

I do this by pre-processing the GPX data into a list of points. This has the added advantage that you can filter out redundant points and data reducing display and download time. I currently only include points 30 metres apart, which seems to work quite well. Example here, or lots more here.

CiaranG08:47, March 15, 2012

Heh - that's an interesting approach :)

There is KML support now though, and line/polygon support (defined in wikitext) is being worked on in Maps (not SM though).

Jeroen De Dauw23:14, May 14, 2012
 
 

Something wrong?

So many maps are not working anymore (infinitely "Loading map..."). Is there actually something broken? Openlayers?

Eric13:05, January 5, 2012

Hello same result here, I can't load any openlayers maps, here is the error get by Firebug:

missing exponent http://brest-en-biens-communs.infini.fr/load.php?debug=false&lang=fr&modules=ext.maps.common%2Copenlayers&skin=vector&version=20120117T110132Z&* Line 681

"Scale = 1 : ${scaleDenom}":"Escala = 1 : ${scaleDenom}",W:"O",E:"E",N:"N",S:"S",reprojectDeprecated:"Est\u00e1 usando a op\u00e7\u00e3o 'reproject' na camada ${layerName}. Esta op\u00e7\u00e3o \u00e9 obsoleta: foi concebida para permitir a apresenta\u00e7\u00e3o de dados sobre mapas-base comerciais, mas esta funcionalidade \u00e9 agora suportada pelo Mercator Esf\u00e9rico. Mais informa\u00e7\u00e3o est\u00e1 dispon\u00edvel em http://trac.openlayers.org/wiki/SphericalMercator.",methodDeprecated:"Este m\u00e9todo foi declarado obsoleto e ser\u00e1 removido na vers\u00e3o 3.0. Por favor, use ${newMethod} em vez disso."});OpenLayers.Layer.MultiMap=OpenLayers.Class(OpenLayers.Layer.EventPane,OpenLayers.Layer.FixedZoomLevels,{MIN_ZOOM_LEVEL:1,MAX_ZOOM_LEVEL:17,RESOLUTIONS:[9,1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125,0.02197265625,0.010986328125,0.0054931640625,0.00274658203125,0.001373291015625,6.866455078125E-4,3.4332275390625E-4,1.71661376953125E-4,8.58306884765625E

I was using a mapnik as layername. The problem seems to come from OpenLayers library in this file: Maps/includes/services/OpenLayers/OpenLayers/OpenLayers.js line 1472

so as a workaround I try to replace the new lib with the old one found in Maps version 0.7.x and for now it seems to resolve this problem.

Fleon16:11, January 18, 2012
 

This appears to be the issue on referata. I don't know why. It works on my wikis. Where is it not working for you? On a referata wiki?

Either way, I contacted Yaron about this to figure out what's different on this site so the issue can be pinpointed.

Jeroen De Dauw12:49, January 27, 2012

Same problem on my wiki as described above with missing exponent JS error. Example: http://fahrrad-wiki.org/wiki/Abiko Thanks.

Edit: MW 1.18.1, Maps 1.0.5

OpenIDUser422:41, February 23, 2012
 

Same issue on Fairfaxpedia, service=osm works but service=openlayers just hangs with "Loading map...".

Joshdoe04:09, February 28, 2012

Turns out this is an issue with MediaWikis 1.18.x resource loading system that is breaking OpenLayers. I can't really do anything to fix this in the extension. It works properly again in MediaWiki 1.19 and later.

Jeroen De Dauw15:35, March 4, 2012

Thank you for this info. After upgrading to 1.19 beta 1 maps is working again.

OpenIDUser421:31, March 7, 2012
 
 
 
 

Setting custom maps

Hi, I would like to set up a custom map for our mediawiki i.e. not only provide different layer but also replace the base map, I would like to know if this is possible todo with this extension?

109.65.220.14301:17, January 22, 2012

OpenLayers supports defining your own layers, which can have an image as basis. See Images as layers.

Jeroen De Dauw12:46, January 27, 2012

Hi, we are trying to use a custom map as well. The raster image is very big (10k x 10K pixel and 17MB of size) so using Images as layers is not feasible, I have created 3 maps out of it Base, terrain and labels map. Devided to 256x256 tiles for 7 zoom layers.

It seems to me that all I need to do is change the function that retrive tile info from google to load from my Server zoom+cords+png and add the layers. I was hoping that you can show me how this can be achieved or at least point me to the right place in your extension, alternatively if there is an example that do that, that I can use it would be perfect.

Also on side note, I have noticed mentions that Google maps has a hard limit of 25k entries, should we try to use another service?

Thanks, Mor.

Mor220:56, February 27, 2012

25k entries? WHat do you mean by entries?

Jeroen De Dauw15:12, March 4, 2012
 

Here is what I come up with:

var MyBaseMap = {
  getTileUrl: function(coord, zoom) {
	return "Maps/Base/" +
		+ zoom + "/" + coord.x + "/" + coord.y + '.png';
  },
  tileSize: new google.maps.Size(256, 256),
  isPng: true,
  maxZoom: 7,
  minZoom: 0,
  name: 'Map',
  credit: 'Westeros.org'
};



//Create Layers
var mapLayers = {};

// set up the map types
mapLayers['Terrain'] = {
  getTileUrl: function(coord, zoom) {
	return "Maps/Terrain/" +
		+ zoom + "/" + coord.x + "/" + coord.y + '.png';
  },
  tileSize: new google.maps.Size(256, 256),
  isPng: true,
  maxZoom: 7,
  minZoom: 0,
  name: 'Terrain',
  credit: 'Westeros.org'
};

mapLayers['Lables'] = {
  getTileUrl: function(coord, zoom) {
	return "Maps/Lables/" +
		+ zoom + "/" + coord.x + "/" + coord.y + '.png';
  },
  tileSize: new google.maps.Size(256, 256),
  isPng: true,
  maxZoom: 7,
  name: 'Lables',
  credit: 'Westeros.org'
};



//Init
var map;

function initialize() {
  var MY_BASEMAP_ID = 'IceAndFire';

  // Attach the coordinate map type to the map's registry.
  map.mapTypes.set(MY_BASEMAP_ID, MyBaseMap);
  
  // Modify the control to only display our custom map type.
  var options = {
    zoom: 6,
    mapTypeControlOptions: {
      mapTypeIds: [MY_BASEMAP_ID]
    }
  };

  // Create our map.
  map = new google.maps.Map(document.getElementById("map_canvas"),
      options);
  
  // Set the map to use the 'coordinate' map type.
  map.setMapTypeId(MY_BASEMAP_ID);
  
  // push all mapLayers keys in to a mapTypeId array to set in the mapTypeControlOptions
  for (var key in mapLayers) {
    map.overlayMapTypes.insert(key);
  }
}

It suppose to be very basic, only create a new tile basemap and few layers(two at the moment), all using 256x256 with 0-7 zoom levels.(I am kind of limited in my ability to test it, so I am not sure if it even works).

Any help with this basic functionality or how/where do I corporate it into our Mediawiki with the Maps extension will be very appreciated( googleearth.js at includes\services\GoogleMaps3\earth\ seems like a likely candidate)

Mor223:07, February 29, 2012

I just found the layers demo page, any chance I can use anything there to setup my tile maps, maybe something like this line of code from there:

$egMapsOLAvailableLayers['german-layer'] = array('OpenLayers.Layer.OSM("Öpnv Deutschland", "http://tile.xn--pnvkarte-m4a.de/tilegen/${z}/${x}/${y}.png", {numZoomLevels: 19,buffer:0})');

Here is the relevant part of my code, that I am using to run the tests locally:

 
// Add Base map.
layer = new OpenLayers.Layer.TMS("Base Map","",
		{  url: '', serviceVersion: '.', layername: 'base', alpha: false,
			type: 'jpg', isBaseLayer: true, getURL: getTileURL 
		});
map.addLayer(layer);

// Add Layers.
layer = new OpenLayers.Layer.TMS("Terrain","",
		{  url: '', serviceVersion: '.', layername: 'terrain', alpha: false,
			type: 'png', isBaseLayer: false, getURL: getTileURL
		});	
map.addLayer(layer);

layer = new OpenLayers.Layer.TMS("Lables","",
		{  url: '', serviceVersion: '.', layername: 'lables', alpha: false,
			type: 'png', isBaseLayer: false, getURL: getTileURL
		});	
map.addLayer(layer);

function getTileURL(bounds) {
	var res = this.map.getResolution();
	var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
	var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
	var z = this.map.getZoom();
	if (x >= 0 && y >= 0) {
		return this.url + "tiles/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type;				
	} else {
		return "http://www.maptiler.org/img/none.png";
	}
}

Note, that I am using TMS layers, not OSM layers.

EDIT: I dont know maybe something like this?

$egMapsOLAvailableLayers['Base map'] = array('OpenLayers.Layer.TMS("Base Map","",
		{  url: '', serviceVersion: '.', layername: 'base', alpha: false,
			type: 'jpg', isBaseLayer: true, getURL: getTileURL 
		})');
$egMapsOLAvailableLayers['Terrain'] = array('OpenLayers.Layer.TMS("Terrain","",
		{  url: '', serviceVersion: '.', layername: 'terrain', alpha: false,
			type: 'png', isBaseLayer: false, getURL: getTileURL
		})');
$egMapsOLAvailableLayers['Lables'] = array('OpenLayers.Layer.TMS("Lables","",
		{  url: '', serviceVersion: '.', layername: 'lables', alpha: false,
			type: 'png', isBaseLayer: false, getURL: getTileURL
		})');
$egMapsOLLayerGroups['Map'] = array('Base map', 'Terrain', 'Lables');
$egMapsOLLayerDependencies['Map'] = "<script>function getTileURL(bounds) {
	var res = this.map.getResolution();
	var x = Math.round((bounds.left - this.maxExtent.left) / (res * this.tileSize.w));
	var y = Math.round((bounds.bottom - this.maxExtent.bottom) / (res * this.tileSize.h));
	var z = this.map.getZoom();
	if (x >= 0 && y >= 0) {
		return this.url + "tiles/" + this.layername + "/" + z + "/" + x + "/" + y + "." + this.type;				
	} else {
		return "http://www.maptiler.org/img/none.png";
	}</script>");

some help will be greatly appreciated.

Mor200:03, March 4, 2012

Alternatively maybe I can adapt 'Maps_ImageLayer.php' to take one more parameter and call 'new OpenLayers.Layer.TMS' or change 'OpenStreetMap.js' instead?


The extension arthur did an amazing job, it seem to have everything I need. However in many places the the documentation is not uptodate with his code, so without being able to test this, I am stuck here.

Mor206:07, March 4, 2012
 

So what error(s) are you getting? I don't see anything wrong, but then again, I'm not that familiar with OpenLayers myself and had to look at the docs when implementing this, and it's been a while since I looked at the custom layer functionality. In fact I'm not completely sure it's working properly in Maps 1.0 and later.

Jeroen De Dauw15:31, March 4, 2012
 
 
 
 

Offline world map

Hello,

Can anyone help me find a map that is available interactively offline? Meaning no connection to the Internet. All data stored in local database. I would only require a world map with countries and would also like to be able to draw and add meta data such as extra information which is only relaxant to us. Any help would be much appreciated.

Thank you.

Bravekilla15:08, January 9, 2012

sorry answer to wrong questionand unable to drag on other location...

Fleon13:56, January 17, 2012
 

This extension does not support offline maps, unless you use the Images as layers functionality, but this is probably not what you are looking for.

Jeroen De Dauw12:47, January 27, 2012
 

In China google.com is unstable, how to load ditu.google.cn ondiscussionpage:Talk:Maps

Hi guys,

In China it is very slow and unstable to load google.com and maps.google.com, on contrary ditu.google.cn load without any problem. How can I set the map extension (I'm also using semantic map extension) that ditu.google.cn load instead of maps.google.com (preferably in English: http://ditu.google.cn/maps?hl=en&tab=wl)?

Thanks in advance for your help..

Olivier19:56, January 26, 2012

Resizing the Markers

Is it possible to change the size of the markers? I use Openlayers and markers are about 20 pix in square wich is pretty small on large resolution screens. So markers are nearly "invisible" on colorfull city maps.

92.79.145.13009:12, September 21, 2011

Sadly enough this is not possible at the moment, unless you load your markers via some KML layer.

Jeroen De Dauw12:39, September 25, 2011
 

My Custom Markers - Where do I place them?

We're using Maps 0.6.6

I've made some custom markers for display on our maps but cannot see where I need to place them on our server so that Maps can find them.

Is there a default location?

Can anyone help please?

Thanks.

81.103.57.16109:27, November 7, 2010

You need to upload them to your wiki, and can then point to them using for example File:CustomMarker.png

Jeroen De Dauw20:12, November 7, 2010

Ah! Thanks very much!

At the moment, the aspect ratio of each marker is a little odd. They appear squashed? Is there a way around this?

Anyway, thanks again.

Skyhook20:56, November 7, 2010

The aspect ratio is sort of an issue... You can not specify the image size, and it will default to the one of regular markers on initial load. However, when loading the map a second time (and the image is cached), Maps figures out it's size and makes the marker be displayed correctly.

Jeroen - LQT is failing when I login05:30, November 9, 2010

OK... thank you very much.

Skyhook16:57, November 9, 2010
 

I have the same problem. My custom markers have a size of 32x37 px. They are shown in the map with an wrong ratio and in a smaller size. Also after reloading the map, they are not shown correctly. I am using the last version of Maps and Mediawiki. What can I do to solve the problem?

92.225.30.21908:12, September 8, 2011
 

You can make your marker be displayed nicely in that aspect ratio used. This can be done by adding transparent areas to either left and right of the image or at the top and bottom. As user you cannot specify the aspect ratio at this time.

Jeroen De Dauw12:38, September 25, 2011
 
 
 

Displaying bounding boxes and/or WKT representations

I would like to be able to define a bounding box in a article and display it with the map extension. A bounding box is defined by a upper left and a lower right coordinate. Is it possible to do this now with the map extension an how?

Further it would be nice to be able to display any WKT definition of a polygon. WKT is a standard way to represent vector geometries. See: http://en.wikipedia.org/wiki/Well-known_text

Pedro14:17, August 4, 2011

Right now you can only specify points to be displayed in WikiText. However, you can load KML onto Google Maps v3 maps, which obviously allows displaying polygons. If it's a KML file hosted by Google, you can load it using the gkml parameter, ie gkml=http://location.of.your.file. If it's not a Google hosted file, you can load it using the kml parameter, ie kml=http://location.of.your.file.

Jeroen De Dauw17:30, August 8, 2011
 

Would it be possible to get a wiki page (or a #ask query) to produce a downloadable kml file and then display we would just have to set the link to this kml file to gkml= to have it displayed in a map?

Pedro15:51, September 6, 2011
 

Yeah, you can do an ask query with format=kml. This will get you a link, from which you can copy the target (manually) and feed that to the gkml parameter. Since the output of the kml format is always an HTML link, it cannot be put directly put as value for gkml.

Jeroen De Dauw12:36, September 25, 2011
 

Resizing the Markers

Is it possible to change the size of the markers? I use Openlayers and markers are about 20 pix in square wich is pretty small on large resolution screens. So markers are nearly "invisible" on colorfull city maps.

92.79.145.13009:12, September 21, 2011

map not loading after doEdit(...)

Hi - wondering if anyone has seen this bug or recognizes what might be causing it:

Basically I have a special page that inserts the google map code into an article (even something as simple as "{{#display_point:26.2218386, -104.560546}}" )

However, after I call doEdit on the article and then go to view it, the map just sits with a "Loading map..." message.

If I then edit the article like normal but don't make ANY changes, just save, the map will load as expected.

Very odd...

any ideas? i'm blocked right now...

Dylan03:39, August 14, 2011

That's odd. What special page is doing this, and can you link to it? Also, what version of Maps?

My guess is that the resources the map needs (ie a bunch of JavaScript and CSS) are not getting added to the page for some reason.

Jeroen De Dauw05:41, August 24, 2011
 

Hi Jeroen - thanks for the reply.. i've finally been able to come back to this and still can't figure it out.. i'm really hoping you have some idea what's going on.

Essentially I have a Special page that allows users to edit pages without going through the normal Edit page and the possible confusing wikitext.

When the user is saving their edits from my Special page, I do something (simplified here for my example) like :

$text = '{{#display_points:Japan}}'; $article->doEdit($text, ...);

When I then go to look at the page, it just sits on a Loading message for the map

Dylan 08311.jpg

When I look at the actual source of the wikitext through the normal Edit page, it looks exactly as it should:

Dylan 08312.jpg

Then, if I save it without making ANY changes, it displays the map correctly. Looking at the Page History after this save doesn't show any changes so for some reason the map starts to work after I save it through the Edit page without actually making a change to the wikitext.

Very odd problem and frustrating.. do you have any idea what could be going on?

Many thanks, Dylan

Dylan19:58, August 31, 2011
 

Ok here are a couple more clues to this puzzle:

  • I noticed that your Parser Function was getting called and in fact your google map javascript had been added after the map_google3_1 div, but it seems to happen right after I called my doEdit in my Special page, not when the page was actually being loaded (I put a die(...) in your Parser Function's render() function and it died right after I did the doEdit, not when the page was being loaded).
  • That led me to wonder if Purging the page would fix it, which it DID. Purging the article recalled your render() function correctly and let the map render correctly. Obviously this workaround won't work for real users...
  • I will also just mention the only thing helpful from Firebug. When the map does NOT work (i.e. right after it loads after my doEdit function) it does NOT call the mediawiki resource loader. When the map DOES work (i.e. after I resave it from the Edit page), the page DOES call the resource loader (.../load.php?debug=false&lang=en&modules=ext.maps.gm3.geoxml&....etc...)

Hope any of that helps... Dylan

Dylan20:15, August 31, 2011
 

Results table but empty map

I'm having a strange problem with the latest version of Semantic MediaWiki, Maps and Semantic Maps. When I do a query and have format=table it shows a list of five entries, however when I put format=map it shows an empty map with no markers. You can see an example http://ws101.opiferum.net/~hamewiki/index.php/Etusivu can anyone help at all?


Versions:

Semantic MediaWiki (Version 1.6 RC1)

Semantic Maps (Version 1.0)

Maps (Version 1.0)

Validator (Version 0.4.8)

CraftyCoding11:22, July 21, 2011

Your property is not of type coordinates. See here. You should have "[[Has type::Geographic coordinate]]", not "Has type::Geographic coordinate".

Jeroen De Dauw18:32, July 21, 2011
 

Moving a marker in edit mode

I'd like to allow users to move a location marker on a map that is displayed on a Mediawiki page.

My idea is to have this work in page edit mode... or maybe in a special "edit map" mode.

For example: a user would click on the "edit" tab on the wiki article page. The map would then appear alongside the page text in "edit" mode with some simple instructions shown below the map. The user would be able to zoom into and out of an area on the map, left-click and slide the map around, identify a location, right-click to place a marker, right-click and drag to adjust the position of the marker and finally 'save' which would publish the map on the article page. This functionality is similar to that on http://pathogenomics.bham.ac.uk/hts/

Ideally I would also like to collect the co-ordinates of the marker from the map and publish them automatically on the wiki page to allow indexing.

Then integrate this geodata and other bits of information on the wikipage to make an openlayer for use on openstreetmap and also semantic maps (natch).

Does this sort of functionality appear on your development roadmap?

Payo09:42, June 11, 2011

I think that SemanticMaps provides the functionallity that you are asking for. But it is an extension to Semantic MediaWiki.

I am working on a project where we are hesitating to use Semantic Mediawiki, so I have modified the SemanticMaps and implemented a relationship "haslocation" for vanilla MediaWiki and have a graphical edit view for this integrated with a WYSIWYG editor. The modified SemanticMaps is available here: [1]. It might be a bit specific to our project, but is maybe something that can be built on.

I have also added a couple of things to the Maps extension to be able to save the zoom level and to use ajax suggest for addresses, as I describe in other threads here.

Andreas Jonsson06:14, June 15, 2011
 

This functionality can indeed be obtained by using Maps, Semantic Maps, SMW and Semantic Forms. See here for an example. There is no GUI editing of coordinates further then that. I think it'd be great to have such a feature, but unless someone funds the development for it or the fork of Andreas turns out to be useful, don't expect to see it soon.

Jeroen De Dauw00:57, June 16, 2011
 

How much do you think it would cost?

Payo08:48, June 18, 2011
 

My typical rate for work on Maps is $80/h. The duration depends on what exactly you want, but will definitely be 5h or more. You can contact me by email: jeroendedauw at gmail.com or via Skype: jeroendedauw

Jeroen De Dauw21:13, June 18, 2011
 

Geocode suggest ajax service

I've implemented an ajax service for obtaining a list of autocompletions that can be used for instance with jquery.ui.autocomplete. Here it is as a patch against version 0.7.6. It adds two configuration variables: $egMapsGeocodeDefaultountryBias and $egMapsGeocodeDefaultLanguage. (We are using this in a dialog box in ckeditor for inputing coordinates. The whole thing can be obtained from our project site.) The Yahoo backend is untested.

=== modified file 'extensions/Maps/Maps.hooks.php'
--- extensions/Maps/Maps.hooks.php	2011-05-06 15:42:28 +0000
+++ extensions/Maps/Maps.hooks.php	2011-06-07 17:04:19 +0000
@@ -74,5 +74,26 @@
 		
 		return true;
 	}
-	
+
+	public static function getGeocodeSuggestions( $args ) {
+		$argv = split( '\|', $args );
+		$addressFragment = $argv[0];
+		if ( isset($argv[1]) ) {
+			$id = $argv[1];
+		} else {
+			$id = '';
+		}
+
+		$suggestions = MapsGeocoders::getSuggestions( $addressFragment, $id );
+
+		if ( $suggestions != null ) {
+			$response = new AjaxResponse( FormatJson::encode($suggestions->getSuggestions()) );
+			$response->setContentType( 'application/json' );
+		} else {
+			$response = new AjaxResponse( '{ status: "No geocoding service" }' );
+			$response->setContentType( 'application/json' );
+		}
+
+		return $response;
+	}
 } 

=== modified file 'extensions/Maps/Maps.php'
--- extensions/Maps/Maps.php	2011-05-06 15:42:28 +0000
+++ extensions/Maps/Maps.php	2011-06-08 12:45:49 +0000
@@ -81,6 +81,9 @@
 $wgAutoloadClasses['iMappingService'] 			= $incDir . 'iMappingService.php';
 $wgAutoloadClasses['MapsMappingServices'] 		= $incDir . 'Maps_MappingServices.php';
 $wgAutoloadClasses['MapsMappingService'] 		= $incDir . 'Maps_MappingService.php';
+$wgAutoloadClasses['MapsGeocodeSuggest']		= $incDir . 'Maps_GeocodeSuggest.php';
+$wgAutoloadClasses['MapsXmlParser'] 			= $incDir . 'Maps_XmlParser.php';
+$wgAutoloadClasses['MapsGeocodeXmlParser']		= $incDir . 'Maps_XmlParser.php';
 
 // Autoload the "includes/criteria/" classes.
 $criDir = $incDir . 'criteria/';
@@ -128,6 +131,9 @@
 $wgAutoloadClasses['MapsGeocode'] 				= $phDir . 'Maps_Geocode.php';
 $wgAutoloadClasses['MapsGeodistance'] 			= $phDir . 'Maps_Geodistance.php';	
 
+// Ajax calls
+$wgAjaxExportList[] = 'MapsHooks::getGeocodeSuggestions';
+
 // To ensure Maps remains compatible with pre 1.16.
 if ( !class_exists( 'Html' ) ) {
 	$wgAutoloadClasses['Html'] = $egMapsDir . 'compat/Html.php';

=== added file 'extensions/Maps/includes/Maps_GeocodeSuggest.php'
--- extensions/Maps/includes/Maps_GeocodeSuggest.php	1970-01-01 00:00:00 +0000
+++ extensions/Maps/includes/Maps_GeocodeSuggest.php	2011-06-07 08:42:13 +0000
@@ -0,0 +1,64 @@
+<?php
+
+/**
+ * Class for representing a list of suggested geocodes resulting from
+ * a search.
+ * 
+ * @since
+ * 
+ * @file Maps_GeocodeSuggest.php
+ * @ingroup Maps
+ * 
+ * @author Andreas Jonsson
+ */
+class MapsGeocodeSuggest {
+
+	private $suggestions = array();
+	private $status = null;
+
+	private $curCoordinates = null;
+	private $curLabel = null;
+	private $limit;
+	private $pushes = 0;
+
+	public function __construct( $limit = null ) {
+		$this->limit = $limit;
+	}
+
+	public function push() {
+		if ( $this->curCoordinates != null && $this->curLabel != null
+			&& ($this->limit == null || $this->pushes < $this->limit)
+			&& !isset($this->suggestions[$this->curLabel])
+		) {
+			$this->pushes++;
+			$this->suggestions[$this->curLabel] = $this->curCoordinates;
+		}
+		$this->curCoordinates = null;
+		$this->curLabel = null;
+	}
+
+	public function setLabel( $label ) {
+		$this->curLabel = $label;
+	}
+
+	public function setCoordinates( $coordinates ) {
+		$this->curCoordinates = $coordinates;
+	}
+
+	public function setStatus( $status ) {
+		$this->status = $status;
+	}
+
+	public function getSuggestions() {
+		return array(
+			'suggestions' => $this->suggestions,
+			'status' => $this->status
+		);
+	}
+
+	public function printSuggestions() {
+		foreach( $this->suggestions as $label => $coordinates ) {
+			echo( "{$label}: {$coordinates}\n" );
+		}
+	}
+}

=== modified file 'extensions/Maps/includes/Maps_Geocoder.php'
--- extensions/Maps/includes/Maps_Geocoder.php	2011-05-06 15:42:28 +0000
+++ extensions/Maps/includes/Maps_Geocoder.php	2011-06-07 07:01:01 +0000
@@ -159,5 +159,16 @@
 	public function hasGlobalCacheSupport() {
 		return true;
 	}
+
+	/**
+	 * Return a list of suggestions for completing an address
+	 * fragment.
+	 *
+	 * @param string $addressFragment
+	 * @param int $maxSuggestions
+	 * 
+	 * @return MapsGeocodeSuggest
+	 */
+	public abstract function getSuggestions( $addressFragment, $maxSuggestions = 8 );
 	
 }
\ No newline at end of file

=== modified file 'extensions/Maps/includes/Maps_Geocoders.php'
--- extensions/Maps/includes/Maps_Geocoders.php	2011-05-06 15:42:28 +0000
+++ extensions/Maps/includes/Maps_Geocoders.php	2011-06-07 08:25:37 +0000
@@ -327,5 +327,20 @@
 		
 		return $geocoderIdentifier;
 	}
-	
+
+	/**
+	 * Get a list of suggested addressess from an address fragment.
+	 *
+	 * @return MapsGeocodeSuggest or null if there is no service that
+	 * is capable of geocoding.
+	 */
+	public static function getSuggestions( $addressFragment, $serviceId ) {
+		if ( self::canGeocode() ) {
+			$geocoder = MapsGeocoders::getValidGeocoderInstance( $serviceId );
+			return $geocoder->getSuggestions( $addressFragment );
+		} else {
+			return null;
+		}
+	}
+
 }

=== added file 'extensions/Maps/includes/Maps_XmlParser.php'
--- extensions/Maps/includes/Maps_XmlParser.php	1970-01-01 00:00:00 +0000
+++ extensions/Maps/includes/Maps_XmlParser.php	2011-06-07 08:43:40 +0000
@@ -0,0 +1,91 @@
+<?php
+/**
+ * Super class for convenient implementation of xml parsers.
+ * 
+ */
+abstract class MapsXmlParser {
+
+	private $parser = null;
+	private $data = array();
+	private $openTags = array();
+	private $closeTags = array();
+
+	public function __construct() {
+		$class = get_class($this);
+		
+		$this->parser = xml_parser_create();
+		xml_set_object( $this->parser, $this );
+
+		foreach ( get_class_methods( $class ) as $m ) {
+			if ( preg_match( '/(.+)_open$/', $m, $matches ) ) {
+				$tag = $matches[1];
+				$this->openTags[$tag] = true;
+			} elseif ( preg_match( '/(.+)_close$/', $m, $matches ) ) {
+				$tag = $matches[1];
+				$this->closeTags[$tag] = true;
+			}
+		}
+
+		xml_parser_set_option( $this->parser, XML_OPTION_CASE_FOLDING, 0 );
+		xml_set_element_handler( $this->parser, 'handleElementOpen', 'handleElementClose' );
+		xml_set_character_data_handler( $this->parser, 'appendData' );
+	}
+
+	function __destruct() {
+		if ( $this->parser != null ) {
+			xml_parser_free( $this->parser );
+		}
+	}
+
+	public function handleElementOpen( $parser, $name, $attribs ) {
+		if ( isset($this->openTags[ $name ]) ) {
+			$this->{"{$name}_open"}($attribs);
+		}
+	}
+
+	public function handleElementClose( $parser, $name ) {
+		if ( isset($this->closeTags[ $name ]) ) {
+			$this->{"{$name}_close"}();
+		}
+	}
+
+	public function appendData( $parser, $data ) {
+		if ( count($this->data) > 0 ) {
+			$this->data[count($this->data) - 1] .= $data;
+		}
+	}
+
+	protected function pushData() {
+		array_push($this->data, '');
+	}
+
+	protected function popData() {
+		return array_pop($this->data);
+	}
+
+	public function parse( $data, $is_final = true ) {
+		xml_parse( $this->parser, $data, $is_final );
+	}
+
+}
+
+/**
+ * Super class for generation of suggestion lists from an XML
+ * response.
+ */
+abstract class MapsGeocodeXmlParser extends MapsXmlParser {
+
+	protected $suggest;
+
+	public function __construct( $limit = null ) {
+		parent::__construct();
+		$this->suggest = new MapsGeocodeSuggest( $limit );
+	}
+
+	public function getSuggestions() {
+		$this->suggest->setStatus( $this->getStatus() );
+		return $this->suggest;
+	}
+
+	protected abstract function getStatus();
+}

=== modified file 'extensions/Maps/includes/geocoders/Maps_GeonamesGeocoder.php'
--- extensions/Maps/includes/geocoders/Maps_GeonamesGeocoder.php	2011-05-06 15:42:28 +0000
+++ extensions/Maps/includes/geocoders/Maps_GeonamesGeocoder.php	2011-06-08 12:58:46 +0000
@@ -61,5 +61,77 @@
 			'lon' => $lon
 		);		
 	}
-	
-}
\ No newline at end of file
+
+	public function getSuggestions( $addressFragment, $maxSuggestions = 5 ) {
+		global $egMapsGeocodeDefaultCountryBias, $egMapsGeocodeDefaultLanguage;
+
+		$url =	'http://ws.geonames.org/search?q='
+			. urlencode( $addressFragment )
+			. '&maxRows=' . $maxSuggestions;
+
+		if ( isset($egMapsGeocodeCountryBias) ) {
+			$url .= '&countryBias=' . $egMapsGeocodeDefaultCountryBias;
+		}
+
+		if ( isset($egMapsGeocodeLanguage) ) {
+			$url .= '&language=' . $egMapsGeocodeDefaultLanguage;
+		}
+
+		wfDebug('Requesting from geoservice: "' . $url . "\n");
+		$response = Http::get( $url );
+
+		wfDebug('Got response: "' . $response . "\"\n" );
+		$parser = new MapsGeonamesGeocodeXmlParser();
+		$parser->parse( $response );
+
+		return $parser->getSuggestions();
+	}
+	
+}
+
+class MapsGeonamesGeocodeXmlParser extends MapsGeocodeXmlParser {
+
+	private $status = null;
+	private $location = null;
+
+	public function geoname_open() {
+		$this->location = array(null, null);
+	}
+
+	public function geoname_close() {
+		$l = $this->location;
+		if ( $l[0] != null && $l[1] != null ) {
+			$this->suggest->setCoordinates( "{$l[0]},{$l[1]}" );
+		}
+		$this->location = null;
+		$this->suggest->push();
+	}
+	
+	public function lat_open() {
+		$this->pushData();
+	}
+
+	public function lat_close() {
+		$this->location[0] = $this->popData();
+	}
+
+	public function lng_open() {
+		$this->pushData();
+	}
+
+	public function lng_close() {
+		$this->location[1] = $this->popData();
+	}
+
+	public function toponymName_open() {
+		$this->pushData();
+	}
+
+	public function toponymName_close() {
+		$this->suggest->setLabel( $this->popData() );
+	}
+
+	public function getStatus() {
+		return 'OK';
+	}
+}

=== modified file 'extensions/Maps/includes/geocoders/Maps_GoogleGeocoder.php'
--- extensions/Maps/includes/geocoders/Maps_GoogleGeocoder.php	2011-05-06 15:42:28 +0000
+++ extensions/Maps/includes/geocoders/Maps_GoogleGeocoder.php	2011-06-07 20:49:09 +0000
@@ -77,5 +77,91 @@
 	public static function getOverrides() {
 		return array( 'googlemaps2', 'googlemaps3' );
 	}
-	
-}
\ No newline at end of file
+
+	public function getSuggestions( $addressFragment, $maxSuggestions = 8 )	 {
+		global $egMapsGeocodeDefaultCountryBias;
+		global $egMapsGeocodeDefaultLanguage;
+		$url =	'http://maps.googleapis.com/maps/api/geocode/xml?sensor=false&address='
+			. urlencode( $addressFragment );
+
+		if ( isset($egMapsGeocodeDefaultCountryBias) ) {
+			$url .= '&region=' . $egMapsGeocodeDefaultCountryBias;
+		}
+
+		if ( isset($egMapsGeocodeDefaultLanguage) ) {
+			$url .= '&language=' . $egMapsGeocodeDefaultLanguage;
+		}
+		
+		$response = Http::get( $url );
+
+		$parser = new MapsGoogleGeocodeXmlParser( $maxSuggestions );
+		$parser->parse( $response );
+
+		return $parser->getSuggestions();
+	}
+}
+
+class MapsGoogleGeocodeXmlParser extends MapsGeocodeXmlParser {
+
+	private $status = null;
+	private $location = null;
+
+	public function __construct( $limit ) {
+		parent::__construct( $limit );
+	}
+
+	public function status_open() {
+		$this->pushData();
+	}
+
+	public function status_close() {
+		$this->status = $this->popData();
+	}
+
+	public function getStatus() {
+		return $this->status;
+	}
+
+	public function result_open() {
+	}
+
+	public function result_close() {
+		$this->suggest->push();
+	}
+
+	public function formatted_address_open() {
+		$this->pushData();
+	}
+
+	public function formatted_address_close() {
+		$this->suggest->setLabel( $this->popData() );
+	}
+
+	public function location_open() {
+		$this->location = array(null, null);
+	}
+
+	public function location_close() {
+		$l = $this->location;
+		if ( $l[0] != null && $l[1] != null ) {
+			$this->suggest->setCoordinates( "{$l[0]},{$l[1]}" );
+		}
+		$this->location = null;
+	}
+
+	public function lat_open() {
+		$this->pushData();
+	}
+
+	public function lat_close() {
+		$this->location[0] = $this->popData();
+	}
+
+	public function lng_open() {
+		$this->pushData();
+	}
+
+	public function lng_close() {
+		$this->location[1] = $this->popData();
+	}
+}

=== modified file 'extensions/Maps/includes/geocoders/Maps_YahooGeocoder.php'
--- extensions/Maps/includes/geocoders/Maps_YahooGeocoder.php	2011-05-06 15:42:28 +0000
+++ extensions/Maps/includes/geocoders/Maps_YahooGeocoder.php	2011-06-07 08:44:25 +0000
@@ -72,5 +72,132 @@
 	public static function getOverrides() {
 		return array( 'yahoomaps' );
 	}
-	
-}
\ No newline at end of file
+
+	public function getSuggestions( $addressFragment, $maxSuggestions = 8 )	 {
+		global $egGoogleMapsKey;
+		global $egMapsGeocodeDefaultCountryBias;
+		global $egMapsGeocodeDefaultLanguage;
+		$url =	'http://maps.google.com/maps/geo?q='
+			. urlencode( $addressFragment )
+			. '&key=' . urlencode( $egGoogleMapsKey )
+			. '&output=xml';
+
+		if ( isset($egMapsGeocodeCountryBias) ) {
+			$url .= '&region=' . $egMapsGeocodeDefaultCountryBias;
+		}
+
+		if ( isset($egMapsGeocodeLanguage) ) {
+			$url .= '&language=' . $egMapsGeocodeDefaultLanguage;
+		}
+		
+		$response = Http::get( $url );
+
+		$parser = new MapsYahooGeocodeXmlParser( $maxSuggestions );
+		$parser->parse( $response );
+
+		return $parser->getSuggestions();
+	}
+}
+
+class MapsYahooGeocodeXmlParser extends MapsGeocodeXmlParser {
+
+	private $error = null;
+	private $errorMessage = null;
+	private $location = null;
+	private $line;
+
+	public function Error_open() {
+		$this->pushData();
+	}
+
+	public function Error_close() {
+		$this->error = $this->popData();
+	}
+
+	public function ErrorMessage_open() {
+		$this->pushData();
+	}
+
+	public function ErrorMessage_close() {
+		$this->errorMessage = $this->popData();
+	}
+
+	public function getStatus() {
+		if ( isset($this->error) && $this->error == 0 ) {
+			return 'OK';
+		} else {
+			return $this->errorMessage;
+		}
+	}
+
+	public function Result_open() {
+		$this->line = array(null, null, null);
+		$this->location = array(null, null);
+	}
+
+	public function Result_close() {
+		$l = $this->location;
+		if ( $l[0] != null && $l[1] != null ) {
+			$this->suggest->setCoordinates( "{$l[0]},{$l[1]}" );
+		}
+		if ( $this->line1 != null ) {
+			$label = $this->line1;
+			$first = false;
+		}
+		$label = '';
+		$first = true;
+		foreach ( array( 0, 1, 2 ) as $i ) {
+			if ( $this->line[$i] != null ) {
+				if ($first) {
+					$first = false;
+				} else {
+					$label .= ' ';
+				}
+				$label .= $this->line[$i];
+			}
+		}
+		$this->suggest->setLabel( $label );
+		$this->location = null;
+		$this->suggest->push();
+	}
+
+	public function line1_open() {
+		$this->pushData();
+	}
+
+	public function line1_close() {
+		$this->line[0] = $this->popData();
+	}
+
+	public function line2_open() {
+		$this->pushData();
+	}
+
+	public function line2_close() {
+		$this->line[1] = $this->popData();
+	}
+
+	public function line3_open() {
+		$this->pushData();
+	}
+
+	public function line3_close() {
+		$this->line[2] = $this->popData();
+	}
+
+	public function latitude_open() {
+		$this->pushData();
+	}
+
+	public function latitude_close() {
+		$this->location[0] = $this->popData();
+	}
+
+	public function longitude_open() {
+		$this->pushData();
+	}
+
+	public function longitude_close() {
+		$this->location[1] = $this->popData();
+	}
+}

Andreas Jonsson13:07, June 8, 2011

Neat! Can I see this in action somewhere? Also, where can I download your patched version (Can't find any way to get a tarball or checkout the source on the site you linked)? If it works nicely I'll probably do the effort of merging it into trunk (which has changed quite a bit since 0.7.6).

I did see you made quite some changes and also created some MapsForms extension. What's your motivation behind this work? If you want your additions to be available for everyone in the main version of the extensions, you're probably better of getting commit access to the WMF SVN repo, so you don't end up with a version that diverges so much from the main one that it's a pain to merge things, if possible at all. I can provide more info on the process if needed :)

Edit: just had another quick look at your code. If you fork something and do not rewrite virtually everything, it's considered not very nice to remove the original authors and claim it as your own.

Jeroen De Dauw00:51, June 16, 2011
 

I apologize about the missing credits! I started to work on it as a separate extension and copied the code from Semantic Maps later and forgot to update the meta data. I will fix it!

You could check out our demowiki. Create a user (and change language to english under "Mina inställningar", unless you speak swedish). Go to some page other than the front page, for instance, this one and edit it. You'll get a graphical edit view. Click on the icon of a treasure map and you'll get the "place on map" dialog window.

Andreas Jonsson23:43, June 18, 2011
 

Regarding MapsForms, we're using it as a method to input coordinates from a dialog window. I wanted an abstraction layer and saw that Semantic Maps provided mostly what I needed. I have rather crudely removed SMW specific code from Semantic Forms and tailored it to fit our use case, and haven't had any ambitions to make it more widely usable.

Andreas Jonsson00:29, June 19, 2011
 
First page
First page
Previous page
Previous page
Last page
Last page