2013-03-11 76 views
0

基本上標題說明了一切。我並不像現在那樣在地圖上繪製數據庫中的每個條目,而是要查詢數據庫並只繪製其座標位於圍繞用戶當前位置繪製的圓圈內的條目,但是我無法很清楚如何去做。目前,我已經編寫了代碼,用於繪製用戶當前在地圖上的位置以及存儲在我的數據庫中的所有條目的位置以及當前位置周圍的圓圈(請參見下圖)。根據下面的圖片,我只想繪製圓圈內的三個標記。只在繪製的Cricle或周界內繪製標記Google Maps v2 Android

Current Code

有誰知道,如果有檢查,如果存儲在我的數據庫秋天的圓面積內的經緯度座標的任何方式?或者,如果沒有,任何人都可以提出任何使用類似想法的替代方案。

另一個我正在考慮的方法是使用方形/矩形而不是圓形,以便我可以簡單地比較我的條目與方形/矩形的邊界的座標,但是我並不真正知道可行性這被視爲Google Maps API不支持這些形狀。我也遇到了LatLngBounds類,這可能是有用的,但我找不到任何使用它的示例代碼。關於我如何做這件事的任何想法?

任何幫助,非常感謝!

回答

0

好吧,我想出了一個解決方案使用我在問題中提到的LatLngBounds類。它的功能是:

  1. 圍繞用戶當前的緯度和經度座標(此示例大致爲一平方公里)創建一個新的矩形外圍。
  2. 然後檢查周邊是否包含存儲在數據庫中的座標。
  3. 如果有,標記將繪製在地圖上。

    public void getNearbyMarkers(){ 
        LatLngBounds perimeter = new LatLngBounds(new LatLng(currentLat - 0.004, 
          currentLon - 0.004), new LatLng(currentLat + 0.004, currentLon + 0.004)); 
    
    
        if (perimeter.contains(LatlongFromDatabase)) { 
         //Plot Marker on Map 
        } else { 
         Toast.makeText(getApplicationContext(), "Co-ordinates not in perimeter!", 8).show(); 
        } 
    } 
    
1

我相信圓有固定的半徑和中心點。

所以,去用這種方法得到的中心和一些經緯度之間的距離,並設定一個條件

距離< =半徑

public static String getDistance(LatLng ll_source, LatLng ll_destination, 
     int unit) { 


    int Radius = 6371;// radius of earth in Km 

    double lat1 = ll_source.latitude; 
    double lat2 = ll_destination.latitude; 
    double lon1 = ll_source.longitude; 
    double lon2 = ll_destination.longitude; 
    double dLat = Math.toRadians(lat2 - lat1); 
    double dLon = Math.toRadians(lon2 - lon1); 
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) 
      + Math.cos(Math.toRadians(lat1)) 
      * Math.cos(Math.toRadians(lat2)) * Math.sin(dLon/2) 
      * Math.sin(dLon/2); 
    double c = 2 * Math.asin(Math.sqrt(a)); 
    double valueResult = Radius * c; 
    double km = valueResult/1; 
    DecimalFormat newFormat = new DecimalFormat("####"); 
    Integer kmInDec = Integer.valueOf(newFormat.format(km)); 
    double meter = valueResult % 1000; 
    Integer meterInDec = Integer.valueOf(newFormat.format(meter)); 
    DecimalFormat df = new DecimalFormat("#.#"); 
    return df.format(valueResult); 
} 
+0

感謝的人,我得到了某種形式的解決方案時自己,但我一定會檢查了這一點爲好。 – 2013-03-11 22:16:55

相關問題