Package globus.glmap

Class GLMapViewRenderer

java.lang.Object
globus.glmap.GLNativeObject
globus.glmap.GLMapViewRenderer
All Implemented Interfaces:
android.view.SurfaceHolder.Callback, android.view.SurfaceHolder.Callback2, android.view.TextureView.SurfaceTextureListener

public class GLMapViewRenderer extends GLNativeObject implements android.view.SurfaceHolder.Callback2, android.view.TextureView.SurfaceTextureListener
Renderer of map
  • Field Details

    • screenScale

      public float screenScale
      Screen scale
    • attachedView

      public android.view.View attachedView
      View where this render is attached
    • surfaceWidth

      public int surfaceWidth
      Surface width
    • surfaceHeight

      public int surfaceHeight
      Surface height
  • Constructor Details

    • GLMapViewRenderer

      public GLMapViewRenderer(android.app.Activity activity)
      Default constructor
      Parameters:
      activity - activity
  • Method Details

    • dispose

      public void dispose()
      Description copied from class: GLNativeObject
      Call this method when object does not needed. This will free some native resources.
      Overrides:
      dispose in class GLNativeObject
    • attachToTextureView

      public boolean attachToTextureView(@NonNull android.view.TextureView textureView)
      Attach renderer to texture view
      Parameters:
      textureView - texture view where renderer will be attached
      Returns:
      true if restored. false if creates new surface
    • attachToSurfaceView

      public void attachToSurfaceView(@NonNull android.view.SurfaceView surfaceView)
      Attach renderer to surface view
      Parameters:
      surfaceView - surface view where renderer will be attached
    • surfaceChanged

      public void surfaceChanged(android.view.SurfaceHolder holder, int format, int width, int height)
      Specified by:
      surfaceChanged in interface android.view.SurfaceHolder.Callback
    • surfaceCreated

      public void surfaceCreated(android.view.SurfaceHolder holder)
      Specified by:
      surfaceCreated in interface android.view.SurfaceHolder.Callback
    • surfaceDestroyed

      public void surfaceDestroyed(android.view.SurfaceHolder holder)
      Specified by:
      surfaceDestroyed in interface android.view.SurfaceHolder.Callback
    • surfaceRedrawNeededAsync

      public void surfaceRedrawNeededAsync(android.view.SurfaceHolder holder, Runnable drawingFinished)
      Specified by:
      surfaceRedrawNeededAsync in interface android.view.SurfaceHolder.Callback2
    • surfaceRedrawNeeded

      public void surfaceRedrawNeeded(android.view.SurfaceHolder holder)
      Specified by:
      surfaceRedrawNeeded in interface android.view.SurfaceHolder.Callback2
    • onSurfaceTextureAvailable

      public void onSurfaceTextureAvailable(android.graphics.SurfaceTexture surfaceTexture, int width, int height)
      Specified by:
      onSurfaceTextureAvailable in interface android.view.TextureView.SurfaceTextureListener
    • onSurfaceTextureSizeChanged

      public void onSurfaceTextureSizeChanged(android.graphics.SurfaceTexture surfaceTexture, int width, int height)
      Specified by:
      onSurfaceTextureSizeChanged in interface android.view.TextureView.SurfaceTextureListener
    • onSurfaceTextureDestroyed

      public boolean onSurfaceTextureDestroyed(android.graphics.SurfaceTexture surfaceTexture)
      Specified by:
      onSurfaceTextureDestroyed in interface android.view.TextureView.SurfaceTextureListener
    • onSurfaceTextureUpdated

      public void onSurfaceTextureUpdated(android.graphics.SurfaceTexture surfaceTexture)
      Specified by:
      onSurfaceTextureUpdated in interface android.view.TextureView.SurfaceTextureListener
    • getFps

      public float getFps()
      Returns fps
      Returns:
      fps
    • setFps

      public void setFps(float fps)
      Sets fps
      Parameters:
      fps - fps to set
    • setCenterTileStateChangedCallback

      public void setCenterTileStateChangedCallback(@Nullable Runnable callback)
      Set callback that will be called when center tile state is changed
      Parameters:
      callback - Runnable that will be post to main thread when center tile state is changed
    • getCenterTileState

      public int getCenterTileState()
      Return state of center tile
      Returns:
      state of center tile
    • convertDisplayDeltaToInternal

      public MapPoint convertDisplayDeltaToInternal(@NonNull MapPoint val)
      Converts a distance between two points on the screen to delta in internal format of GLMapView.
      Parameters:
      val - The point with the delta
      Returns:
      The same object that was passed to method call.
      See Also:
    • convertDisplayDeltaToInternal

      @NonNull public MapPoint convertDisplayDeltaToInternal(@NonNull MapPoint val, double mapZoom, double mapAngle)
      Converts a distance between two points on the screen to delta in internal format of GLMapView.
      Parameters:
      val - The point with the delta
      mapZoom - Zoom to use for calculations
      mapAngle - Angle to use for calculations
      Returns:
      The same object that was passed to method call.
      See Also:
    • convertDisplayToInternal

      @NonNull public MapPoint convertDisplayToInternal(@NonNull MapPoint val)
      Converts a point on the surface to an internal map coordinate.

      MapPoint pt = mapView.convertDisplayToInternal(new MapPoint(touchX, touchY));

      Parameters:
      val - The point on surface to be converted
      Returns:
      The same object that was passed to method call.
      See Also:
    • convertInternalToDisplay

      @NonNull public MapPoint convertInternalToDisplay(@NonNull MapPoint val)
      Converts a point in internal format of GLMapView to point on the surface of view.
      Parameters:
      val - The point to be converted
      Returns:
      The same object that was passed to method call.
      See Also:
    • convertMetersToInternal

      public double convertMetersToInternal(double meters)
      Converts meters distance to internal distance
      Parameters:
      meters - The value to be converted
      Returns:
      Returns distance in internal units
    • doWhenSurfaceCreated

      public void doWhenSurfaceCreated(@NonNull Runnable r)
      Runs command on internal rendering thread. If surface does not exists at this moment Runnable will be executed when it will be created.
      
       final GLMapView mapView = (GLMapView) this.findViewById(R.id.map_view);
       mapView.doWhenSurfaceCreated(new Runnable() {
       public void run() {
       mapView.setMapCenter(center, false);
       mapView.scaleMap(scaleChange, null, false);
       }
       });
       
      Parameters:
      r - The Runnable to be executed at internal thread when surface will be created
    • setStyle

      public void setStyle(@NonNull GLMapVectorCascadeStyle style)
      Sets map style
      Parameters:
      style - style to use for map
    • setLocaleSettings

      public void setLocaleSettings(@NonNull GLMapLocaleSettings localeSettings)
      Sets map locale settings
      Parameters:
      localeSettings - New locale settings to use for translating map labels
    • getLocaleSettings

      @NonNull public GLMapLocaleSettings getLocaleSettings()
      Returns:
      GLMapLocaleSettings that was previously set
    • setBase

      public void setBase(@NonNull GLMapTileSource base)
      By default base is vector tile source.
      Parameters:
      base - Base to use
    • setOverlays

      public void setOverlays(@Nullable GLMapTileSource[] overlays)
      By default overlays is null.
      Parameters:
      overlays - Overlays to use
    • getOverlays

      @Nullable public GLMapTileSource[] getOverlays()
      Returns:
      value that was previously set.
    • getBase

      @Nullable public GLMapTileSource getBase()
      Returns:
      value that was previously set.
    • setDrawElevationLines

      public void setDrawElevationLines(boolean drawElevationLines)
      Sets visibility of elevation lines. By default is false.
      Parameters:
      drawElevationLines - visibility of elevation lines
    • getDrawElevationLines

      public boolean getDrawElevationLines()
      Returns:
      value that was previously set.
    • setDrawHillshades

      public void setDrawHillshades(boolean drawHillshades)
      Sets visibility of hill shades. By default is false.
      Parameters:
      drawHillshades - visibility of hill shades.
    • getDrawHillshades

      public boolean getDrawHillshades()
      Returns:
      value that was previously set.
    • setDrawSlopes

      public void setDrawSlopes(boolean drawSlopes)
      Sets visibility of slopes. By default is false.
      Parameters:
      drawSlopes - visibility of slopes.
    • getDrawSlopes

      public boolean getDrawSlopes()
      Returns:
      value that was previously set.
    • captureFrameWhenFinish

      public void captureFrameWhenFinish(@NonNull GLMapViewRenderer.ScreenCaptureCallback callback)
      Captures frame when surface will be created and loading of resources finished. ScreenCaptureCallback provides Bitmap as a result
      Parameters:
      callback - ScreenCaptureCallback to call with result
    • mapZoomForBBox

      public double mapZoomForBBox(@NonNull GLMapBBox bbox, int mapWidth, int mapHeight)
      Calculates zoom of map to fit given bbox
      Parameters:
      bbox - bbox that you wish to fit
      mapWidth - width of visible area
      mapHeight - height of visible area
      Returns:
      zoom of map to fit given bbox or NaN if bbox is empty.
    • getMapCenter

      @NonNull public MapPoint getMapCenter(@NonNull MapPoint point)
      Gets coordinates of the origin point of the map. If animation is in progress - this value returns final value.
      MapPoint pt = mapView.getMapCenter(new MapPoint());
      Parameters:
      point - The point to be filled with values.
      Returns:
      The same object that was passed to method call.
      See Also:
    • getCurrentMapCenter

      @NonNull public MapPoint getCurrentMapCenter(@NonNull MapPoint point)
      Gets current coordinates of the origin point of the map.
      Parameters:
      point - The point to be filled with values.
      Returns:
      The same object that was passed to method call.
    • getMapCenter

      @NonNull public MapPoint getMapCenter()
      Gets coordinates of the origin point of the map.
      MapPoint pt = mapView.getMapCenter();
      Returns:
      Returns coordinates of map center point.
      See Also:
    • setMapCenter

      public void setMapCenter(MapPoint center)
      Sets coordinates of the origin point of the map.
      mapView.setMapCenter(center);
      Parameters:
      center - New map center.
      See Also:
    • getMapGeoCenter

      @NonNull public MapGeoPoint getMapGeoCenter()
      Gets coordinates of the origin point of the map.
      MapPoint pt = mapView.getMapCenter();
      Returns:
      Returns coordinates of map center point.
      See Also:
    • setMapGeoCenter

      public void setMapGeoCenter(@NonNull MapGeoPoint geoCenter)
      Sets coordinates of the origin point of the map.
      mapView.setMapGeoCenter(center);
      Parameters:
      geoCenter - New map center.
      See Also:
    • getMapOrigin

      @NonNull public MapPoint getMapOrigin(@NonNull MapPoint point)
      Origin point of the map coordinate system.
      Parameters:
      point - The point to be filled with values.
      Returns:
      The same object that was passed to method call.
    • getMapOrigin

      @NonNull public MapPoint getMapOrigin()
      Returns:
      Returns origin point of the map coordinate system.
    • setMapOrigin

      public void setMapOrigin(float x, float y)
      Origin point of the map coordinate system (X, Y). Changing the values in this property between 0 and 1 in relative coordinates describes the point of GLMapView which is considered as a center point for `mapCenter` and `setMapCenter:animated:`.
      Parameters:
      x - x of origin
      y - y of origin
    • setSafeArea

      public void setSafeArea(int left, int top, int right, int bottom)
      Sets safe area for scale ruler and other objects
      Parameters:
      left - left inset
      top - top inset
      right - right inset
      bottom - bottom inset
    • getBBox

      @NonNull public GLMapBBox getBBox()
      BBox of current visible part of GLMapView
      Returns:
      bbox of visible part of GLMapView
    • getBBoxWithInsets

      @NonNull public GLMapBBox getBBoxWithInsets(int left, int right, int top, int bottom)
      BBox of visible part of GLMapView with applied insets. If animation is in progress - returns final value
      Parameters:
      left - left inset
      right - right inset
      top - top inset
      bottom - bottom inset
      Returns:
      bbox of visible part of GLMapView with applied insets
    • enableClipping

      public void enableClipping(GLMapBBox bbox, float minLevel, float maxLevel)
      Enables clipping of visible map area
      Parameters:
      bbox - clipping bbox to set
      minLevel - min zoom level
      maxLevel - max zoom level
    • disableClipping

      public void disableClipping()
      Disables clipping of visible map area
    • isClippingEnabled

      public boolean isClippingEnabled()
      Checks if clipping is enabled
      Returns:
      true if enabled
    • setFontScale

      public void setFontScale(float scale)
      Sets scale of font. Will trigger reloadTiles automatically;
      Parameters:
      scale - New font scale (default is 1).
    • getFontScale

      public float getFontScale()
      Returns:
      value of font scale
    • getMapAngle

      public float getMapAngle()
      Gets current angle of the map.
      Returns:
      Current angle of the map.
    • setMapAngle

      public void setMapAngle(float newAngle)
      Sets zoom level of the map.
      mapView.setMapZoom(16, false);
      Parameters:
      newAngle - new zoom level for map.
      See Also:
    • getMapZoom

      public double getMapZoom()
      Get zoom level of the map. If animation is in progress final value will return.
      double zoom = mapView.getMapZoom();
      Returns:
      Current zoom of the map.
      See Also:
    • getCurrentMapZoom

      public double getCurrentMapZoom()
      Gets current zoom level of the map.
      double zoom = mapView.getCurrentMapZoom();
      Returns:
      Current zoom of the map.
      See Also:
    • getCurrentMapScale

      public double getCurrentMapScale()
      Gets current scale of the map.
      Returns:
      current scale of the map
    • getMapScale

      public double getMapScale()
      Gets scale of the map.
      Returns:
      scale of the map
      See Also:
    • setMapZoom

      public void setMapZoom(double newZoom)
      Sets zoom level of the map.
      mapView.setMapZoom(16);
      Parameters:
      newZoom - new zoom level for map.
      See Also:
    • setMaxScale

      public void setMaxScale(double maxScale)
      Sets maximum scale of the map
      Parameters:
      maxScale - max scale to set
    • getMaxScale

      public double getMaxScale()
      Gets maximum scale of the map
      Returns:
      maximum scale of the map
    • setMapScale

      public void setMapScale(double newScale)
      Set scale of the map. Same as setMapZoom(pow(2, zoomLevel)). If animation is in progress final value will return.
      Parameters:
      newScale - new scale for map.
      See Also:
    • setAttributionPosition

      public void setAttributionPosition(int placement)
      Sets position of attribution.
      mapView.setAttributionPosition(GLMapPlacement.TopCenter);
      Parameters:
      placement - placement of attribution
    • removeAllObjects

      public void removeAllObjects()
      Remove all images, image groups, tracks and marker layers from map
      See Also:
    • add

      public void add(@NonNull GLMapDrawObject drawObject)
      Adds the GLMapDrawObject to map.
      Parameters:
      drawObject - object to add
      See Also:
    • remove

      public void remove(@NonNull GLMapDrawObject drawObject)
      Removes `GLMapDrawObject` from map.
      Parameters:
      drawObject - object to remove
      See Also:
    • startAnimation

      public void startAnimation(@NonNull GLMapAnimation animation)
      Starts animation.
      Parameters:
      animation - animation to start
    • addTextForbiddenArea

      public void addTextForbiddenArea(int name, MapPoint origin, int offsetX, int offsetY, int width, int height)
      Adds or updates area where text (and assisiated icon) must not draw
      Parameters:
      name - unique name for area
      origin - origin of area
      offsetX - x offset of area from origin (in points)
      offsetY - y offset of area from origin (in points)
      width - width of area (in points)
      height - height of area (in points)
    • removeTextForbiddenArea

      public void removeTextForbiddenArea(int name)
      Removes area
      Parameters:
      name - name of area
    • animate

      @NonNull public GLMapAnimation animate(@NonNull GLMapViewRenderer.AnimateCallback callback)
      Create and starts animation using provided callback
      Parameters:
      callback - Callback that will configure animation
      Returns:
      created animation.
    • animate

      @NonNull public GLMapAnimation animate(@NonNull GLMapViewRenderer.AnimateCallback callback, @Nullable Runnable onFinish)
      Create and starts animation using provided callback
      Parameters:
      callback - Callback that will configure animation
      onFinish - Callback that will be called when animation is finished
      Returns:
      created animation.
    • reloadTiles

      public void reloadTiles()
      Force reloading of all tiles.
    • setNeedRedraw

      public void setNeedRedraw()
      Force redraw
    • setMapDidMoveCallback

      public void setMapDidMoveCallback(@Nullable Runnable callback)
      Sets callback that will be called after move animation finished
      Parameters:
      callback - callback that will be post to ui thread after animation finished
    • ForceOpenGL2

      public static void ForceOpenGL2()
      After calling this function any new GLMapView will use OpenGL 2.0 even if device supports OpenGL 3.0 Some cheap Android devices have problems with drivers.
    • DisableOpenGLBackgroundLoading

      public static void DisableOpenGLBackgroundLoading()
      Call this function before creating GLMapView to disable background loading of resources. In most cases this greatly speedup application, but some cheap Android devices can not handle it properly and this leads to lags or even crashes.
    • crashNDK

      public static void crashNDK()
      Function to test native crashes
    • crashNDK2

      public static void crashNDK2()
      Function to test native crashes