Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何控制同一图层内各个Mapbox要素的z轴?_Android_Mapbox_Mapbox Android - Fatal编程技术网

Android 如何控制同一图层内各个Mapbox要素的z轴?

Android 如何控制同一图层内各个Mapbox要素的z轴?,android,mapbox,mapbox-android,Android,Mapbox,Mapbox Android,我正在使用Android的Mapbox Maps SDK在我的应用程序的地图中显示带有自定义图标的PIN。更具体地说,我使用的是SymbolLayer API。当用户单击pin时,其外观会发生变化,以显示其已被选中。但是,单击的pin通常位于其他pin之后,如下图所示: 所有这些管脚都是来自同一源的功能s,添加到同一符号层 我希望能够使选定的管脚显示在其他管脚之上,为此,我尝试控制其z轴。我正在使用PropertyFactory.symbolZOrder(value)方法,似乎Property

我正在使用Android的Mapbox Maps SDK在我的应用程序的地图中显示带有自定义图标的PIN。更具体地说,我使用的是SymbolLayer API。当用户单击pin时,其外观会发生变化,以显示其已被选中。但是,单击的pin通常位于其他pin之后,如下图所示:

所有这些管脚都是来自同一
源的
功能
s,添加到同一
符号层

我希望能够使选定的管脚显示在其他管脚之上,为此,我尝试控制其z轴。我正在使用
PropertyFactory.symbolZOrder(value)
方法,似乎
Property.SYMBOL\u Z\u ORDER\u VIEWPORT\u Y
属性。SYMBOL\u Z\u ORDER\u SOURCE
都没有帮助。我希望我能通过
表达式
实现这一点,但我不知道如何使用它


有什么想法吗?

这里有一个例子和解释。 定义符号层时,应设置属性
symbolZOrder
symbolSortKey

symbolZOrder
接受以下其中一项作为参数:

  // SYMBOL_Z_ORDER: Controls the order in which overlapping symbols in the same layer are rendered

  /**
   * If symbol sort key is set, sort based on that. Otherwise sort symbols by their y-position relative to the viewport.
   */
  public static final String SYMBOL_Z_ORDER_AUTO = "auto";
  /**
   * Symbols will be sorted by their y-position relative to the viewport.
   */
  public static final String SYMBOL_Z_ORDER_VIEWPORT_Y = "viewport-y";
  /**
   * Symbols will be rendered in the same order as the source data with no sorting applied.
   */
  public static final String SYMBOL_Z_ORDER_SOURCE = "source";
因此,如果希望基于某些逻辑控制符号,则应使用
SYMBOL\u Z\u ORDER\u AUTO

然后可以将
symbolSortKey
设置为某个浮点值

        Style.OnStyleLoaded onStyleLoaded = style -> {
            style.addLayer(new SymbolLayer(SYMBOLS_LAYER, SYMBOLS_SOURCE)
                    .withProperties(
                            iconImage(step(zoom(),
                                    literal("marker_public_base"),
                                    stop(6, get("icon")))),
                            iconIgnorePlacement(true),
                            iconAllowOverlap(true),
                            iconSize(interpolate(
                                    linear(), zoom(),
                                    stop(0, MARKER_SYMBOL_SIZE * .13),
                                    stop(5, MARKER_SYMBOL_SIZE * .33),
                                    stop(9, MARKER_SYMBOL_SIZE))),
                            iconAnchor(ICON_ANCHOR_BOTTOM),
                            textField(get("title")),
                            textSize(interpolate(
                                    linear(), zoom(),
                                    stop(5.9, 0),
                                    stop(6, SYMBOL_TEXT_SIZE * .4),
                                    stop(7, SYMBOL_TEXT_SIZE * .7),
                                    stop(11, SYMBOL_TEXT_SIZE))),
                            textOptional(true),
                            textHaloColor("#ffffff"),
                            textHaloWidth(1f),
                            textHaloBlur(1f),
                            textAnchor(TEXT_ANCHOR_TOP),
                            symbolZOrder(SYMBOL_Z_ORDER_AUTO),
                            symbolSortKey(get("zIndex"))
                    ));
在哪里


SYMBOL\u Z\u ORDER\u SOURCE
将允许您指定符号Z索引的顺序。您需要做的是对源对象的内容进行排序,这将在布置所有符号时予以考虑。我围绕符号创建了一个高级api,出于这个特定的原因,它使用了
SYMBOL\u Z\u ORDER\u SOURCE
功能@你有这样的例子吗?

            points.forEach(point -> {
                Feature feature = Feature.fromGeometry(com.mapbox.geojson.Point.fromLngLat(point.lon, point.lat));
                feature.addStringProperty("id", point.id);
                feature.addNumberProperty("zIndex", point.isPublic? 0f :  point.isSearchResult? 2f : 1f);
                feature.addStringProperty("title", point.name);
                feature.addStringProperty("icon", getIconImageID(point.category, point.isPublic, point.visited));

                symbolsFeatures.add(feature);
            });