zoukankan      html  css  js  c++  java
  • Android开发-百度地图之电子围栏

    功能实现:根据经纬度创建一个坐标,判断该坐标是否在指定圆形覆盖范围内

    两个计算方法,直接套用:

    /**
     * 地球半径
     */
    private static double EARTH_RADIUS = 6378138.0;
    private static double rad(double d)
    {
        return d * Math.PI / 180.0;
    }


    /**
     * 计算是否在圆上(单位/千米)
     *
     * @Title: GetDistance
     * @Description: TODO()
     * @param radius 半径
     * @param lat1  纬度
     * @param lng1  经度
     * @return
     * @return double
     * @throws
     */
    public static boolean isInCircle(double radius,double lat1, double lng1, double lat2, double lng2)
    {
        double radLat1 = rad(lat1);
        double radLat2 = rad(lat2);
        double a = radLat1 - radLat2;
        double b = rad(lng1) - rad(lng2);
        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
                Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
        s = s * EARTH_RADIUS;
        s = Math.round(s * 10000) / 10000;
        if(s > radius) {//不在圆上
            return false;
        }else {
            return true;
        }
    }


    直接在你需要的方法里面调用:
    这里的c是一个布尔类型,然后直接拿去放在判断语句里面
    这里面的变量是我自定义的,汝如果套用的话更改一下自己的变量
    “50l”意思是50米,那个不是数字1,是字母“l”

    Toast.makeText(MainActivity.this,isInCircle(50l,mLatitude,mLongitude,point.latitude,point.longitude)+"",Toast.LENGTH_SHORT).show();
     c=isInCircle(50l,mLatitude,mLongitude,point.latitude,point.longitude);

  • 相关阅读:
    Object-C,NSSet,不可变集合
    NYIST 860 又见01背包
    NYIST 1070 诡异的电梯【Ⅰ】
    HDU 1542 Atlantis
    HDU 4756 Install Air Conditioning
    CodeForces 362E Petya and Pipes
    HDU 4751 Divide Groups
    HDU 3081 Marriage Match II
    UVA 11404 Palindromic Subsequence
    UVALIVE 4256 Salesmen
  • 原文地址:https://www.cnblogs.com/yunting/p/11200805.html
Copyright © 2011-2022 走看看