从java / Android Studio

时间:2017-01-08 18:33:09

标签: java google-maps coordinates extract geojson

我是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))));

非常感谢。

1 个答案:

答案 0 :(得分:0)

  1. 您需要在依赖项之间的gradle中添加此代码
  2.   

    依赖{       编译com.google.maps.android:android-maps-utils:0.5 +&#39; }

    1. 在onCreate中添加此代码
    2.   

      GeoJsonLayer layer = new GeoJsonLayer(mMap,jObjek); // mMap是   GoogleMap对象和jObjek是你的geojson,如果你从API尝试使用geojson尝试使用volley

      1. 将GeoJsonLayer添加到地图
      2.   

        layer.addLayerToMap();

        希望这有帮助。