/ MapServer Public

# Symbol orientation problem using GEOMTRANSFORM "vertices" with ANGLE AUTO#5213

Closed
wants to merge 1 commit into from
Closed

# Symbol orientation problem using GEOMTRANSFORM "vertices" with ANGLE AUTO #5213

wants to merge 1 commit into from

## Conversation

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

### tbonfort commented Jan 4, 2016

We tried to use GEOMTRANSFORM "vertices" with ANGLE AUTO to display a directional arrow on each vertex of a GPS track and noticed that the current version of calcMidAngle() sometimes results in symbols with the reversed orientation.

Here is an illustration of the problem using the msautotest/renderers/geomtransform-vertex.map in which the vertex symbols from the original test case are replaced by arrow heads. The blue dot marks the beginning of the line, and you'll notice that the arrow heads along the lines are not always in the right direction:

The correct result would be this:

Here is a new version of calcMidAngle() that produces the corrected image above. The mathematicians around the room are welcome to propose a more optimal method.

``````double calcMidAngle(pointObj *p1, pointObj *p2, pointObj *p3)
{
pointObj p1n;
double dx12, dy12, dx23, dy23, l12, l23;

/* We treat both segments as vector 1-2 and vector 2-3 and
* compute their dx,dy and length
*/
dx12 = p2->x - p1->x;
dy12 = p2->y - p1->y;
l12 = sqrt(dx12*dx12 + dy12*dy12);
dx23 = p3->x - p2->x;
dy23 = p3->y - p2->y;
l23 = sqrt(dx23*dx23 + dy23*dy23);

/* Normalize length of vector 1-2 to same as length of vector 2-3 */
if (l12 > 0.0)
{
p1n.x = p2->x - dx12*(l23/l12);
p1n.y = p2->y - dy12*(l23/l12);
}
else
p1n = *p2;  /* segment 1-2 is 0-length, use segment 2-3 for orientation */

/* Return the orientation defined by the sum of the normalized vectors */
return calcOrientation(&p1n, p3);
}
``````

I'll try to produce a proper pull request with the fix and the necessary updates to msautotest but since I'm a still git-challenged, it may take some time before I get to that so I thought I should file this here in case another dev wants to grab and commit the fix.

``` Fix orientation of "vertex" geomtransform (#5213) ```
``` 2103cea ```
pushed a commit that referenced this pull request Feb 24, 2016
``` Fix orientation of "vertex" geomtransform (#5213) ```
``` 9b93019 ```

### tbonfort commented Feb 24, 2016

 rebased into branch-7-0 in 9b93019

closed this Feb 24, 2016
added this to the 7.0.1 milestone Feb 24, 2016