【坐标范围计算显示缩放级别zoom自适应显示地图】

这篇具有很好参考价值的文章主要介绍了【坐标范围计算显示缩放级别zoom自适应显示地图】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一.数据:

数据准备

var points = [
    {"lng":116,"lat":40,"status":1,"id":50},
    {"lng":117,"lat":31,"status":1,"id":2},
    {"lng":116,"lat":34,"status":0,"id":3},
    {"lng":118,"lat":39,"status":0,"id":4},
    {"lng":110,"lat":35,"status":1,"id":5}
 ];

计算最大经纬度,最小经纬度。计算中心点。并调用getZoom()获取显示级别。

设置中心点和缩放大小
// 设置中心点和缩放大小  {maxLng, minLng, maxLat, minLat}
setMapCenterZoom(centerObjet){
    // 设置 缩放比例和
    const {maxLng, minLng, maxLat, minLat } =  centerObjet
    const zoom = this.getZoom(maxLng, minLng, maxLat, minLat);
    var cenLng =(parseFloat(maxLng)+parseFloat(minLng))/2;
    var cenLat = (parseFloat(maxLat)+parseFloat(minLat))/2;
    this.map.setCenter(( new TMap.LatLng(cenLat, cenLng)));
    this.map.setZoom(zoom)
},
获取最大值
/**
* 获取最大经纬度
* @param getMaxLngAndLat {Array<Array<Object>>} [[{lat, lng}]]
* @return { Object } {lat lng}
*/
getMaxLngAndLat(paths){
    if(paths.length > 0){
        let maxLng = paths[0].lng;
        let minLng = paths[0].lng;
        let maxLat = paths[0].lat;
        let minLat = paths[0].lat;
        let res;
        for (let i = paths.length - 1; i >= 0; i--) {
            res = paths[i];
            if (res.lng > maxLng) maxLng = res.lng;
            if (res.lng < minLng) minLng = res.lng;
            if (res.lat > maxLat) maxLat = res.lat;
            if (res.lat < minLat) minLat = res.lat;
        }
        return {maxLng, minLng, maxLat, minLat }
    }
},
获取缩放比例
//根据经纬极值计算绽放级别。
getZoom (maxLng, minLng, maxLat, minLat) {
    var zoom = ["50","100","200","500","1000","2000","5000","10000","20000","25000","50000","100000","200000","500000","1000000","2000000"]//级别18到3。
    var pointA = new TMap.LatLng(maxLat,maxLng);  // 创建点坐标A
    var pointB = new TMap.LatLng(minLat,minLng);  // 创建点坐标B
    var distance = TMap.geometry.computeDistance([pointA,pointB]).toFixed(1);  //获取两点距离,保留小数点后两位
    for (var i = 0,zoomLen = zoom.length; i < zoomLen; i++) {
        if(zoom[i] - distance > 0){
            return 18-i+3;//之所以会多3,是因为地图范围常常是比例尺距离的10倍以上。所以级别会增加3。
        }
    };
},
地点坐标计算中心点
/**
* 地点坐标计算中心点
* @param geoCoordinateList {Array<Array<Object>>} [[{lat, lng}]]
* @return { Object } {lat lng}
*/
getCenterPoint(geoCoordinateList) {
    const geoCoordinateListFlat = geoCoordinateList.reduce((s, v) => {
        return (s = s.concat(v))
    }, [])
    const total = geoCoordinateListFlat.length
    let X = 0
    let Y = 0
    let Z = 0
    for (const g of geoCoordinateListFlat) {
        const lat = g.lat * Math.PI / 180
        const lon = g.lng * Math.PI / 180
        const x = Math.cos(lat) * Math.cos(lon)
        const y = Math.cos(lat) * Math.sin(lon)
        const z = Math.sin(lat)
        X += x
        Y += y
        Z += z
    }
    X = X / total
    Y = Y / total
    Z = Z / total
    const Lon = Math.atan2(Y, X)
    const Hyp = Math.sqrt(X * X + Y * Y)
    const Lat = Math.atan2(Z, Hyp)
    return { lng: Lon * 180 / Math.PI, lat: Lat * 180 / Math.PI }
}

完整代码

方法调用
this.listData.forEach(item=>{
    let paths = []
    JSON.parse(item.xq_coordinates).forEach(mapItem=>{
        paths.push( new TMap.LatLng(mapItem.lat, mapItem.lng))
        if(this.listData.length == 1){
            initCenterList.push({lat:mapItem.lat,lng:mapItem.lng})
        }
    })
    const center = new TMap.geometry.computeCentroid(paths) // 获取多边形中心点
    centerList.push(center)
})
//  > 1 多个区域 | 单个区域
let centerObjet = centerList.length > 1 ? this.getMaxLngAndLat(centerList) : this.getMaxLngAndLat(initCenterList)
this.setMapCenterZoom(centerObjet )
方法封装
// 设置中心点和缩放大小  {maxLng, minLng, maxLat, minLat}
setMapCenterZoom(centerObjet){
    // 设置 缩放比例和
    const {maxLng, minLng, maxLat, minLat } =  centerObjet
    const zoom = this.getZoom(maxLng, minLng, maxLat, minLat);
    var cenLng =(parseFloat(maxLng)+parseFloat(minLng))/2;
    var cenLat = (parseFloat(maxLat)+parseFloat(minLat))/2;
    this.map.setCenter(( new TMap.LatLng(cenLat, cenLng)));
    this.map.setZoom(zoom)
},
//根据经纬极值计算绽放级别。
getZoom (maxLng, minLng, maxLat, minLat) {
        var zoom = ["50","100","200","500","1000","2000","5000","10000","20000","25000","50000","100000","200000","500000","1000000","2000000"]//级别18到3。
        var pointA = new TMap.LatLng(maxLat,maxLng);  // 创建点坐标A
        var pointB = new TMap.LatLng(minLat,minLng);  // 创建点坐标B
        var distance = TMap.geometry.computeDistance([pointA,pointB]).toFixed(1);  //获取两点距离,保留小数点后两位
        for (var i = 0,zoomLen = zoom.length; i < zoomLen; i++) {
            if(zoom[i] - distance > 0){
                return 18-i+2;//之所以会多3,是因为地图范围常常是比例尺距离的10倍以上。所以级别会增加3。
            }
        };
},
// 获取最大经纬度
getMaxLngAndLat(paths){
    if(paths.length > 0){
        let maxLng = paths[0].lng;
        let minLng = paths[0].lng;
        let maxLat = paths[0].lat;
        let minLat = paths[0].lat;
        let res;
        for (let i = paths.length - 1; i >= 0; i--) {
            res = paths[i];
            if (res.lng > maxLng) maxLng = res.lng;
            if (res.lng < minLng) minLng = res.lng;
            if (res.lat > maxLat) maxLat = res.lat;
            if (res.lat < minLat) minLat = res.lat;
        }
        return {maxLng, minLng, maxLat, minLat }
    }
},

文章来源地址https://www.toymoban.com/news/detail-794267.html

到了这里,关于【坐标范围计算显示缩放级别zoom自适应显示地图】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python使用Matplotlib通过鼠标交互实现缩放、移动以及线上点坐标显示功能

    参考文章: 缩放:python 桌面软件开发-matplotlib画图鼠标缩放拖动_matplotlib缩放-CSDN博客 获取点坐标参考的文章忘了,侵权即删

    2024年04月13日
    浏览(41)
  • 卡巴斯基 | 全球地区范围网络安全威胁实时数据显示地图

    卡巴斯基 卡巴斯基反病毒软件是世界上拥有最尖端科技的杀毒软件之一,总部设在俄罗斯首都莫斯科,全名“卡巴斯基实验室”,是国际著名的信息安全领导厂商之一,创始人为俄罗斯人尤金·卡巴斯基。         公司为个人用户、企业网络提供反病毒、防黑客和反垃圾

    2024年02月11日
    浏览(46)
  • Qt6使用QChartView类与鼠标事件实现波形的缩放、平移、坐标轴单轴缩放与鼠标悬停显示点的数据

            说在前面,本人也是近段时间刚开始学习Qt,实现上述功能的方法可能并不是最优,写此篇文章也是记录下学习的过程,也与大家分享一下。(在此先描述,后面会附上代码)(前面说的会比较基础)         首先,要使用QChartView类得现在.pro文件中加入:(得确保

    2024年02月09日
    浏览(39)
  • 使用百度地图坐标在微信小程序中定位显示

    一.需求描述:设备在上线时需要在上线点记录所在地点的坐标和位置描述信息 分别需要实现三个功能 1. 根据坐标点显示位置信息 , 图1 中的红色坐标点跳转到 图2 时,在腾讯地图上标出所在坐标点,并显示地点信息; 2. 定位当前所在位置 :点击蓝色图标,会定位当前所在位

    2024年02月09日
    浏览(82)
  • 高德地图通过画面中的一个覆盖物设置图中心点和zoom

    需要将这个覆盖物置于地图中间且不超过地图边界的放至最大 计算覆盖物中心点,定为地图中心点 计算覆盖物的最大经纬度,和最小经纬度,测算出实际最长距离,根据距离与zoom对应关系设置zoom

    2024年02月09日
    浏览(56)
  • Openlayers实战:自定义放大缩小,显示zoom等级

    Openlayers地图中,默认的zoom组件是在左上角,这个组件很重要,方便大家来操控地图。在实际项目中,大家往往要改写这个组件,通常会放置到右下角,方便鼠标操作。 在我们的实战课程里,自定义了放大缩小,并增加了显示zoom等级的功能,实际的项目中往往都是这样办理的

    2024年02月13日
    浏览(66)
  • 前端大屏自适应缩放

    2024年02月13日
    浏览(50)
  • 前端实现大屏缩放自适应屏幕

    在前端实现大屏缩放自适应屏幕的过程中,可以使用以下几种方式: 使用CSS3的缩放属性(transform: scale())来缩放页面元素,以适应不同大小的屏幕。缩放后,需要使用CSS来重新布局和调整页面元素的尺寸和位置。 使用CSS的@media查询来根据不同的屏幕大小调整元素的样式和布

    2024年02月20日
    浏览(47)
  • MATLAB坐标设置:范围、主次坐标等常见问题

    (1)打开次刻度: (2)设置主刻度: (3)设置次刻度: (4)设置刻度线长度(高度和宽度):第一个元素是二维视图中的刻度线长度,第二个元素是三维视图中的刻度线长度。指定值是以可见的 x 轴、y 轴或 z 轴中最长线条为基准进行归一化的值。详见Axes 属性-坐标区的

    2024年02月12日
    浏览(39)
  • 【uniapp 图片展示自适应,等比例缩放】

    在uniapp页面展示中会遇到图片展示问题,等比缩放或者自适应view大小。 只固定调整图片的宽度(或者高度)而图片的高度(或者宽度)可以自动根据图片原始比例调节的情况,这种情况下我们可以通过使用image标签的mode属性控制。 组件默认宽度 320px、高度 240px; 注意uniap

    2024年02月12日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包