Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/213.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查用户是否在Google maps v2的圆圈内_Java_Android_Google Maps - Fatal编程技术网

Java 如何检查用户是否在Google maps v2的圆圈内

Java 如何检查用户是否在Google maps v2的圆圈内,java,android,google-maps,Java,Android,Google Maps,我的地图上有一个圆圈。现在我想检测用户(或我)是否在圆圈内 Circle circle = map.addCircle(new CircleOptions() .center(new LatLng(14.635594, 121.032962)) .radius(55) .strokeColor(Color.RED) ); 我有以下代码: LocationManager lm = (LocationManager)getSystemService(Co

我的地图上有一个圆圈。现在我想检测用户(或我)是否在圆圈内

 Circle circle = map.addCircle(new CircleOptions()
     .center(new LatLng(14.635594, 121.032962))
     .radius(55)
     .strokeColor(Color.RED)
     );
我有以下代码:

 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();
            }
在myLocationListener上,我有一个:

public void onLocationChanged(Location location) {
            // TODO Auto-generated method stub
             pLong  = location.getLongitude();
             pLat = location.getLatitude();

        }
如果I参数inside
distanceBetween
是标记的坐标,则它可以正常工作,但是,即使我的位置在半径内,土司也会显示outer

有没有正确的方法?请帮忙。谢谢

编辑

我发现了一些奇怪的东西

在图片上,你可以看到我有一个文本视图,上面有5个数字(圆圈纬度、圆圈经度、索引0处的距离、索引1处的距离、距离)
distance
是一个浮点数组,用于存储圆心与用户位置之间的距离。我将半径设置为100,我认为单位是米,但是,正如您所看到的,
距离
数组中的值是:1.334880E7-81.253089090478516-10696092987060547。计算距离的公式是什么?而且,1.10乘以7等于1300万,实际上大于100。请帮帮忙,现在真的很混乱。根据圆的文档(圆的半径,以米为单位。它应该是零或更大)和distanceBetween(计算两个位置之间的近似距离,以米为单位),所以我不知道为什么会出现这种结果


使用而不是
LocationManager
。这样,您将获得与蓝点位置相同的
位置;dr-查看您的控制台输出

基本上有两种方法可以做到这一点:

  • 检查用户的(标记)是否在圆边界内
  • 计算用户与圆心之间的距离。然后检查它是否等于或小于圆半径。此解决方案需要
    球形
    库才能工作
  • 圆边界 只需添加一个圆圈:

    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
        } )
    
    然后检查标记是否在内部:

    circle.getBounds().contains( new google.maps.LatLng( 101, 21 ) );
    
    乍一看,你可能会认为这是可行的。但事实并非如此。在背景中,google(仍然)使用矩形,因此矩形边界框内的所有内容,但圆外的内容都将被识别为在latLng边界内。这是错误的,也是一个众所周知的问题,但谷歌似乎并不在意

    如果你现在认为它可以使用矩形边界,那么你错了。那些也不行

    球面距离 最简单也是最好的方法是测量距离。通过将
    &library=spherical
    附加到您的google maps脚本调用,包括球形库。那就去吧

    google.maps.geometry.spherical.computeDistanceBetween( 
        new google.maps.LatLng( 100, 20 ),
        new google.maps.LatLng( 101, 21 )
    ) <= 2000;
    
    google.maps.geometry.spheremic.ComputedDistanceBeween(
    新的google.maps.LatLng(100,20),
    新google.maps.LatLng(101,21)
    
    )我知道这个问题一年多前就有人问过了,但我已经问过了 使用定位的
    distance-between
    静态功能修复了相同的问题

    float[] distance = new float[2];
    
    Location.distanceBetween(latLng.latitude, latLng.longitude, circle.getCenter().latitude,circle.getCenter().longitude,distance);
    
    if ( distance[0] <= circle.getRadius())
    {
        // Inside The Circle
    }
    else
    {
        // Outside The Circle
    }
    
    float[]距离=新的float[2];
    位置.distanceBetween(latLng.latitude,latLng.longitude,circle.getCenter().纬度,circle.getCenter().经度,距离);
    
    如果(距离[0])计算到圆心的距离以及从圆边界到圆心的距离(半径单位为kn/英里),并检查它是否与半径一致?很可能您在地图上的位置不是从您的位置客户端返回的位置,而是
    map.setOnMyLocationChange(OnMyLocationChangeListener)
    已被弃用?@MiguelRivera是的,它是这样记录的,但我认为这是一个错误,应该予以恢复。您可以了解为什么不应弃用它。您是否仍在使用
    GoogleMap。setOnMyLocationChange(OnMyLocationChangeListener)
    ?仍在外部显示:(@MiguelRivera您发送到
    distance-between
    的lat和long值是多少?这将是完美的,但这是为javascript@MiguelRiveraIIRC底层API应该是相同的。你必须找到合适的等价物,但除此之外…:)这是javascript,不是java。