{"comment":{"created_at":"2011-10-11T16:19:38Z","body":"[jburgess777] I would guess that we don't see this with OSM data because osm2pgsql uses the geos normalize() function to ensure the direction of all the rings of the polygon is correct. \r\n\r\nI have to wonder why both Agg and Cairo default to the winding mode and if this indicates that there are other circumstances when the odd/even rule fails.\r\n\r\nTo test one theory I created the following multipolygon with two intersecting squares:\r\n{{{\r\n{ \"type\": \"MultiPolygon\",\r\n  \"coordinates\": [\r\n    [[[101.0, 1.0], [104.0, 1.0], [104.0, 4.0], [101.0, 4.0], [101.0, 1.0]]],\r\n    [[[100.0, 0.0], [103.0, 0.0], [103.0, 3.0], [100.0, 3.0], [100.0, 0.0]]]\r\n    ]\r\n}\r\n}}}\r\nBefore the patch this renders as two completely filled squares. Afterwards the area of intersection is no longer filled. I would argue that these represent two distinct squares that should both be filled completely even if they overlap.\r\n\r\nPerhaps mapnik needs to normalize the polygon ring directions like osm2pgsql does?","updated_at":"2011-10-11T16:19:38Z","url":"https://api.github.com/repos/artemp/mapnik/issues/comments/2366768","id":2366768,"user":{"avatar_url":"https://secure.gravatar.com/avatar/941f68386168a8a6b60f2529a7830af7?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","url":"https://api.github.com/users/artemp","id":59056,"login":"artemp"}},"action":"created","issue":{"number":450,"created_at":"2011-10-11T16:19:36Z","pull_request":{"diff_url":null,"patch_url":null,"html_url":null},"body":"Testcase attached, includes actual and expected output and sample data/xml.\r\n\r\nMapnik does not preserve polygons or multi-polygons with holes in all cases.  Rather it appears that Mapnik's AGG and Cairo renderers fill holes, which would not be the expected behavior.\r\n\r\nResources:\r\nhttp://www.cairographics.org/manual/cairo-context.html#cairo-fill-rule-t\r\nhttp://geojson.org/geojson-spec.html#id4","comments":4,"title":"Polygon filling does not preserve holes","updated_at":"2011-10-11T16:19:38Z","url":"https://api.github.com/repos/artemp/mapnik/issues/450","id":1877694,"assignee":null,"milestone":{"number":9,"created_at":"2011-10-11T15:50:23Z","due_on":"1970-01-01T09:21:03Z","title":"0.7.0","creator":{"avatar_url":"https://secure.gravatar.com/avatar/941f68386168a8a6b60f2529a7830af7?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","url":"https://api.github.com/users/artemp","id":59056,"login":"artemp"},"url":"https://api.github.com/repos/artemp/mapnik/milestones/9","open_issues":1,"closed_issues":60,"description":"= Mapnik 0.7.0 =\r\n\r\nThe 0.7.0 release targets stability and usability of the Mapnik Core and brings notable advancements to the Datasource Plugins.\r\n\r\nSee the Release page: wiki:Release0.7.0\r\n\r\nSee the CHANGELOG: source:tags/release-0.7.0/CHANGELOG\r\n\r\nUsage, either via Python or XML stylesheets should be fully compatible with the 0.6.x series.\r\n\r\nNevertheless, this release brings improvements and fixes to the C++ core that warrant a major release and new a ABI version.\r\n\r\n== Plugins ==\r\n\r\n * Addition of '''GDAL raster overviews''' - You can now rapidly read large raster datasets (#54)\r\n  * Turn multiple geotiffs into a Bigtiff and build overviews with gdaladdo then read with the GDAL plugin\r\n  * Thanks Alberto and Craig for the initial patches and Dražen for great testing\r\n\r\n * Huge set of improvements to '''PostGIS Plugin'''\r\n  * The PostGIS plugin now supports custom placement of the BBOX query\r\n  * It is is able to skip initialization queries if you supply the 'geometry_field','srid',or 'extent'\r\n  * Errors are now thrown for queries with invalid syntax - should help in debugging complex SQL\r\n  * Thanks Migurski, Lennard, Avar and more for great ideas and testing\r\n  * Thanks Robert for awesome support and patches\r\n  *  #242, #260,  #363, #376, #384, #393, #414, #415, #426,  #433, #434, #449, #456\r\n\r\n== Python ==\r\n * Additional support for '''python pickling''' (near complete) (#345)\r\n  * Map pickling still needs some refinement, but most objects are nicely pickleable now\r\n  * Thanks Artem for great improvements using templating\r\n\r\n * Improvements to '''Python linking''' on Mac OSX (#380)\r\n  * Smarter default linking to the right Python framework (helps if multiple versions exist like on Snow Leopard + python 2.6)\r\n\r\n * Improvements to python docstrings\r\n  * Thanks Igor for contributing many more docstrings!\r\n\r\n== Core ==\r\n * Completed adding full support for '''PPC/ Big endian''' systems (#357)\r\n  * Ability to read binary data was completed for 0.6.1, but color support needed work and is now finished\r\n\r\n * Large extension to '''TextSymbolizer''' functionality by David Eastcott (r1341) and Jochen (r1254)\r\n\r\n * New support for semitransparency in png256 output (#477)\r\n\r\n * New 'gamma' attribute on PolygonSymbolizer to allow for seamless polygon edges (#428)\r\n\r\n * Support for writing map '''xml to string''' (#396)\r\n  * Call `mapnik.save_map_to_string(m)` to send a map to an xml stream\r\n \r\n * Support for '''relative paths''' in xml loaded from string(#440)\r\n  * Works with libxml2 entities even! Thanks Dražen!\r\n  * Tested with the latest OSM stylesheet.\r\n\r\n * Variety of bug and usability fixes (#392,#436,#448,#242,#301,#402,#413)\r\n ","state":"open"},"closed_at":null,"user":{"avatar_url":"https://secure.gravatar.com/avatar/941f68386168a8a6b60f2529a7830af7?d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-140.png","url":"https://api.github.com/users/artemp","id":59056,"login":"artemp"},"html_url":"https://github.com/artemp/mapnik/issues/450","labels":[{"name":"Core_Library","url":"https://api.github.com/repos/artemp/mapnik/labels/Core_Library","color":"FFFFFF"}],"state":"open"},"legacy":{"issue_id":1877694,"comment_id":2366768}}