python - ar c направление - PullRequest
       40

python - ar c направление

0 голосов
/ 29 апреля 2020

Я использую вызывающую python в fme для создания полигонов из точек с данными aixm 4.5

Некоторые из полигонов содержат дуги и их направление по часовой стрелке (CWA) или против часовой стрелки (CCA) ) имеет значение, я не знаю, как с этим справиться.

вот код, который у меня есть:

import fme
import fmeobjects
from math import hypot
def replaceWithArc(feature):
    coords = feature.getAllCoordinates()
    x0, y0 = coords[0][0], coords[0][1] # coordinates of start of arc
    xc, yc = coords[1][0], coords[1][1] # coordinates of cetner of arc
    x2, y2 = coords[2][0], coords[2][1] # coordinates of end of arc

    vx0, vy0 = (x0 - xc), (y0 - yc) # vector: center -> start
    vx2, vy2 = (x2 - xc), (y2 - yc) # vector: center -> end
    vx1, vy1 = (vx0 + vx2), (vy0 + vy2) # vector: center -> middle
    len = hypot(vx1, vy1) # length of the vector
    radius = (hypot(vx0, vy0) + hypot(vx2, vy2)) * 0.5
    x1, y1 = xc + vx1 / len * radius, yc + vy1 / len * radius # coordinates of middle point on arc

threePoints = (
    fmeobjects.FMEPoint(x0, y0),
    fmeobjects.FMEPoint(x1, y1),
    fmeobjects.FMEPoint(x2, y2)
)
feature.setGeometry(fmeobjects.FMEArc(threePoints))

enter image description here

1 Ответ

0 голосов
/ 05 мая 2020

Мне кажется, что с этими тремя пунктами что-то не так. Не могли бы вы вставить значения?

На изображении выше это выглядит немного асимметрично c, но я могу ошибаться.

Еще одна вещь, которую вы можете попробовать, это использовать другую функцию для инициализировать FMEAr c, например,

  • init(twoPoints, bulge)
  • init(centerPoint, rotation, primaryRadius, secondaryRadius, startAngle, sweepAngle, startPoint, endPoint)
...