使用 javascript 或 jquery 的几何(卷积)函数

2024-04-13

我尝试这样做 3 个月 - 我需要按路线方向创建一个多边形,如下所示:

所以我写这个:

directionService.route(request, function(result, status) {
    if (status == google.maps.DirectionsStatus.OK) {
      directionsRenderer.setDirections(result);
        var r = [];
        var z = 0.5;
        var bla = result.routes[0].overview_path;
        for(var i=0 in result.routes[0].overview_path) {
            r.push(new google.maps.LatLng(bla[i].lat()+z, bla[i].lng()-z));
        }
        bla.reverse();
        for(var x=0 in bla) {
            r.push(new google.maps.LatLng(bla[x].lat()-z, bla[x].lng()+z));
        }

        var prva = new google.maps.Polyline({
            path: result.routes[0].overview_path,
            strokeColor: "#00000",
            strokeOpacity: 1.0,
            strokeWeight: 2
        });

        prva.setMap(map);

        druga = new google.maps.Polygon({
            paths: r,
            strokeColor: "#FF0000",
            strokeOpacity: 0.8,
            strokeWeight: 2,
            fillColor: "#FF0000",
            fillOpacity: 0.35
        });

        druga.setMap(map);

    } else {
      alert("Directions query failed: " + status);
    }
  });

但在某些情况下很好,在某些情况下则不然,所以我的代码会产生以下结果:

BAD case:

好案例:

那么我如何解决这个问题以通过路线方向获得漂亮的多边形???有人有想法吗?

我如何将其实现到我的代码中:

卷积算法

我的问题有什么解决办法吗?

除了这之外还有其他方法来创建我需要的东西吗?


生成第二张图像的算法在几何上非常简单。假设您有一个 x,y 数组数组,我将为您编写一些伪代码:

coordinates = [[x1,y1],[x2,y2] ... [xn,yn]]
leftcoords = []
rightcoords = []

projectionwidth = 1        # How wide the path is

for each coordinate in coordinates:
    pathvector = coordinate(index + 1) - coordinate(index - 1)
    normpathvector = pathvector/(length(pathvector))
    perpvector = projectionwidth*[-normpathvector[1],normpathvector[0]]
    leftcoords.append(coordinate + perpvector)
    rightcoords.append(coordinate - perpvector)

您必须在路径末端小心,只选择前面或后面的坐标,但您明白了。您最终会得到三组坐标轨迹。如果您想平滑路径,可以将其设置为对多个点进行平均。

好的,这里是有效的代码,但是您必须做一些工作来平滑它,以解决路径中的抖动。我的建议是对之前的几个点进行平均,或者只是抓住几个后面的点。

http://jsbin.com/uTATePe/2/ http://jsbin.com/uTATePe/2/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 javascript 或 jquery 的几何(卷积)函数 的相关文章

随机推荐

  • 快速对齐文本视图中的文本

    我知道这是一个非常微不足道的问题 但我必须能够使用 swift 在文本视图中对齐文本 它是故事板上已经存在的文本视图 已连接到插座 我们称之为justifyTextView 有人可以为此提供一些代码吗 我似乎无法在网上找到任何有关它的信息
  • URL 重写 - 多个查询

    我想看看如何实现以下重写规则 From https localhost site page place place west https localhost site page location location cityname To h
  • 下载控制板软件模拟器

    我有兴趣学习如何用 c 进行嵌入式系统编程 但是 我需要一些硬件 我想知道有什么软件可以模拟控制板的功能吗 控制板在下面的教程中列出 http www learn c com hardware htm http www learn c co
  • 如何检查 db sqlite xamarin iOS 中是否存在表

    如何检查表的创建位置db数据库与否 var folder Environment GetFolderPath Environment SpecialFolder Personal SQLiteConnection db new SQLite
  • 如何在C++中创建地图函数?

    假设有一个整数列表 1 2 3 4 5 和一个映射函数 它将每个元素乘以 10 并返回修改后的列表为 10 20 30 40 50 而不修改原始列表列表 如何在 C 中有效地完成此操作 这是一个例子 include
  • 在 REBOL 中动态添加单词到上下文

    想象一下以下 REBOL 代码 foo context bar 3 我现在有一个上下文foo其中 bar被定义为 如何动态地将新单词注入到此上下文中 是否可以 我试过了 set any in foo baz 3 但这不起作用 因为表达式in
  • 时间:2019-03-17 标签:c#datetimeformat

    我希望根据当前的文化为我的日期时间设置特定的格式 所以我尝试这个 dateTime ToString dd MM yyyy hh mm 这部分是可以的 被特定于区域性的分隔符替换 但日和月的顺序不会根据文化而改变 如 MM dd Using
  • 将日期转换为Mysql日期格式php

    我的数据库中有这个日期格式 19th April 2013 我想将其转换为 2013 04 19 我已经使用了 if else 条件 但是它变得太长太复杂 有没有内置函数 Use PHP s date功能 date Y m d strtot
  • 基于“file:///C:/”的访问不允许 navigator.geolocation.getCurrentPosition [重复]

    这个问题在这里已经有答案了 可能的重复 Chrome 中的 HTML5 地理位置提示 https stackoverflow com questions 5423938 html 5 geo location prompt in chrom
  • 我可以实例化 std::reference_wrapper (其中 T 是不完整类型)吗?

    Does std reference wrapper
  • 为什么 [用户名].github.io 上的 GitHub 页面不会显示?

    我创建了 repo username github io 在 gh pages 分支中推送了第一次提交 等待了 30 分钟 GitHub 说 不应该超过 10 分钟 并在尝试加载我的页面时遇到 404 页面 用不同的浏览器查看 结果都是一样
  • 在 Mac App Store 的 Electron 应用程序中实现应用内购买

    我环顾四周 似乎有几个人遇到这个问题 但似乎没有人解决它 将 Apple 应用内购买添加到 Electron HTML JS 应用程序 https stackoverflow com questions 39841666 adding ap
  • OpenAPI V3 Maven Plugin使用multipart/form-data生成多文件上传的不完整接口代码

    我使用 Openapi V3 和 Maven 插件 openapi generator maven plugin 5 3 0 来使用 multipart form data 上传多个文件 但是 生成的接口代码不完整 在默认方法之一中缺少 L
  • 如何用通俗语言解释CSS Float?

    如何用通用语言 而不是编程 解释CSS Float 有没有现实生活中的例子可以举个例子来解释CSS Float 有没有以非常简单的方式解释浮动的幻灯片 就像听起来一样解释它 之所以称为 浮动 是因为元素像船一样 漂浮 考虑内容的其余部分是水
  • LINQ to SQL:存储过程结果

    如何更改 LINQ to SQL 设计器生成的存储过程结果的类名 除了弄乱 Designer cs 之外 另外 如何对存储过程的结果集执行 linq 查询 您可以在 dbml 中编辑它吗 就我个人而言 我倾向于将自动生成的类型 来自函数和存
  • 使用 Pandas 为来自多个 URL 的多个 CSV 文件创建一个数据框

    我想使用来自 URL 的多个 CSV 文件的 Pandas 创建 1 个数据框 结构 并保留初始标题行 使用单个 URL 一切都会按预期工作 df pd read csv http www URL1 csv 我已尝试使用多个 URL 进行以
  • JMeter 中的周期性后台任务

    我的测试计划中的请求使用授权令牌 我知道该令牌将在 1 小时内过期 我需要以某种方式每 59 分钟重新请求一次令牌 直到测试完成 有人可以建议最好的方法吗 看起来使用 While 控制器测试将永远不会完成并停留在永恒的 while 循环中
  • 在控制台中显示完整的 Git 提交消息

    我正在尝试在控制台中输出完整的提交消息 并且我能够获取该消息 但是为了查看完整的消息 我必须不断调整控制台窗口的大小以显示更多信息 我在 Windows 上使用 Cygwin 我正在使用的命令是git log pretty full 寻呼机
  • PHP 缺少 mb_strpos 函数?

    我收到此错误 PHP Fatal error Call to undefined function mb strpos in my file php 这很奇怪 因为mb strpos http us php net manual en fu
  • 使用 javascript 或 jquery 的几何(卷积)函数

    我尝试这样做 3 个月 我需要按路线方向创建一个多边形 如下所示 所以我写这个 directionService route request function result status if status google maps Dire