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

Pedro Baracho pedropbaracho at gmail.com
Mon Nov 16 09:05:18 EST 2009


I have done something like that but it didn't fill in any form component...
Check it out: http://pastebin.com/m6336e5e6
If you want to use it, you will have to replace the alert with the code that
fills in your form.

Btw, all projections on this example are EPSG:4326.


On Fri, Nov 13, 2009 at 4:56 PM, Scott Lewis <scott.lewis at nsidc.org> wrote:

> Ah, sorry about that, I misunderstood the problem you were having!
>
> 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
> >
> > 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
> _______________________________________________
> Users mailing list
> Users at openlayers.org
> http://openlayers.org/mailman/listinfo/users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/openlayers-users/attachments/20091116/9a979846/attachment.html


More information about the Users mailing list