[Users] Help with OpenLayers.Format.GeoJSON

Eric Lemoine eric.lemoine at camptocamp.com
Mon Sep 13 19:04:13 CEST 2010


On Monday, September 13, 2010, Pol <d.paolino at gmail.com> wrote:
> Hello all,
> I'm moving my whole project to the Drupal Framework and I'm using the services module who can send data in many format(xml, json, amfphp, etc etc).
> Before using it, I was using simple php to send the data to my store, like this:
>
> 	MarkersStore = new GeoExt.data.FeatureStore({
> 		layer: MarkersLayer,
> 		proxy: new GeoExt.data.ProtocolProxy({
> 			protocol: new OpenLayers.Protocol.HTTP({
> 				url: get_markers.php,
> 				format: new OpenLayers.Format.GeoJSON({
> 					'internalProjection': proj900913,
> 					'externalProjection': proj4326
> 				}),
> 				readWithPOST: true
> 			})
> 		}),
> 		autoLoad: false,
> 	});
>
> Now I have to modify my code to get it working with the tools provided by this amazing framework.
> My Json code look like this now:
> {    "#error": false,
>     "#data": {
>         "type": "FeatureCollection",
>         "features": [
>             {
>                 "geometry": {
>                     "type": "Point",
>                     "coordinates": [
>                         4.35205865469,
>                         50.8235093311
>                     ]
>                 },
>                 "properties": {
>                     "img": "sites/default/modules/lukoil/lukoil.jpg",
>                     "inf": "Lukoil ID 3",
>                     "html": null
>                 }
>             }]
>       }
> }
>
> The FeatureCollection I use to parse is now embedded in another container.
> That means that my old FeatureStore is no more working with those data and I don't know how to solve this.
>
> Any idea ?
> My store look like this now:
> 	MarkersStore = new GeoExt.data.FeatureStore({
> 		layer: MarkersLayer,
> 		proxy: new GeoExt.data.ProtocolProxy({
> 			protocol: new OpenLayers.Protocol.HTTP({
> 				url: /services/json,
> 				params: {'method':'\"markers.get\"'},
> 				format: new OpenLayers.Format.GeoJSON({
> 					'internalProjection': proj900913,
> 					'externalProjection': proj4326
> 				}),
> 				readWithPOST: true
> 			})
> 		}),
> 		autoLoad: false,
> 	});
>
> Thanks for the help !

Hi

This framework isn't so amazing since it doesn't support GeoJSON.
Sorry I couldn't resist :-)

The representation format of the received data is not GeoJSON, so it's
no surprise that Format. GeoJSON cannot read that.

What you can do is define your own Format, with something like that for example:

    new OpenLayers.Format.GeoJSON({
         read: function() {
             var obj = OpenLayers.Format.JSON.read.apply(this, arguments);
             return OpenLayers.Format.GeoJSON.read.apply(this, [obj]);
         }
     });

Cheers,

-- 
Eric Lemoine

Camptocamp France SAS
Savoie Technolac, BP 352
73377 Le Bourget du Lac, Cedex

Tel : 00 33 4 79 44 44 96
Mail : eric.lemoine at camptocamp.com
http://www.camptocamp.com


More information about the Users mailing list