Take the 2-minute tour ×
Geographic Information Systems Stack Exchange is a question and answer site for cartographers, geographers and GIS professionals. It's 100% free, no registration required.

Below is my code and a pic. When I finish making my circle on a Google map with Openlayers, I get the following coordinates but I want coordinates like E.G:

bottom: -27.762124575762 left: 25.828500424238 right: 27.402749575762 top: -26.187875424238

But instead I get:

enter image description here

Here is my code:

            function init() {

            // Add the map
            var options = {
            projection: new OpenLayers.Projection("EPSG:900913"),
            displayProjection: new OpenLayers.Projection("EPSG:4326"),
            units: "m",
            maxExtent: new OpenLayers.Bounds(-20037508.34, -20037508.34,
                                             20037508.34, 20037508.34)
        };
        map = new OpenLayers.Map('map', options);

        // Add the OpenStreetMaps Layer
        var osm = new OpenLayers.Layer.OSM.Mapnik("OpenStreetMap (Mapnik)", {
            displayOutsideMaxExtent: true,
            wrapDateLine: true,
            buffer: 0
        });

        // Add the google maps Layer
        var gmap = new OpenLayers.Layer.Google("Google", {sphericalMercator:true});
        map.addLayer(gmap);

        // http://bingmapsportal.com/ and use that instead.
        var apiKey = "AqTGBsziZHIJYYxgivLBf0hVdrAk9mWO5cQcb8Yux8sW5M8c8opEC2lZqKR1ZZXf";

        // BING Maps
        var veroad = new OpenLayers.Layer.Bing({
        key: apiKey,
        type: "Road",
        wrapDateLine: true
        });

        map.addLayer(veroad);

        // This is the call to create the OpenLayers Vector Framework Circle Layer and Edit Toolbar
        var wmsLayer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
            "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'});

        // Now we must define our vector style
        OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2';     

        // Styles for Default and Select states
            var myStyles = new OpenLayers.StyleMap({
            "default": new OpenLayers.Style({
                fillColor: "#000",
                fillOpacity: 0.3,
                strokeColor: "#000",
                strokeOpacity: 0.3,
                strokeWidth: 1,
                graphicZIndex: 1
            }),
            "select": new OpenLayers.Style({
                fillColor: "#ccc",
                fillOpacity: 0.6,
                strokeColor: "#ccc",
                strokeWidth: 1,
                label: "Label for Mouseover",
                labelAlign: "cc",
                fontColor: "#333333",
                fontOpacity: 0.9,
                fontFamily: "Arial",
                fontSize: 14,
                graphicZIndex: 2
            })
        });

        // Add a vector Layer which holds the markers
        vectors = new OpenLayers.Layer.Vector("Vector Layer");
        map.addLayer(vectors);

        vlayer = new OpenLayers.Layer.Vector( "Editable" , {
            styleMap: myStyles,
            rendererOptions: {zIndexing: true}
        } );
                map.addLayer(vlayer); 
        // Options for the sides wanted in the default circle e.g 3 sides = triangle
        polyOptions = {sides: 40};

        // At this point we must make a control to draw a circle on the map after a button to activate is clicked
        polygonControl = new OpenLayers.Control.DrawFeature(vlayer,
                                        OpenLayers.Handler.RegularPolygon,
                                        {handlerOptions: polyOptions} );

        // Now we add the an alert for an option to delete once the user has drawn a circle or vector on the map
        vlayer.events.on({
        featuresadded: function (event) {
        var confirmPolygon = function () { return confirm("Do you want to keep this polygon?") };

        if (!confirmPolygon()) {
            vlayer.removeFeatures(event.features);
          }
         }
        });

        // Now we call an alert to get the bounds or coordinates from a circle or vector we have drawn 
        vlayer.events.on({
        featuresadded: onFeaturesAdded
        });

        function onFeaturesAdded(event){
        var bounds = event.features[0].geometry.getBounds();
        var answer = "bottom: " + bounds.bottom  + "\n";
        answer += "left: " + bounds.left  + "\n";
        answer += "right: " + bounds.right  + "\n";
        answer += "top: " + bounds.top  + "\n";
        alert(answer);
        }

         }
share|improve this question
add comment

1 Answer

up vote 6 down vote accepted

You just need to re-project the geometry before displaying it:

var bounds = event.features[0].geometry.getBounds();

Should be:

var mapProj =  map.getProjectionObject();
var epsg4326 = new OpenLayers.Projection("epsg:4326");
// OR  in your case ...
// var epsg4326  = map.displayProjection;

var boundsNative = event.features[0].geometry.getBounds();
var boundsLatLon = boundsNative.transform( mapProj , epsg4326  );

Of course you can combine above into 1 line, just splitting up so you see what's going on.

share|improve this answer
    
Thanks Vadim . That worked , Just gave me a bug with my hover effect, Trying to go through my code and fix it now. If I don't come right , I will post another question:) –  Blake Loizides Mar 3 '12 at 9:17
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.