ArcGIS Runtime 算法解读之Offset

首先肯定是看官方的文档,但对于英文不好的,可能看着就一脸懵逼!我就是这样的,因此花了点时间研究这个算法。我工作主要是对线进行偏移,因此只研究了线的偏移;对于面应该差不多;
public static Geometry Offset( Geometry geometry, double distance, OffsetType offsetType, double bevelRatio, double flattenError )
有5个参数:
geometry:就是要偏移的对象;
distance:就是要偏移的距离;正数就是将偏移对象向右偏移,这里的向右指的是,对象点的添加顺序构成的方向的右边。后面会在图中进行解释;
offsetType:是一个枚举类型,主要是设置偏移对象的顶点偏移后是什么;有四个类型:Round、Bevel、Miter、Square;
bevelRatio:在offsetType设置为:Bevel有用;后面看不同值有什么不同变化;
flattenError :控制在转角产生点的距离值;offsetType设置为:Round有用;

数据准备:4个点,11873952.9370746,3069453.75805943;11873987.946725,3069383.36827443;1874043.9341095,3069319.93501688;11874117.4966627,3069262.57004984

绘制出来的是这样的:

ArcGIS Runtime 算法解读之Offset

当距离值是正时,偏移的线会在右边,负值在左边; 

ArcGIS Runtime 算法解读之Offset

注:此情形下,右边(即正数时)偏移距离越大,产生的线段越长;左边(即负数时)偏移距离越大,产生的线段越短。

以下开始对不同类型进行实验比较: 

offsetType类型是Round:该类型会在线路拐角处产生很多个点,目的是为了看起来更圆滑;

1.1 bevelRatioflattenError 不变,距离改变:

distance bevelRatio flattenError 
1 0 0

ArcGIS Runtime 算法解读之Offset

distance bevelRatio flattenError 
2 0 0

ArcGIS Runtime 算法解读之Offset

因此在这种情况下,距离越大产生的点越多;

1.2 距离和flattenError 不变,bevelRatio改变:

distance bevelRatio flattenError 
1 0.1 0

ArcGIS Runtime 算法解读之Offset

distance bevelRatio flattenError 
1 0.01 0

ArcGIS Runtime 算法解读之Offset

设置了多次后,依然是同样的,因此在round模式下,bevelRatio对产生的结果无影响;

1.3 距离和bevelRatio不变,flattenError 改变:

distance bevelRatio flattenError 
1 0 0.1

ArcGIS Runtime 算法解读之Offset

distance bevelRatio flattenError 
1 0 0.01

ArcGIS Runtime 算法解读之Offset

flattenError 设置为0.001时,5个点;0.0001时,14个点,在1时,1个点;

因此flattenError 参数越小产生的点越多,但当小到一定程度时,就不会增多了;官方解释:The maximum distance of the resulting segments compared to the true circular arc (used only when joins is round). If flattenError is 0, tolerance value is used. Also, the algorithm never produces more than around 180 vertices for each round join。所以肯定不会超过180个,和长度有关系。

offsetType类型是Bevel(斜角):

distance bevelRatio flattenError 
1 0 0

ArcGIS Runtime 算法解读之Offset

bevelRatio变得更小是无变化;

distance bevelRatio flattenError 
1 1 0

ArcGIS Runtime 算法解读之Offset

distance bevelRatio flattenError 
1 1.1 0

ArcGIS Runtime 算法解读之Offset

bevelRatio为1.1时,只变成了一个点;

改变flattenError 对结果无影响;

因此:距离固定时,bevelRatio越大越能达到想要的效果。越小的话,产生的线总会和角相切;具体的值还和2这个角度有关系。

offsetType类型是Miter(斜接):

distance bevelRatio flattenError 
1 0 0

ArcGIS Runtime 算法解读之Offset

经比较,当类型是miter时,其余三个bevelRatio、flattenError 、距离均不会对产生的点数产生影响,因此此类型,只与2处的角度有关系,而且只会有一个顶点变为两个;而且产生的线段平移后会与2相切!注:当2出的角度为180,或者接近180时,不会产生任何结果!

offsetType类型是Square(正方形):此类型产生的结果会和原来一样,但是当距离太远时,可能不会产生结果!此种类型是我需要的!