[mapserver-users] is this possible or does this need to be a feature request

Stephen Woodbridge woodbri at swoodbridge.com
Fri Feb 15 14:34:18 EST 2002


Fred,

Steve Lime may want to jump in on this to add or correct this.

I see two issues here:

1) You have to construct and offset polygon (unless you are willing to
accept the rectangular extents of the polygon). This is pretty straight
forward:
  a) pick the first edge and determine which side is outside of the
     polygon
  b) construct an offset line on the outside of the first segment
  c) construct an offset line for each successive segment and intersect 
     it with the previous segment and save the intersection point, you
     also have to check and handle concave angles where the offsets
     eliminate the edges totally.
  d) then build a new poygon form the intersection points.

2) currently (I believe) the query code ONLY works for points and
rectangles. Modifing query code to do queries of arbitrary polygons
would be possible but require some additional computations like:
  a) first check that the extents of the obj and the query polygon
     overlap.
  b) if point, see if it is inside the query polygon
     if line,  see if it intersects the query polygon
     if polygon, polyline, see if extents are all inside or the extents
        intersect with the query polygon
       if extents intersect see if any edge intersects with the query
          polygon
         if not, see if all vertices are inside the query polygon

You could do all of this in mapscript, but might be very slow if you
have lots of polygons or the polygon have lots of points. Also you have
to be able to deal with multipart objects. There may be some code
already in mapserver that can be adapted to some parts of this as
rotated label extents represent 5 node convex polygons.

Anyway, I hope this helps,
  -Steve Woodbridge

Fred McDavid wrote:
> 
> What I'm wanting to do is:
> 
> take a polygon from one layer, using that polygon and some function (in
> this case, one that would add a "buffer" to the original polygon) come
> up with a new polygon, then draw that polygon and/or use it to query
> layers.
> 
> I'm wondering if there is presently a way to do this and, if not, what
> obstacles (WRT design issues) would I face if I tried to make mapserver
> and/or php-mapscript do this?
> 
> Regards,
> 
> Fred



More information about the mapserver-users mailing list