Various issues while attempting to show custom metadata on map / hook gestures in ArcGIS Runtime SDK for Android

3976
3
03-12-2015 03:06 AM
RobertBares
New Contributor III

Background to this query:

I have a need to display small labels on an offline map backed by a tpk, the data for which is generated at runtime. These labels are each associated with their own GPS coordinate, and require the drawing of text and some border or background to provide contrast against the map behind it.

Considered solutions to the overall problem:

- A border directly on the text in TextSymbol - not supported, and without an arrow of some kind provides a poor association between the text and the actual location

- Callouts - only a single callout is supported, which therefore does not meet requirements

- CalloutPopupWindow - deprecated with no alternative offered, and poorly tracks the associated location when the map is panning anyway (very jittery).

- Android View located over MapView - poorly tracks associated locations when map is panning (very jittery)

- Polygon in screen coordinates around a TextSymbol with an arrow (roughly mimicing a callout) - tracks associated locations well, but scales badly when zoom changes as unlike the text in TextSymbol the polygon size must be specified in GPS coordinates and there is no facility to keep geometries agnostic of zoom level.

Of these, the last has seemed the best compromise, but this does mean that zooming in and out has to be handled differently to avoid the outer polygon being at the wrong scale relative to the text. The best approach found so far is to clear all labels at the start of a zoom and re-instate them once zoom completes. This would work fine if not for the following issues.

The current problems with the solution so far:

- OnZoomListener.postAction does not fire reliably at the end of a series of zoom actions, particularly if zoom is triggered during an existing zoom animation.

- This can be somewhat mitigated by overriding the zoomin/out methods on MapView to chain zooms together in sequence, requiring that postAction is fired before triggering the next zoom to commence. However, there is no mechanism to hook into the handling of zoom gestures, and so ultimately it is still possible to trigger a sequence of programmatic zoomin/zoomout events in addition to zooming with gestures which will result in a zoom without an associated postAction firing - giving no opportunity to fix the Polygon geometry. (This approach is still unreliable)

- OnPanListener does not provide any mechanism to tell when panning actually ends, from what I can see this listener instead reports user interaction with the MapView equivalent of a GestureOverlayView. This is not sufficient, as the fling gesture does not finish panning until some time after user interaction completes and the postPointerUp event has already fired.

- As far as I can tell there is no mechanism to hook into the standard gesture handling without having to re-write it from scratch, noting that MapGestureDetector is deprecated. (See update regarding MapOnTouchListener below)

The questions:

- How should developers display custom metadata on offline maps at runtime for multiple features simultaneously, in a way which is easily readable regardless of the colour of the map beneath it?

- Is there currently a mechanism for hooking into the handling of gestures without requiring custom handling for all gestures?

- Is there intention to add reliable events for zoom/pan which consistently fire when zoom/pan is actioned and completes, no matter whether the action is triggered programatically, by normal user interaction, or by extended handling of gestures?

- Is there intention to support adding geometries to the map which are relative to screen coordinates, as per the zoom behaviour of TextSymbol?

- Is there intention to allow individual gestures to be enabled/disabled? (this is currently possible for the one-finger zoom but nothing else)

- Is there intention to fix repeated zoomIn/zoomOut events changing the map centring?

Kind regards

P.S. these difficulties were found whilst using ArcGIS for Android 10.2.4, the release notes for 10.2.5 do not suggest any relevant changes.

Update:

I have since found MapOnTouchListener, which is not deprecated and subclassing provides a lot of the gesture control I was looking for

Message edited by: Robert Bares, updated to include MapOnTouchListener, strikethrough added for details which have been resolved by this

0 Kudos
3 Replies
RobertBares
New Contributor III

As there has been no feedback I will re-post each of the above problems in turn

0 Kudos
WillCrick
Occasional Contributor

Hi,


Did you consider a composite symbol which includes text and marker symbol (as the background?). I think this might work for you, javadoc is here:

CompositeSymbol |  ArcGIS Android 10.2.6 API

I hope that helps.

Will

0 Kudos
RobertBares
New Contributor III

For the benefit of other readers this discussion is continued on Now CalloutPopupWindow is deprecated, what is the alternative?

0 Kudos