PHP根据中心经纬度和半径画圆圈得出的最大最小经纬度

    /**
     * 根据中心经纬度和半径画圆圈得出的最大最小经纬度
     * @param lon 经度
     * @param lat 纬度
     * @param raidus 半径距离单位米
     */
    public function getAround($lon,$lat,$raidus){
    $pai = 3.14159265;
    $degree = (24901*1609)/360.0;
    $dpmLat = 1/$degree;
    $radiusLat = $dpmLat*$raidus;
    $minLat = $lat - $radiusLat;
    $maxLat = $lat + $radiusLat;
    $mpdLng = $degree*cos($lat * ($pai/180));
    $dpmLng = 1 / $mpdLng;
    $radiusLng = $dpmLng*$raidus;
    $minLng = $lon - $radiusLng;
    $maxLng = $lon + $radiusLng;
    return array($minLng,$maxLng,$minLat,$maxLat);
    }
### 实现 UniApp 地图组件中的形覆盖物 在 UniApp 的地图组件中实现根据指定坐标点半径绘制形覆盖物,可以遵循特定的方法来确保兼容性功能性。由于 `renderjs` 环境下无法直接调用 API 或者加载外部 JavaScript 文件[^1],因此推荐的做法是利用服务端或者 Vue 组件逻辑部分完成数据获取其他复杂计算工作。 对于创建圆圈这样的图形叠加层而言,在 H5 平台可以直接借助高德地图 Web API 提供的相关接口;而对于小程序平台,则应该采用各自平台的地图 SDK 功能来进行开发。下面给出一段适用于 H5 小程序通用的方式: #### 使用 Map Context 对象添加 Circle Overlay 为了适应不同环境下的需求差异,这里提供了一种较为灵活的方式来定义并显示形区域。此方式主要依赖于 `mapContext` 来操作地图实例,并通过其提供的方法动态地向地图上添加自定义的几何对象——即本案例中的形。 ```javascript // 假设已经初始化好了一个 mapContext 变量用于控制地图视图 let circleOptions = { center: {latitude: 39.9087, longitude: 116.3975}, // 设置中心位置经纬度 radius: 1000, // 半径单位米 }; function addCircleOverlay(mapContext) { let overlayData = [{ type: 'circle', ...circleOptions, fillColor: '#FFCC00', // 内部填充颜色 fillOpacity: 0.5, // 透明度设置 strokeColor: '#FFCC00', // 边框线条颜色 strokeWidth: 2 // 边框宽度像素数 }]; try { if (typeof wx !== "undefined") { // 判断当前运行环境是否为微信小程序 const res = uni.createMapContext('myMap'); // 获取页面内的第一个 <map> 组件上下文 res.addGroundOverlay({ bounds: [ [circleOptions.center.latitude - (circleOptions.radius / EARTH_RADIUS), circleOptions.center.longitude - (circleOptions.radius / EARTH_RADIUS)], [circleOptions.center.latitude + (circleOptions.radius / EARTH_RADIUS), circleOptions.center.longitude + (circleOptions.radius / EARTH_RADIUS)] ], imageUrl: '', // 如果不需要图片背景则留空字符串即可 success() {} }); } else { // 否则是H5浏览器环境下执行如下代码 AMap.plugin(['AMap.CircleEditor'], function(){ var circle = new AMap.Circle(overlayData); mapContext.add(circle); // 添加到地图容器内展示出来 }) } } catch(error){ console.error("Failed to create circle overlay:", error); } } ``` 注意上述代码片段中涉及到的一个常量 `EARTH_RADIUS` 表示地球平均半径(约等于6371km),用来辅助转换地理坐标系下的距离表示法。实际应用时可根据具体业务场景调整这些参数配置。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值