summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/sources/VectorSource.java
blob: 20f7f507569cca30959b193ab37199d84c99fbe8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.mapbox.mapboxsdk.style.sources;

import android.net.Uri;
import android.support.annotation.Keep;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.Size;
import android.support.annotation.UiThread;

import com.mapbox.geojson.Feature;
import com.mapbox.mapboxsdk.style.expressions.Expression;

import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * Vector source, allows the use of vector tiles.
 *
 * @see <a href="https://www.mapbox.com/mapbox-gl-style-spec/#sources-vector">the style specification</a>
 */
@UiThread
public class VectorSource extends Source {

  /**
   * Internal use
   *
   * @param nativePtr - pointer to native peer
   */
  @Keep
  VectorSource(long nativePtr) {
    super(nativePtr);
  }

  /**
   * Create a vector source from a remote url pointing to a TileJSON resource
   *
   * @param id  the source id
   * @param url the TileJSON resource url
   * @deprecated use {@link #VectorSource(String, Uri)} instead
   */
  @Deprecated
  public VectorSource(String id, URL url) {
    this(id, url.toExternalForm());
  }

  /**
   * Create a vector source from a uri pointing to a TileJSON resource
   *
   * @param id  the source id
   * @param uri the TileJSON resource url
   */
  public VectorSource(String id, Uri uri) {
    this(id, uri.toString());
  }

  /**
   * Create a vector source from a uri
   *
   * @param id  the source id
   * @param uri the uri
   */
  public VectorSource(String id, String uri) {
    super();
    initialize(id, uri);
  }

  /**
   * Create a vector source from a tilset
   *
   * @param id      the source id
   * @param tileSet the tileset
   */
  public VectorSource(String id, TileSet tileSet) {
    super();
    initialize(id, tileSet.toValueObject());
  }

  /**
   * Queries the source for features.
   *
   * @param sourceLayerIds the source layer identifiers. At least one must be specified.
   * @param filter         an optional filter expression to filter the returned Features
   * @return the features
   */
  @NonNull
  public List<Feature> querySourceFeatures(@Size(min = 1) String[] sourceLayerIds,
                                           @Nullable Expression filter) {
    checkThread();
    Feature[] features = querySourceFeatures(
      sourceLayerIds,
      filter != null ? filter.toArray() : null);
    return features != null ? Arrays.asList(features) : new ArrayList<Feature>();
  }

  /**
   * @return The url or null
   * @deprecated use {@link #getUri()} instead
   */
  @Nullable
  @Deprecated
  public String getUrl() {
    checkThread();
    return nativeGetUrl();
  }

  /**
   * @return The uri or null
   */
  @Nullable
  public String getUri() {
    checkThread();
    return nativeGetUrl();
  }

  @Keep
  protected native void initialize(String layerId, Object payload);

  @Override
  @Keep
  protected native void finalize() throws Throwable;

  @NonNull
  @Keep
  protected native String nativeGetUrl();

  @NonNull
  @Keep
  private native Feature[] querySourceFeatures(String[] sourceLayerId,
                                               Object[] filter);

}