com.mapbox.mapboxsdk.style.sources.GeoJsonSource Maven / Gradle / Ivy
package com.mapbox.mapboxsdk.style.sources;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.UiThread;
import com.mapbox.mapboxsdk.style.layers.Filter;
import com.mapbox.services.commons.geojson.Feature;
import com.mapbox.services.commons.geojson.FeatureCollection;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
* GeoJson source, allows using FeatureCollections from Json.
*
* @see the style specification
*/
@UiThread
public class GeoJsonSource extends Source {
/**
* Internal use
*
* @param nativePtr - pointer to native peer
*/
public GeoJsonSource(long nativePtr) {
super(nativePtr);
}
/**
* Create an empty GeoJsonSource
*
* @param id the source id
*/
public GeoJsonSource(String id) {
initialize(id, null);
setGeoJson(FeatureCollection.fromFeatures(new ArrayList()));
}
/**
* Create an empty GeoJsonSource with non-default {@link GeoJsonOptions}
*
* @param id the source id
* @param options options
*/
public GeoJsonSource(String id, GeoJsonOptions options) {
initialize(id, options);
setGeoJson(FeatureCollection.fromFeatures(new ArrayList()));
}
/**
* Create a GeoJsonSource from a raw json string
*
* @param id the source id
* @param geoJson raw Json FeatureCollection
*/
public GeoJsonSource(String id, String geoJson) {
if (geoJson == null || geoJson.startsWith("http")) {
throw new IllegalArgumentException("Expected a raw json body");
}
initialize(id, null);
setGeoJson(geoJson);
}
/**
* Create a GeoJsonSource from a raw json string and non-default {@link GeoJsonOptions}
*
* @param id the source id
* @param geoJson raw Json body
* @param options options
*/
public GeoJsonSource(String id, String geoJson, GeoJsonOptions options) {
if (geoJson == null || geoJson.startsWith("http")) {
throw new IllegalArgumentException("Expected a raw json body");
}
initialize(id, options);
setGeoJson(geoJson);
}
/**
* Create a GeoJsonSource from a remote geo json file
*
* @param id the source id
* @param url remote json file
*/
public GeoJsonSource(String id, URL url) {
initialize(id, null);
nativeSetUrl(url.toExternalForm());
}
/**
* Create a GeoJsonSource from a remote geo json file and non-default {@link GeoJsonOptions}
*
* @param id the source id
* @param url remote json file
* @param options options
*/
public GeoJsonSource(String id, URL url, GeoJsonOptions options) {
initialize(id, options);
nativeSetUrl(url.toExternalForm());
}
/**
* Create a GeoJsonSource from a {@link FeatureCollection}
*
* @param id the source id
* @param features the features
*/
public GeoJsonSource(String id, FeatureCollection features) {
initialize(id, null);
setGeoJson(features);
}
/**
* Create a GeoJsonSource from a {@link FeatureCollection} and non-default {@link GeoJsonOptions}
*
* @param id the source id
* @param features the features
* @param options options
*/
public GeoJsonSource(String id, FeatureCollection features, GeoJsonOptions options) {
initialize(id, options);
setGeoJson(features);
}
/**
* Updates the GeoJson
*
* @param features the GeoJSON {@link FeatureCollection}
*/
public void setGeoJson(FeatureCollection features) {
checkValidity();
setGeoJson(features.toJson());
}
/**
* Updates the GeoJson
*
* @param json the raw GeoJson FeatureCollection string
*/
public void setGeoJson(String json) {
checkValidity();
setRawJson(json);
}
/**
* Updates the url
*
* @param url the GeoJSON FeatureCollection url
*/
public void setUrl(URL url) {
checkValidity();
setUrl(url.toExternalForm());
}
/**
* Updates the url
*
* @param url the GeoJSON FeatureCollection url
*/
public void setUrl(String url) {
checkValidity();
nativeSetUrl(url);
}
/**
* Queries the source for features.
*
* @param filter an optional filter statement to filter the returned Features
* @return the features
*/
@NonNull
public List querySourceFeatures(@Nullable Filter.Statement filter) {
Feature[] features = querySourceFeatures(filter != null ? filter.toArray() : null);
return features != null ? Arrays.asList(features) : new ArrayList();
}
protected void setRawJson(String geoJson) {
// Wrap the String in a map as an Object is expected by the
// style conversion template
HashMap wrapper = new HashMap<>();
wrapper.put("data", geoJson);
nativeSetGeoJson(wrapper);
}
protected native void initialize(String layerId, Object options);
protected native void nativeSetUrl(String url);
private native void nativeSetGeoJson(Object geoJson);
private native Feature[] querySourceFeatures(Object[] filter);
@Override
protected native void finalize() throws Throwable;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy