创建一个任意弯曲的 Well Known Text LineString 以在 OpenLayers 中显示
Posted
技术标签:
【中文标题】创建一个任意弯曲的 Well Known Text LineString 以在 OpenLayers 中显示【英文标题】:Creating an abitrary, curved Well Known Text LineString for display in OpenLayers 【发布时间】:2010-08-09 19:08:34 【问题描述】:我正在生成的地图图层中的点之间动态生成 WKT LineString,以便在 OpenLayers 中显示。我想让点之间的线弯曲,并且我希望能够根据各种输入变量动态改变曲率。
这是针对网络监控应用程序,我们希望曲率基于点之间的延迟时间(不是原始延迟本身,而是在给定时间段内与“正常”值的偏差)。
虽然一些 GIS 应用程序和数据库支持 WKT 的 CircularString
扩展,但 OpenLayers 对此一无所知。
所以我需要从线段中生成一条曲线:
现在,行字符串很简单:
LINESTRING(hop1_long hop1_lat, hop2_long hop2_lat)我可以确定使线段“弯曲”的唯一方法是插入中间点:
LINESTRING(hop1_long hop1_lat, long1 lat1, long2 lat2, ..., hop2_long hop2_lat)这对于我们的应用程序来说应该是完全足够的了,但是我不知道如何生成中间点!
我假设有众所周知的方法/算法可以在二维平面中从线段中生成“弯曲”线。有没有人对如何实现这一点有任何想法,或者有任何可能有用的书籍/文章/在线资源?
更新(2010-08-13):
贝塞尔曲线就是门票,阅读基本贝塞尔算法后,实现起来非常容易。但是我必须编写一些代码来生成控制点。这是我想出的php代码。这假定了一个“Vector2d”类,其中包含x
和y
成员。
【问题讨论】:
【参考方案1】:如果您想生成一系列构成曲线的线段,请先查看易于由单个变量参数化的曲线。例如,一个以 (cx,cy) 为圆心,半径为 r 的圆由以下表达式参数化:
(x,y) = (cx,cy)+r*(cos(t), sin(t)),
其中 t 从 0 到 2π。
因此,您可以通过计算值 tk=π×k/30 处的圆来创建半圆形,其中 k 从 0 到 30。这将为您提供由30条线段组成的半圆弧。
如果您想要更一般的曲线,请查看Bezier curves。它们由一个值 t 参数化,该值可以在 0 和 1 之间的均匀间隔内进行评估。
【讨论】:
好用!如果我忘记了参数化方程,我的几何真的很弱。我的另一个问题是根据飞机上的起点/终点确定 (cx, cy)。以上是关于创建一个任意弯曲的 Well Known Text LineString 以在 OpenLayers 中显示的主要内容,如果未能解决你的问题,请参考以下文章
设置通用链接 - 可以 .well-known 在子目录而不是根目录下
如何获得 github 页面来提供像 RFC5785 的 /.well-known/ 这样的点文件?
如何在 Identity Server 中设置 .well-known/openid-configuration 端点