[mapserver-dev] Offset x -99 rendering Problem (and
possibly a solution)
Steve Lime
Steve.Lime at dnr.state.mn.us
Mon Feb 23 14:40:03 EST 2009
Will take a peek at this tonite (and the other patch)...
Steve
>>> On 2/20/2009 at 7:44 AM, in message
<d2b988930902200544r57219a84nec0dbf3b27c53ab8 at mail.gmail.com>, thomas bonfort
<thomas.bonfort at gmail.com> wrote:
> Torsten,
> I won't have time to look into this before 5.4 (there's also another
> patch sitting in trac for another issue with offset lines).
> thanks for looking into this, and hoping you can wait until a 5.4.x release
> .
>
> (wink: I won't be offended if another dev wants to tackle this before then
> )
> regards,
>
> thomas
>
> On Mon, Feb 16, 2009 at 09:43, Torsten Weber <TWeber at traffic-consult.de> wrote:
>> 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
>>
>> _______________________________________________
>> mapserver-dev mailing list
>> mapserver-dev at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
>>
> _______________________________________________
> mapserver-dev mailing list
> mapserver-dev at lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/mapserver-dev
More information about the mapserver-dev
mailing list