Jeo*_*ebs 10 java android google-maps
我的地图上有一个圆圈.现在我想检测用户(或我)是否在圈内.
Circle circle = map.addCircle(new CircleOptions()
.center(new LatLng(14.635594, 121.032962))
.radius(55)
.strokeColor(Color.RED)
);
Run Code Online (Sandbox Code Playgroud)
我有这个代码:
LocationManager lm = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
LocationListener ll = new myLocationListener();
lm.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,ll);
Location.distanceBetween( pLat,pLong,
circle.getCenter().latitude, circle.getCenter().longitude, distance);
if( distance[0] > circle.getRadius() ){
Toast.makeText(getBaseContext(), "Outside", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(getBaseContext(), "Inside", Toast.LENGTH_LONG).show();
}
Run Code Online (Sandbox Code Playgroud)
在myLocationListener上我有这个:
public void onLocationChanged(Location location) {
// TODO Auto-generated method stub
pLong = location.getLongitude();
pLat = location.getLatitude();
}
Run Code Online (Sandbox Code Playgroud)
如果我的参数里面distanceBetween是标记的坐标,它可以正常工作,但是,即使我的位置在半径内,吐司也显示在外面.

任何想法如何正确地做到这一点?请帮忙.谢谢!
编辑
我发现了一些奇怪的事
在图片上,你可以看到我上面有一个textView,它有5个数字(圆纬度,圆经度,索引0处的距离,索引1处的距离,距离2).distance是一个浮点数组,用于存储圆心和用户位置之间的距离.我将半径设置为100,我认为单位是米,但是,如您所见,distance数组中的值为:1.334880E7,-81.25308990478516,-10696092987060547.计算距离的公式是什么?而且,1.10次增加到7的次数约为1300万次,真的大于100次.请立即帮助它真正令人困惑.根据Circle的文档(圆的半径,以米为单位.它应该为零或更大.)和distanceBetween(计算两个位置之间的近似距离,以米为单位),所以我不知道为什么这是结果.

tl; dr?jsFiddle在这里 -查看您的控制台输出。
基本上有两种方法可以做到这一点:
spherical库才能工作。只需添加一个圆圈:
circle = new google.maps.Circle( {
map : map,
center : new google.maps.LatLng( 100, 20 ),
radius : 2000,
strokeColor : '#FF0099',
strokeOpacity : 1,
strokeWeight : 2,
fillColor : '#009ee0',
fillOpacity : 0.2
} )
Run Code Online (Sandbox Code Playgroud)
然后检查标记是否在其中:
circle.getBounds().contains( new google.maps.LatLng( 101, 21 ) );
Run Code Online (Sandbox Code Playgroud)
乍一看,您可能会认为这可行。但事实并非如此。在背景谷歌(静止)使用的矩形,所以一切矩形边框内,但外侧的圆将被识别为内部的经纬度范围。这是错误的,也是已知的问题,但Google似乎不在乎。
如果您现在认为它可以在矩形范围内工作,那么您错了。那些也不起作用。
最简单,最好的方法是测量距离。通过附加&library=spherical到您的Google Maps脚本调用来包括球形库。然后去
google.maps.geometry.spherical.computeDistanceBetween(
new google.maps.LatLng( 100, 20 ),
new google.maps.LatLng( 101, 21 )
) <= 2000;
Run Code Online (Sandbox Code Playgroud)
使用GoogleMap.setOnMyLocationChange(OnMyLocationChangeListener)而不是LocationManager. 这样您将获得Location与蓝点位置相同的 s。
| 归档时间: |
|
| 查看次数: |
10728 次 |
| 最近记录: |