[mapserver-dev] Offset x -99 rendering Problem (and possibly a solution)

Torsten Weber TWeber at traffic-consult.de
Mon Feb 16 03:43:15 EST 2009


Hi all,

in our application we need to be able to display line objects which in
some case bare the same coordinates used in reverse order.
In our case a travel route (line object) on a street map consists of the
same street (bearing the same coordinates) used in both directions.

We use the offset to mark the affected direction of traffic flow of an event.
If the event affects both directions and the directions are not seperated by 
contruction, a geometry will be generated which has coordinates in reversed 
order.

The offset calculation in maputils.c checks for equal direction only by 
checking the gradient but not for reversed direction, so a point will be lost 
and next point is calculated to "nowhere".

We've applied a patch to our local mapserver source which solves this for our 
needs. We changed line 1530 to line 1532 in maputils.c from
			      if(k==k0) continue; /* checking equal direction */
                                x = (q-q0)/(k0-k);
                                y = k*x+q;

to
			      if (k==k0) {
				if ((dx<0&&dx0>0)||(dx>0&&dx0<0)) { //reversed??
				  ret->line[i].numpoints++;
				  ret->line[i].point=realloc(ret->line[i].point,
sizeof(pointObj)*ret->line[i].numpoints);
                                  ret->line[i].point[idx].x = 
p->line[i].point[j-1].x-ox;
				  ret->line[i].point[idx].y = p->line[i].point[j-1].y-oy;
				  idx++;
				  x = p->line[i].point[j-1].x+ox;
				  y = p->line[i].point[j-1].y+oy;
				} else {
				  continue;
                                }
			      } else {
                                x = (q-q0)/(k0-k);
                                y = k*x+q;
			      }

It would be nice, if this can find its way to the next mapserver release.

With regards

Torsten Weber



More information about the mapserver-dev mailing list