2015-08-08 50 views
1

我已经创建了一个函数,可以跟踪用户的路线并创建一条折线。我一直在尝试将它保存到Firebase中,因为我使用的方法是,每次在位置更改时,用户的新lat和long都将保存到Firebase中,routeName,routeName,lat,lng如何在数据库中保存跟踪多义线?

用户已设置和(当前)静态routeId。

if (mCurrentLocation != null) { 
     String newLat = String.valueOf(mCurrentLocation.getLatitude()); 
     String newLng = String.valueOf(mCurrentLocation.getLongitude()); 

     LatLng newPoint = new LatLng(mCurrentLocation.getLatitude(), mCurrentLocation.getLongitude()); 
     List<LatLng> points = route.getPoints(); 
     points.add(newPoint); 
     route.setPoints(points); 

     Map<String, String> routePoint = new HashMap<String,String>(); 
     routePoint.put("routeID", "124"); 
     routePoint.put("routeName", saveRouteTitle); 
     routePoint.put("lat", newLat); 
     routePoint.put("lng", newLng); 
     mFirebaseRef.push().setValue(routePoint); 
    } 

然而,当我使用的适配器,像这样,

@Override 
protected void populateView(View view, Route route) { 
    // Map a Chat object to an entry in our listview 
    String routeName = route.getRouteName(); 
    int routeID = route.getRouteID(); 
    String lat = route.getLat(); 
    String lng = route.getLng(); 
    TextView tvRouteName = (TextView) view.findViewById(R.id.tvRouteName); 
    tvRouteName.setText(routeName + ": "); 
} 

什么,我得到的是“路线”的每一个孩子,这意味着如果routeName我已经设置的列表视图检索数据是"Walking",会出现一个充满“散步”的列表。 我想一起保存相同routeName的所有纬度和长度,然后在列表视图中检索它们,因此当用户选择routeName时,我可以使用数据库中的lat和lngs重新生成地图上的折线。这可以做到吗?我不介意不使用Firebase,但在线服务器对于备份更为理想。

回答

1

Firebase将是存储和检索此类数据的理想选择。

例如,假设你有用户输入的路线名称和编号,你想从开始沿着路径航点(纬度和长期为各航点)存储到目的地:

的一种方式中的数据可能是存储在火力地堡是:

random_route_node_name 
    routeName: "a route name" 
    routeId: "some route id" 
    waypoints 
     random_waypoint_node_name 
     lat: "latitude" 
     lon: "longitude" 
     random_waypoint_node_name 
     lat: "latitude" 
     lon: "longitude" 
random_route_node_name 
    routeName: "a route name" 
    routeId: "some route id" 
    waypoints 
     random_waypoint_node_name 
     lat: "latitude" 
     lon: "longitude" 
     random_waypoint_node_name 
     lat: "latitude" 
     lon: "longitude" 

在每个父节点(random_route_node_name)你有routeName的ID,然后沿路径的航点,每个航点有一个经度和纬度。

有几件重要的事情需要指出。

random_route_node_name和random_waypoint_node_name是使用Firebase childByAutoId或其他非特定名称生成的名称。这是因为节点的名称不应该直接与数据绑定,因此可以在不影响节点名称的情况下更改数据。路途点也是一样的;可以在不影响子父级名称的情况下修改航点数据数据

我不知道是否需要功能来查询航点,但是如果是这样,则应该做的其他事情是平整此数据 - 航点每条路线可以存储在一个单独的节点中,这将允许在高层次上查询特定的航点。例如,用户想要知道其当前位置半径内的所有路标。

就这样,查询只能在特定的路线中完成。

+0

杰伊回答! –