2013-03-11 61 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

相关问题