2016-02-02 50 views
0

我試圖在英國的地圖上顯示一些標記,但是因爲超過了10,000,我正在嘗試使用標記集羣實用程序使它看起來不那麼緊湊。我不確定如何使GeoJSON文件中的集羣實用程序使用座標。谷歌指南只顯示如何添加您自己的標記,而不是如何從GeoJSON中獲取它們。下面是我到目前爲止已經試過:Google maps Marker Clustering with large(10,000+)GeoJSON?

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.slideupmap); 
    ... 
    mClusterManager = new ClusterManager<MyItem>(this, getMap()); 

    getMap().setOnCameraChangeListener(mClusterManager); 
    getMap().setOnMarkerClickListener(mClusterManager); 

    try { 
     readItems(); 
    } catch (JSONException e) { 
     Toast.makeText(this, "Problem reading list of markers.", Toast.LENGTH_LONG).show(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 


private void readItems() throws JSONException, IOException { 
    InputStream inputStream = getResources().openRawResource(R.raw.ukgeojson4102015); 
    List<MyItem> items = new MyItemReader().read(inputStream); 
    mClusterManager.addItems(items); 
} 

因此,我總是得到敬酒「的標記問題閱讀清單」。

下面是MyItem類:

public class MyItem implements ClusterItem { 
    private final LatLng mPosition; 

    public MyItem(double lat, double lng) { 
     mPosition = new LatLng(lat, lng); 
    } 

    @Override 
    public LatLng getPosition() { 
     return mPosition; 
    } 
} 

當我來堅持是放什麼MyItemReader類。谷歌的一個(下文)是用於與 'LAT' 和 '經度' 值的JSON文件:

public class MyItemReader { 
    private static final String REGEX_INPUT_BOUNDARY_BEGINNING = "\\A"; 

    public List<MyItem> read(InputStream inputStream) throws JSONException { 
     List<MyItem> items = new ArrayList<MyItem>(); 
     String json = new Scanner(inputStream).useDelimiter(REGEX_INPUT_BOUNDARY_BEGINNING).next(); 
     JSONArray array = new JSONArray(json); 
     for (int i = 0; i < array.length(); i++) { 
      JSONObject object = array.getJSONObject(i); 
      double lat = object.getDouble("lat"); 
      double lng = object.getDouble("lng"); 
      items.add(new MyItem(lat, lng)); 
     } 
     return items; 
    } 
} 

與此相反,以GeoJSON數據的格式如下:

{ 
     "type": "Feature", 
     "geometry": { 
      "type": "Point", 
      "coordinates": [-5.12763, 51.95974], 
      "is_accurate": true 
     }, 
     "properties": { 
     " id": 30088, 
      "inscription": "Some inscription" 
     } 
    } 

在LAT和lng這裏的值在'座標'下給出。我假設我需要告訴MyItemReader讀取這些座標,但我不知道該怎麼做。

有人知道我應該放在那裏嗎?這是我第一次以GeoJSON數據的工作...

回答

0

如果您需要幫助解析GeoJSON的請嘗試使用這個庫:https://github.com/cocoahero/android-geojson

既然你已經有一個JSONObject你的for循環,你只需要調用GeoJSON.parse它來獲得一個對象,然後你可以從中讀取座標。 (或者你可以寫你自己的解析代碼 - 基於你的問題,雖然你可能更容易使用庫)

+0

感謝您的答覆。但是,我不認爲這個問題是無法解析GeoJSON,我想弄清楚如何使它在MyItemReader類中可用。 –

+0

''double lat = object.getDouble(「lat」);''''double lng = object.getDouble(「lng」);'''不適合你想要的東西那麼做 - 在你試圖讀取的JSON中沒有名稱爲「lat」或「lng」的JSON屬性。您需要改爲getJSONObject(「geometry」),然後調用getJSONArray(「coordinates」)來獲取座標數組。然後在數組上,您可以調用getDouble(0/1)來提取緯度/經度值。 –

+0

再次感謝您的回覆。我一直在按照你的建議嘗試,但我無法弄清楚如何做到這一點。那麼你是說我應該改變myitemreader類,以便在做雙拉特/雙重lng函數之前執行你提到的兩個步驟?你能提供一個例子或者指向我的一些文檔/教程,可以更詳細地解釋這一點嗎? –