[OpenLayers-Dev] Get resulting bounding box from TouchNavigation

Bessette-Halsema, Dominique E Dominique.Bessette at GDIT.com
Wed Oct 10 08:58:03 PDT 2012


Hi

Sorry I'm new to openlayers and javascript

I'm still having trouble getting the correct lat/lon bounding box when I zoom in.  I'm registering the map but I cant seem to get the correct bounds.

I'm using 
$wnd.boxControl = new $wnd.OpenLayers.Control.TouchNavigation();



Javascript:
    /**
     * Creates the OpenLayers map.
     * @param mapDiv the {@code div} element to put the map in
     */
    private static native void createMap(Element mapDiv,MapView scope) /*-{
        var options = {
            'restrictedExtent': new $wnd.OpenLayers.Bounds(-360.0, -90.0, 360.0, 90.0),
            'projection': 'EPSG:4326',
            'displayProjection': 'EPSG:4326',
            'maxResolution': 'auto',
            'maxExtent': new $wnd.OpenLayers.Bounds(-180.0, -90.0, 180.0, 90.0),
            'maxZoomLevel': 16,
            'numZoomLevels': 16,
            'units': 'degrees',
            'fractionalZoom': false,
            'controls': [],
            'theme': null
        };
        $wnd.map = new $wnd.OpenLayers.Map(mapDiv, options);
        $wnd.map.addLayers([$wnd.worldLayer, $wnd.aoiBoxes]);
        
         function notice() {
         		var EPSG4326 = new $wnd.OpenLayers.Projection("EPSG:4326");
				var EPSG900913 = new $wnd.OpenLayers.Projection("EPSG:900913");
				var bounds = $wnd.map.getExtent().clone();
				bounds = bounds.transform(EPSG900913, EPSG4326);
//            	var bounds = $wnd.map.getExtent().transform($wnd.map.projection, $wnd.map.displayProjection);
                var leftBottomPx = new $wnd.OpenLayers.Pixel(bounds.left, bounds.bottom);
                var rightTopPx = new $wnd.OpenLayers.Pixel(bounds.right, bounds.top);
                var leftBottomLonLat = $wnd.map.getLonLatFromViewPortPx(leftBottomPx);
                var rightTopLonLat = $wnd.map.getLonLatFromViewPortPx(rightTopPx);
                scope. at mil.navy.fnmoc.gis.mapss.selection.client.MapView::updateCorners(DDDD)(
                    leftBottomLonLat.lon, leftBottomLonLat.lat, rightTopLonLat.lon, rightTopLonLat.lat);
            }
    	$wnd.map.events.register("zoomend", $wnd.map, notice);
        
        
    }-*/;



Java:

/**
     * Updates the corners of the AOI bounding box in the corner text boxes.
     * @param minLon the new minimum longitude
     * @param minLat the new minimum latitude
     * @param maxLon the new maximum longitude
     * @param maxLat the new maximum latitude
     */
    private void updateCornerBoxes(double minLon, double minLat, double maxLon, double maxLat) {
    	 LOGGER.log(Level.FINE, "Update Corners "+minLon + " "+minLat + " " + maxLon + " "+ maxLat);
        this.southNumberField.setValue(clampLatitude(minLat));
        this.northNumberField.setValue(clampLatitude(maxLat));
        wrapLongitudes(minLon, maxLon);
    }


-----Original Message-----
From: andreas.hocevar at gmail.com [mailto:andreas.hocevar at gmail.com] On Behalf Of Andreas Hocevar
Sent: Tuesday, October 09, 2012 8:55 AM
To: Bessette-Halsema, Dominique E
Cc: openlayers-dev at lists.osgeo.org
Subject: Re: [OpenLayers-Dev] Get resulting bounding box from TouchNavigation

The easiest to achieve this is to register for the map's zoomend event:

    function notice() {
        var bounds = map.getExtent();
        /* your existing notice code here */
    }
    map.events.register("zoomend", this, notice);

Andreas.

On Tue, Oct 9, 2012 at 12:25 AM, Bessette-Halsema, Dominique E <Dominique.Bessette at gdit.com> wrote:
> Hi
>
> I'm having issues creating handlers for my mobile touch map.  Using TouchNavigation I'm able to Pan and PinchZoom but I need the resulting bounding box from the map.  If you look at the old Non-mobile code below I need to be able to call the notice function when the user is done panning and zooming.  Is there a way I can do this?
>
> TouchNavigation code
>
> private static native void createBoxControl(MapView scope, boolean activateBoxCtrl) /*-{
>     $wnd.boxControl = new $wnd.OpenLayers.Control.TouchNavigation({
>             dragPanOptions: {
>                 interval: 0, // non-zero kills performance on some mobile phones
>                 enableKinetic: true
>             }
>         })
>
>
> }-*/;
>
>
>
> Old Non-Mobile code
>
> private static native void createBoxControl(MapView scope, boolean activateBoxCtrl) /*-{
>         $wnd.boxControl = new $wnd.OpenLayers.Control();
>         $wnd.OpenLayers.Util.extend($wnd.boxControl, {
>             draw: function() {
>                 this.handler = new $wnd.OpenLayers.Handler.Box($wnd.boxControl,
>                     {"done": this.notice},
>                     {keyMask: $wnd.OpenLayers.Handler.MOD_SHIFT});
>                 if(activateBoxCtrl) {
>                     this.activate();
>                 }
>             },
>
>             notice: function(bounds) {
>                 var leftBottomPx = new $wnd.OpenLayers.Pixel(bounds.left, bounds.bottom);
>                 var rightTopPx = new $wnd.OpenLayers.Pixel(bounds.right, bounds.top);
>                 var leftBottomLonLat = $wnd.map.getLonLatFromViewPortPx(leftBottomPx);
>                 var rightTopLonLat = $wnd.map.getLonLatFromViewPortPx(rightTopPx);
>                 scope. at mil.navy.fnmoc.gis.mapss.selection.client.MapView::updateCorners(DDDD)(
>                     leftBottomLonLat.lon, leftBottomLonLat.lat, rightTopLonLat.lon, rightTopLonLat.lat);
>             }
>         });
>     }-*/;
> _______________________________________________
> Dev mailing list
> Dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/openlayers-dev



--
Andreas Hocevar
OpenGeo - http://opengeo.org/
Expert service straight from the developers.



More information about the Dev mailing list