我是java的新手,是Android新手,我正在尝试创建一个谷歌地图的Android应用程序,该应用程序将使用城市的总线系统API来搜索公交车站,时间离去,..
API返回一个GeoJSON文件,如下所示:
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [6.113204, 49.61028]
},
"properties": {
"id": 200403005,
"name": "Belair, Sacré-Coeur"
}
},
...
]
}
实际上文件非常大 - 所有的公共汽车站都在这个城市。
我需要找到距离用户gps位置最近的公交车站。
为了做到这一点,我打算提取所有坐标: "坐标":[6.113204,49.61028] 解析它们并找出哪一个更靠近用户位置。
Google文档以及我可以找到的有关此内容的其他文档很少,而且对初学者不友好......
在Android studio / java / google地图中有一个" feature.getGeometry()"事情,但我不能更深入,坐标'水平并获得它们。
这就是我想要做的事情:
// Iterate over all the features stored in the layer
for (GeoJsonFeature feature : layer.getFeatures()) {
// Check if the feature is what i need
if (feature.getProperty("id") != null && feature.hasProperty("name")) {
//Here I need to get the coordinates and create an array which i can use further to find the closest bus stop to user position like below (or similar).
显然没有任何东西可以超越"几何"水平,坐标?
我的意思是,我看到我能做到" feature.getProperty(" id")"并使用它,但显然我不能做" feature.getGeometry(" coordinates")",或类似的东西?
找到最近的巴士站的代码:
for (int i = 0; i < jsonArray_buses.length(); i++) {
JSONObject jsonObject = jsonArray_buses.getJSONObject(i);
double lng = Double.parseDouble(jsonArray_buses.getJSONObject(i).getString("longitude"));
double lat = Double.parseDouble(jsonArray_buses.getJSONObject(i).getString("latitude"));
Log.e("TAG_latlong", "latitude:" + latitude + " longitude:" + longitude + "marker_lat:" + lat + "marker_long:" + lng);
Location locationA = new Location("point A");
locationA.setLatitude(lat);
locationA.setLongitude(lng);
Location locationB = new Location("point B");
locationB.setLatitude(latitude);
locationB.setLongitude(longitude);
float min_distance_old = min_distance;
min_distance = min(min_distance, locationA.distanceTo(locationB));
if (min_distance_old != min_distance) {
closest = i;
}
} //end for
JSONObject display_jsonObject = jsonArray_buses.getJSONObject(closest);
//save
double lng = Double.parseDouble(jsonArray_buses.getJSONObject(closest).getString("longitude"));
double lat = Double.parseDouble(jsonArray_buses.getJSONObject(closest).getString("latitude"));
markerList.add(mMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA))
.title(display_jsonObject.getString("name"))
.snippet(Integer.toString((display_jsonObject.getInt("id"))))
.position(new LatLng(lat, lng))));
非常感谢。
答案 0 :(得分:0)
依赖{ 编译com.google.maps.android:android-maps-utils:0.5 +&#39; }
GeoJsonLayer layer = new GeoJsonLayer(mMap,jObjek); // mMap是 GoogleMap对象和jObjek是你的geojson,如果你从API尝试使用geojson尝试使用volley
希望这有帮助。layer.addLayerToMap();