mapbasic代码在单个long / lat中创建10个点而不会相互重叠

时间:2014-12-28 11:32:41

标签: mapinfo map-basic

美好的一天!我知道如何在具有单个长/纬度的mapbasic中创建点,但我想在单个坐标上创建10个点而不相互重叠但是与给定坐标分开约5m半径。

任何想法我应该如何开始编码。

BR, 伊万

1 个答案:

答案 0 :(得分:0)

原则上看起来像这样

Dim x,y as Float
Dim offset as Integer

offset = 5 'distance 5 meters

'single coordinate
x = 1000
y= 2000

For i = 1 To 10
   Create Point (x + Cos(i * (360/10) * DEG_2_RAD) * offset, y + Sin(i * (360/10) * DEG_2_RAD) * offset)
Next

请注意,这仅适用于笛卡尔坐标系,例如: UTM。如果你在Lat / lon上工作,你必须为偏移做一些额外的三角法。

<强>更新

还要查看函数CartesianOffset( object, angle, distance, units )CartesianOffsetXY( object, xoffset, yoffset, units ),也许它们更容易使用。

Dim obj as Object        
obj = CreatePoint(1000, 2000) 'Start point

For i = 1 To 10
    Create Point(CentroidX(obj), CentroidY(obj))
    obj = CartesianOffset(obj, -10, 5, "m") ' move by 5 meters for -10°
Next