[OpenLayers-Users] Trying to draw a box on a map, and get the coordinates back.

Christopher Schmidt crschmidt at metacarta.com
Fri Nov 13 13:47:48 EST 2009


On Fri, Nov 13, 2009 at 01:17:19PM -0500, J. Cliff Dyer wrote:
> Thanks.  That's definitely a cleaner setup, but it didn't really solve
> the problem I was having.  Before the box would look like it was being
> drawn properly, but then the persistent copy would be vertically offset.
> Now it's offset from the time I start drawing.  Which is an improvement,
> because at least it will be easier for users to draw the box they want.
> Here's a screenshot to show what I mean: 
> 
> http://imgur.com/5cJ4H

http://faq.openlayers.org/vector-related-questions/why-dont-my-vector-features-work-over-google-yahoo-virtual-earth-etc/

"Use Spherical Mercator".

-- Chris

> The Box was drawn exactly from Cape Fear to Cape Hatteras, marked with
> little black dots on the screenshot.  However, the box itself starts
> drawing a bit above the location of the cursor.  It seems the further I
> get from the top of the display, the further displaced the box is.  It
> is impossible to get closer than ~2cm from the bottom of the map.  There
> also seems to be a very slight horizontal displacement.
> 
> Any thoughts on what might cause this displacement?  At this point, no
> transformation is being done--at least not in any of my code.
> 
> Cheers,
> Cliff
> 
> 
> 
> On Fri, 2009-11-13 at 09:58 -0700, Scott Lewis wrote:
> > I did something like this using one of the examples on the OpenLayers 
> > site, modified slightly.  Here's what I used:
> > 
> > boxControl = new OpenLayers.Control();
> > OpenLayers.Util.extend(boxControl, {
> >    draw: function() {
> >      this.box = new OpenLayers.Handler.RegularPolygon(boxControl, 
> > {"done": this.notice}, {sides:4, irregular:true, persist:true});
> >      this.box.activate();
> >    },
> > 
> >    notice: function(geom) {
> >      // whatever you want it to do after the box has been drawn
> >    }
> > });
> > 
> > // then add the boxControl to the map
> > 
> > This works pretty nicely.  Note that "geom" will be in the same 
> > projection as the map, so if you want the output to be in another 
> > projection (like a latitude/longitude display) you will have to go 
> > through the geometry and transform the points.  Also, you may have to go 
> > through the geometry to determine which point is which (it doesn't 
> > always start with the upper-left corner, and it's not always clockwise 
> > or counter-clockwise).  If interested, I can post some of the functions 
> > I do for that.
> > 
> > I hope this helps,
> > 
> > Scott Lewis
> > NSIDC
> > 
> > J. Cliff Dyer wrote:
> > > I'm trying to draw a box on a map, have it persist until another box
> > > gets drawn, and submit the coordinates of the box to a form.  I'm doing
> > > this to allow the user to search for objects within a given area.  
> > > 
> > > I'm doing this by using an OpenLayers.Handler.Box tool in a custom
> > > OpenLayers.Control, which then uses to the "done" callback of the draw
> > > method to create (or recreate) an OpenLayers.Feature.Vector and populate
> > > (or repopulate) a search form.
> > > 
> > > My immediate problem is that the persistent box is not in quite the same
> > > location as the box the user just drew.  I suspect this has something to
> > > do with projections, but since I never explicitly set projections, I'm
> > > not sure where the error sneaked in.  
> > > 
> > > More generally, I'm not sure I'm taking the optimal route from the
> > > bounds passed to the callback to the Vector feature.  Currently, I do
> > > the following:
> > > 
> > >   1) Take the incoming OpenLayers.Bounds object, 
> > >   2) Get an OpenLayers.Pixel from the the corners
> > >   3) Get the coordinates of each pixel using map.getLonLatFromPixel
> > >   4) Create a new OpenLayers.Bounds 
> > >   5) Extend it to my new coordinates
> > >   6) Convert it to a geometry
> > >   7) Convert it to an OpenLayers.Feature.Vector
> > > 
> > > Then I take the coordinates from step 3) and populate a form with them,
> > > which I then submit to my application server side.
> > > 
> > > The code for this is pasted here: http://pastebin.com/m300c24a5
> > > 
> > > Any pointers on how to do this more cleanly would be much appreciated.
> > > 
> > > Cheers,
> > > Cliff
> > > 
> > > 
> > > 
> > > _______________________________________________
> > > Users mailing list
> > > Users at openlayers.org
> > > http://openlayers.org/mailman/listinfo/users
> > 
> 
> 
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users

-- 
Christopher Schmidt
MetaCarta



More information about the Users mailing list