2015-08-08 18 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

傑伊回答! –