[postgis-users] AsSVG inner poly reversed
strk at refractions.net
strk at refractions.net
Tue Apr 5 11:06:16 PDT 2005
On Tue, Apr 05, 2005 at 07:04:29PM +0200, klaus Förster wrote:
> to produce a hole in svg path-elements you indeed need oposite ring
> directions - http://svg.cc/pg/assvg/posts/20050405/normal.svg shows the
> outer ring running clockwise and the inner ring running
> counterclockwise. after intersection both run the same direction so the
> hole disappears - http://svg.cc/pg/assvg/posts/20050405/intersect.svg
>
> as strk pointed out, postgis doesn't need a specific direction to
> distinguish a hole from a shell and it seems to convert directions
> during intersection. strk, can the ForceRHR() function solve this issue?
> will it revert direction of the interiorRing back to the original?
It should. It is "Force Right Hand Rule".
If SVG *requires* this we might do this internally.
--strk;
>
> klaus
>
> Sean M. Montague wrote:
> >AsText returns the inner poly in the reverse direction also. I'm still
> >using 0.91 since I'm still learning PostGIS basics and didn't want to
> >bother with constantly uninstalling and reinstalling. When I first
> >noticed the problem, I posted on the yahoo SVG group to identify why I was
> >having display problems. Doug Schepers responded with this:
> >
> >"I haven't looked at it closely, but I suspect that the inner path is
> >going the wrong way (that is, deasil or widdershins) with respect to the
> >outer path."
> >
> >Sure enough, this is exactly what is happening. When I compare the two
> >geometries, the intersect returns the inner ring in the opposite
> >direction. Whether going the wrong way is opposite or the same as the
> >outer poly I'm not sure, I just know one works and one does not. I will
> >try the ForceRHR() function and test it on several cases, but in the past
> >I haven't had this problem. So I wonder if it is limited to certain
> >shaped polys. For instance, the hole I created is a circle created with
> >ArcView 3.x. I will investigate this.
> >
> >I have attached two very small SVG files zipped. The intersect.svg is
> >exactly that, what is returned when I intersect it with a box, and
> >normal.svg is just the_geom where Name = "One". This way you can see the
> >SVG text returned and view it in a web browser. Thank you for your
> >responses.
> >
> >
> >-----Original Message-----
> >From: postgis-users-bounces at postgis.refractions.net
> >[mailto:postgis-users-bounces at postgis.refractions.net] On Behalf Of
> >strk at refractions.net
> >Sent: Tuesday, April 05, 2005 1:31 AM
> >To: PostGIS Users Discussion
> >Subject: Re: [postgis-users] AsSVG inner poly reversed
> >
> >I don't think AsSVG checks ring directions, and postgis doesn't
> >need a specific direction to distinguish an hole from an shell.
> >
> >If the SVG format really requires specific direction I think
> >AsSVG() should take care of that.
> >
> >Check out the ForceRHR() function to change vertex order manually.
> >
> >--strk;
> >
> >
> >On Tue, Apr 05, 2005 at 09:12:05AM +0200, klaus Förster wrote:
> >
> >>hi Sean,
> >>
> >>does this occur when you use AsText() as well or is it limited to
> >>AsSVG()? are you using the latest PostGIS version? AsSVG(the_geom,0,8)
> >>seems to be the notation for an old version where precision was
> >>specified by number of significant digits and there some other bugs in
> >>this version as well.
> >>Could you give an example with the original inner ring? you're using
> >>"..." to indicate you ommit some coords and the inner ring presented
> >>here is 4 units wide so it's hard to visually figure out direction with
> >>marker-symbols.
> >>i think it's not true that in the first poly "the inner path is returned
> >>in the same direction as the out polygon." outer and inner path have to
> >>follow different directions to create a hole in SVG.
> >>
> >>klaus
> >>
> >>Sean M. Montague wrote:
> >>
> >>>In my efforts to try and narrow my problem down and simplify my examples
> >>>of some intersection problems, I've run across another oddity. PostGIS
> >>>is returning the inner polygon AsSVG of an intersection in reverse order
> >>>to the outer polygon, causing display problems. The inner polygon
> >>>should be a hole, and when returned properly, have no fill. Below are
> >>>two sets of sql statements from my PHP code. The first is just the
> >>>poly "One" from table "test_02". The SVG is below that. This displays
> >>>properly because the inner path is returned in the same direction as the
> >>>out polygon.
> >>>
> >>>$sql = ("SELECT AsSVG(the_geom,0,8) As the_geom
> >>> From test_02
> >>> WHERE Name='One'");
> >>>
> >>>--The outer polygon coords follow the first M, and the inner follows the
> >>>second M. I added comas and deleted the cords between the first 4 and
> >>>last 4 for simplicity purposes. These are in the correct order.
> >>>
> >>>(outer)M -358 -4857 2866 -4235 3090 -2614 5520 -89 3969 4284 -651 4605
> >>>-4978 2965 -5719 -1842 -2978 -4556 -358 -4857
> >>>(inner)M 2083 -447, 2082 -497, 2081 -548, 2079 -598, ... 2079 -295, 2081
> >>>-346, 2082 -396, 2083 -447
> >>>
> >>>--This is how it would look normally.
> >>>
> >>>M -358 -4857 2866 -4235 3090 -2614 5520 -89 3969 4284 -651 4605 -4978
> >>>2965 -5719 -1842 -2978 -4556 -358 -4857 M 2083 -447 2082 -497 2081 -548
> >>>2079 -598 ... 2079 -295 2081 -346 2082 -396 2083 -447
> >>>
> >>>
> >>>The second is the intersection between the_geom from table "test_02" and
> >>>a poly defined by the coordinates $theXMax and so on.
> >>>
> >>>$theXMax= 5651;
> >>>$theYMax= 5009;
> >>>$theXMin=-6072;
> >>>$theYMin= -4732;
> >>>
> >>>$sql = ("SELECT AsSVG(intersection(the_geom,
> >>>PolygonFromText('POLYGON(($theXMin $theYMax, $theXMax $theYMax, $theXMax
> >>>$theYMin, $theXMin $theYMin, $theXMin $theYMax))',32767)),0,8)
> >>> As the_geom
> >>> From test_02
> >>> WHERE Name='One'
> >>> AND the_geom && PolygonFromText('POLYGON(($theXMin $theYMax,
> >>>$theXMax $theYMax, $theXMax $theYMin, $theXMin $theYMin, $theXMin
> >>>$theYMax))',32767)");
> >>>
> >>>--Notice that the inner poly cords are reversed. This causes display
> >>>problems. The inner poly has a fill when it should not.
> >>>
> >>>(outer)M -358 -4857 2866 -4235 3090 -2614 5520 -89 3969 4284 -651 4605
> >>>-4978 2965 -5719 -1842 -2978 -4556 -358 -4857
> >>>(inner)M 2083 -447, 2082 -396, 2081 -346, 2079 -295, ... 2079 -598, 2081
> >>>-548, 2082 -497, 2083 -447
> >>>
> >>>Any insight would be appreciated.
> >>>
> >>>
> >>>
> >>>
> >>>_______________________________________________
> >>>postgis-users mailing list
> >>>postgis-users at postgis.refractions.net
> >>>http://postgis.refractions.net/mailman/listinfo/postgis-users
> >>
> >>--
> >> O-.
> >> /_ )
> >> | (U
> >>klaus* /|
> >> / /
> >> ~ ~
> >>_______________________________________________
> >>postgis-users mailing list
> >>postgis-users at postgis.refractions.net
> >>http://postgis.refractions.net/mailman/listinfo/postgis-users
> >
> >_______________________________________________
> >postgis-users mailing list
> >postgis-users at postgis.refractions.net
> >http://postgis.refractions.net/mailman/listinfo/postgis-users
> >
> >
> >------------------------------------------------------------------------
> >
> >_______________________________________________
> >postgis-users mailing list
> >postgis-users at postgis.refractions.net
> >http://postgis.refractions.net/mailman/listinfo/postgis-users
>
> --
> O-.
> /_ )
> | (U
> klaus* /|
> / /
> ~ ~
> _______________________________________________
> postgis-users mailing list
> postgis-users at postgis.refractions.net
> http://postgis.refractions.net/mailman/listinfo/postgis-users
More information about the postgis-users
mailing list