Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Wicket generates invalid WKT from Google Maps v3 Polygon with hole #64

Closed
4tapsmobile opened this issue Feb 24, 2015 · 13 comments
Closed
Labels

Comments

@4tapsmobile
Copy link

Initially, we retrieve this from PostGIS:

POLYGON((-87.6031179311616 41.7888101645398,-87.6029387172624 41.7888127767185,-87.6029387172624 41.7888354825745,-87.6027529456616 41.7888384966255,-87.6025688808599 41.7888417116132,-87.6023627175022 41.7888435200437,-87.6022213226765 41.7888454624319,-87.6022205141927 41.7887902048123,-87.602156643976 41.7887896020017,-87.6021579016174 41.7888429172335,-87.6019916234583 41.7888447926429,-87.6019855149144 41.7887056103279,-87.6019681774294 41.7878378908616,-87.6021392166595 41.7878362163627,-87.6021473913286 41.7881626088692,-87.6022056919905 41.7881620730323,-87.6022049733383 41.7881415772659,-87.6023982009559 41.7881395678767,-87.6023978416298 41.7881035997991,-87.6024115858537 41.7881035997991,-87.6024116756852 41.7881086902545,-87.6024692576949 41.7881078195188,-87.6024692576949 41.7881030639617,-87.6024843493917 41.7881030639617,-87.6024853375385 41.7881390990192,-87.6026992264076 41.7881368217113,-87.6026992264076 41.7881440555125,-87.6027375844703 41.788143787594,-87.6027360573343 41.7880701099508,-87.6026865601621 41.7880705788088,-87.6026865601621 41.7879936190718,-87.6027340810407 41.7879930832334,-87.6027313860948 41.7878297193064,-87.6029088033634 41.7878287146069,-87.602905838923 41.7878460624158,-87.6029323392239 41.7886963002393,-87.6031155955418 41.7886944918046,-87.6031179311616 41.7888101645398),(-87.6027596830263 41.7886993812759,-87.6027498913897 41.7882650206224,-87.6021457743611 41.7882691063724,-87.6021543981878 41.7887024623125,-87.6027596830263 41.7886993812759))

Then we use Wicket to construct a google maps polygon and render it. It appears correctly and we can even edit its vertices. When attempting to serialize it back to WKT to send to our back-end, this is what we get:

MULTIPOLYGON(((),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),()),((),(),(),(),()))

Any ideas / workarounds?

@arthur-e
Copy link
Owner

This might be related to Issue #33. The Google Maps API is very difficult to support for holes in polygon-class geometries owing to the difficulty of determining whether an inner ring is a hole or another polygon.

@brandfocus
Copy link

+1

2 similar comments
@jbgarr
Copy link

jbgarr commented Nov 17, 2015

+1

@Montago
Copy link
Contributor

Montago commented Apr 29, 2016

+1

@Montago
Copy link
Contributor

Montago commented May 4, 2016

@arthur-e Holes are ALWAYS defined by being counter clockwise http://stackoverflow.com/questions/7494474/google-maps-api-polygon-with-hole-in-center

the gmap demo is also able to show this by flipping 2 coordinates:

MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 45 20, 30 5, 10 10, 10 30, 20 35), (30 20, 20 15, 20 25, 30 20)))
vs
MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)), ((20 35, 45 20, 30 5, 10 10, 10 30, 20 35), (30 20, 20 25, 20 15, 30 20)))

@Montago
Copy link
Contributor

Montago commented May 4, 2016

ARGH... I've traced the source of this problem... it has NOTHING to do with orientation or holes ..

the problem is Wkt.Wkt.prototype.extract.multipolygon that malfunctions !

extract.multipolygon recieves a perfectly defined array of coordinates, then sends each coordinate to extract.polygon which forwards to extract.multilinestring WHICH IS WRONG !

extract.multilinestring expects an array but receives an object of {x, y}

fixing this should be easy peasy

@Montago
Copy link
Contributor

Montago commented May 4, 2016

this seems to fix the problem:

    multilinestring: function (multilinestring)
    {
        var i, parts = [];

        if(multilinestring.length)
            for (i = 0; i < multilinestring.length; i += 1)
            {
                parts.push(this.extract.linestring.apply(this, [multilinestring[i]]));
            }
        else
            parts.push(this.extract.point.apply(this, [multilinestring]));

        return parts.join(',');
    },

Montago pushed a commit to Montago/Wicket that referenced this issue May 4, 2016
WKT error when reading a multipolygon

this should fix it..
@arthur-e
Copy link
Owner

arthur-e commented May 4, 2016

This still produces a MULTIPOLYGON, but at least the coordinates are now displayed.

> wkt = new Wkt.Wkt('POLYGON((-87.6031179311616 41.7888101645398, ...');
> gob = wkt.toObject()
> wkt2 = new Wkt.Wkt(gob)
> wkt2.toString()
"MULTIPOLYGON(((-87.60311793116159 41.7888101645398), ..."

arthur-e added a commit that referenced this issue May 4, 2016
Where a POLYGON rendered and read is interpreted as a MULTIPOLYGON; previously, the serialized MULTIPOLYGON had no coordinates. Now, it has coordinates. Also updated Jasmine specs for consistent styling of `function ()` definitions.
@arthur-e
Copy link
Owner

arthur-e commented May 4, 2016

I've updated the gh-pages branch so you can see how these work in the sandboxes. It's clear the Google Maps extension still can't handle holes; the original POLYGON is not rendered with its inner ring as a hole:

https://arthur-e.github.io/Wicket/sandbox-gmaps3.html

However, if the same POLYGON string from the top of this issue is pasted into the Leaflet sandbox, it displays perfectly:

https://arthur-e.github.io/Wicket/

All test cases passed before and after this partial fix and the Leaflet extension has always handled inner rings just fine. I believe the underlying problem is documented in #33 --These are basically the same issue with inner rings in the Google Maps extension..

@Montago
Copy link
Contributor

Montago commented May 4, 2016

The reason it creates a multipolygon is because the 'hole' has the wrong direction, it should be CCW..

I've made a fix for that in Patch-2

#84

@arthur-e
Copy link
Owner

arthur-e commented May 4, 2016

@Montago I implemented the changes you copied me on. Is there something I missed ("Patch-2")? A Pull Request would help.

@Montago
Copy link
Contributor

Montago commented May 4, 2016

I'm completely new to this GitHub thing.. committing changes ... i think i managed to do so now. look in #84

@arthur-e
Copy link
Owner

arthur-e commented May 4, 2016

Partial fix implemented in 1.3.2.; please reference issue #33 going forward.

@arthur-e arthur-e closed this as completed May 4, 2016
@arthur-e arthur-e added the bug label May 4, 2016
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
Projects
None yet
Development

No branches or pull requests

5 participants