package com.mapbox.mapboxsdk.overlay; import android.os.AsyncTask; import android.text.TextUtils; import android.util.Log; import com.cocoahero.android.geojson.FeatureCollection; import com.mapbox.mapboxsdk.util.DataLoadingUtils; import com.mapbox.mapboxsdk.views.MapView; import java.io.InputStream; import java.util.ArrayList; public class GeoJSONPainter { private final MapView mapView; private final Icon markerIcon; public GeoJSONPainter(final MapView mapView, final Icon markerIcon) { super(); this.mapView = mapView; this.markerIcon = markerIcon; } public void loadFromURL(final String url) { if (TextUtils.isEmpty(url)) { return; } new LoadAndDisplay().execute(url); } /** * Class that generates markers from formats such as GeoJSON */ private class LoadAndDisplay extends AsyncTask<String, Void, ArrayList<Object>> { @Override protected ArrayList<Object> doInBackground(String... params) { InputStream is; String jsonText; ArrayList<Object> uiObjects = new ArrayList<Object>(); try { FeatureCollection parsed = DataLoadingUtils.loadGeoJSONFromUrl(params[0]); uiObjects = DataLoadingUtils.createUIObjectsFromGeoJSONObjects(parsed, markerIcon); } catch (Exception e) { Log.e(TAG, "Error loading / parsing GeoJSON: " + e.toString()); e.printStackTrace(); } return uiObjects; } @Override protected void onPostExecute(ArrayList<Object> objects) { // Back on the Main Thread so add new UI Objects and refresh map for (Object obj : objects) { if (obj instanceof Marker) { mapView.addMarker((Marker) obj); } else if (obj instanceof PathOverlay) { mapView.getOverlays().add((PathOverlay) obj); } } if (objects.size() > 0) { mapView.invalidate(); } } } static final String TAG = "GeoJSONLayer"; }