[OpenLayers-Users] [nethou@aliceadsl.fr: Re: Zoom on GML extent]

Christopher Schmidt crschmidt at metacarta.com
Mon Jan 18 18:15:48 EST 2010


----- Forwarded message from christophe triquet <nethou at aliceadsl.fr> -----

From: christophe triquet <nethou at aliceadsl.fr>
To: Christopher Schmidt <crschmidt at metacarta.com>
Date: Mon, 18 Jan 2010 22:54:46 +0100
Subject: Re: [OpenLayers-Users] Zoom on GML extent

2010/1/18 Christopher Schmidt <crschmidt at metacarta.com>

> On Mon, Jan 18, 2010 at 01:32:24PM +0100, christophe triquet wrote:
> > Hi,
> >
> > I'm adding a GML file in my map with the object OpenLayers.Layer.GML. I'm
> > trying to zoom to this layer extent at map's loading. I can do this if I
> > know de bounding box coordinates with a postgis query.
> >
> > My PHP code :
> >
> >         var bounds = new OpenLayers.Bounds();
> >         bounds.extend((new
> > OpenLayers.LonLat(<?=$xmin?>,<?=$ymin?>)).transform(wgs84,
> > map.getProjectionObject()));
> >         bounds.extend((new
> > OpenLayers.LonLat(<?=$xmax?>,<?=$ymax?>)).transform(wgs84,
> > map.getProjectionObject()));
> >         bounds.toBBOX();
> >         map.zoomToExtent(bounds);
> >
> > But this requires a server call and I want my map to use only datas in
> the
> > GML file and not to have to connect to a database.
> >
> > I have seen that GML files includes bounded box informations like :
> >
> >   <gml:boundedBy>
> >     <gml:Box>
> >
> >
> <gml:coord><gml:X>1.473839004763629</gml:X><gml:Y>43.43941299999661</gml:Y></gml:coord>
> >
> >
> <gml:coord><gml:X>1.647671004707115</gml:X><gml:Y>43.58098800002078</gml:Y></gml:coord>
> >     </gml:Box>
> >   </gml:boundedBy>
> >
> > Is it possible the get the gml extent to be able to automaticaly zoom on
> it
> > at loading ?
>
> Formats have a 'keepData' option or something like that, which then stashes
> the data on the .data property of the format. You could then use standard
> DOM methods to parse the data.
>
> Alternatively, you could just do:
>
>  map.zoomToExtent(dataLayer.getDataExtent());
>
> after the loadend event fires on the layer, which would iterate over the
> features and get a bounding box.
>
> Regards,
> --
> Christopher Schmidt
> MetaCarta
>

Thank you everybody for your answears.

That :
var vectorLayer = ...;
vectorLayer.events.on({
  "loadend": function() {
      map.zoomToExtent(vectorLayer.
getDataExtent());
  }
});
works if I deactivate and then reactivate my layer.

What I'm trying to do is to zoom to the extent at loading time.

The map.zoomToExtent(dataLayer.getDataExtent()); gives me a javascript error
"Bounds is null".

Maybe, I'm not calling this at the right time ? I have added this
if (!map.getCenter()) map.zoomToExtent(dataLayer.getDataExtent());
at the end of typical init method called in <body onload="init()">.

Any idea of what I'm doing wrong ?

Regards,
Christophe

----- End forwarded message -----

-- 
Christopher Schmidt
MetaCarta



More information about the Users mailing list