地球上的点【经纬度】到几个点形成的折现或者直线最短的距离和折现上点的坐标【经纬度】

地球上的点【经纬度】到几个点形成的折现或者直线最短的距离和折现上点的坐标【经纬度】

情景

本人在工作的原因需要计算批量地球坐标上一个点【经纬度】到另外由好几个点【经纬度形成的折现或者直线】之间的最短距离和在折现上的点的坐标【经纬度】
如图:
以下为已经存在的点坐标点:
已经有的坐标
以下图为多个折线组成的点的坐标
多种点组成的折线
上面的折现可能是2,3,4,5个点组成的
要计算的每个点到折现的最短距离和最短距离时候折线上点的坐标
最终生成的效果如下:
生成的结果

步骤

做法:利用高德JSAPI提供的函数计算

高德地图JPAPI地址:https://lbs.amap.com/demo/jsapi-v2/example/calcutation/calcute-distance-from-marker-to-line

过程

1,看示例代码可以知道核心逻辑调用如下图:
主要用了AMap.GeometryUtil.closesOnLine(pos.path);计算最近的点
用AMap.GeometryUtil.distanceToLine(pos,path);计算距离最近的点的最短距离
高德JSAPI代码
2,在示例代码中加上自己的逻辑封装一个自己的逻辑代码,用js实现将本地的两个excel文件上传然后批量调用得到closestPositionOnLine 和 distance

function execute() {
        out = "";
        json_poslist = JSON.parse(poslist);
        json_pathlist = JSON.parse(pathlist);
        for (var i = 0; i < json_poslist.length; i++) {
            address = json_poslist[i]["地点"]
            pos = [parseFloat(json_poslist[i]["坐标"].replace("[","").replace("]","").split(",")[0]),parseFloat(json_poslist[i]["坐标"].replace("[","").replace("]","").split(",")[1])]
            for (var j = 0; j < json_pathlist.length; j++) {
                line = json_pathlist[j]["折线"]
                path = to_array(json_pathlist[j]["折线坐标集合"])
                ret = compute2(pos,path)
                console.log(address,line,pos,path,ret)
                out = out + address + '##' + line + '##' + JSON.stringify(pos) + '##' + JSON.stringify(path) + '##' + ret + "$$"

            }

        }

        var blob = new Blob([JSON.stringify(out)], { type: "text/plain;charset=utf-8" });
        saveAs(blob, "export.txt");
    }

3,用xlsx.core.min.js界面上传两个文件到js中处理,绑定调用2中的execute方。xlsx.core.min.js用读入上传的xlsx文件。
4,用FileSaver.js 将数据输出到本地txt文件中。FileSaver.js 用来生成本地的txt文件。

代码:链接:https://pan.baidu.com/s/1A8Fm9U7i3eLxfleQtJR23A
提取码:t221

产物截图

代码截图

在这里插入图片描述

界面截图

在这里插入图片描述

点击执行会生成export.txt文件

在这里插入图片描述

利用写好的t.py 能 生成csv文件

在这里插入图片描述

思考

1,这种一般网上有人整理公式,但是我看了下公式表复杂,而且坐标跨度比较大的时候不准确;
2,可以找到已经实现的API接口调用计算,但是我找了很久没找到。有类似实现思路的可以交流下。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值