我試圖在英國的地圖上顯示一些標記,但是因爲超過了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數據的工作...
感謝您的答覆。但是,我不認爲這個問題是無法解析GeoJSON,我想弄清楚如何使它在MyItemReader類中可用。 –
''double lat = object.getDouble(「lat」);''''double lng = object.getDouble(「lng」);'''不適合你想要的東西那麼做 - 在你試圖讀取的JSON中沒有名稱爲「lat」或「lng」的JSON屬性。您需要改爲getJSONObject(「geometry」),然後調用getJSONArray(「coordinates」)來獲取座標數組。然後在數組上,您可以調用getDouble(0/1)來提取緯度/經度值。 –
再次感謝您的回覆。我一直在按照你的建議嘗試,但我無法弄清楚如何做到這一點。那麼你是說我應該改變myitemreader類,以便在做雙拉特/雙重lng函數之前執行你提到的兩個步驟?你能提供一個例子或者指向我的一些文檔/教程,可以更詳細地解釋這一點嗎? –