On May 13, 2011 2:37 AM, "Richard Quadling" <rquadl...@gmail.com> wrote: > > On 12 May 2011 14:12, Ben Appleton <apple...@google.com> wrote: > > It sounds like you have a polygon containment forest: a collection of rooted > > trees whose roots are outer polygons, children are polygonal holes, > > grand-children are polygonal islands inside holes, etc. You can certainly > > represent containment in JavaScript, but it's not necessary for rendering. > > Therefore the Google Maps API does not represent containment. > > > > There is an unfortunate caveat. Many browsers use Canvas to render vector > > graphics, and Canvas requires that outer vs inner polygons have opposite > > orientations - it implements only "zero-winding fill". For example, if your > > outer boundary is clockwise, your holes must be counter-clockwise, islands > > within holes must be clockwise, and so on. If you need to determine the > > orientation of a polygon you can use the geometry library's > > computeSignedArea method > > ( http://code.google.com/apis/maps/documentation/javascript/reference.html#spherical ). > > You can then traverse your containment tree to ensure that outer vs inner > > polygons have opposite sign, reversing polygonal loops to negate their sign > > where necessary. > > > > Incidentally the geometry library also has a method to encode > > polylines/polygons in the same format as you reference, but compiled so it > > loads faster. > > > > So I suggest: use google.maps.Polygon to visualize your polygons, but wrap > > it in another class or datastructure to represent your containment forest. > > To visualize simply add the google.maps.Polygon to the map. When > > constructing queries to your server, consult your wrapper class / > > datastructure to determine which polygonal loops are outside vs inside. > > Optionally, also switch to using the compiled poly encoder in the geometry > > library. > > > > Hope that helps > > Ben > > > > On May 12, 2011 9:54 PM, "Richard Quadling" <rquadl...@gmail.com> wrote: > > > > -- > > You received this message because you are subscribed to the Google Groups > > "Google Maps JavaScript API v3" group. > > To post to this group, send email to google-maps-js-api-v3@googlegroups.com. > > To unsubscribe from this group, send email to > > google-maps-js-api-v3+unsubscr...@googlegroups.com. > > For more options, visit this group at > > http://groups.google.com/group/google-maps-js-api-v3?hl=en. > > > > Thanks for that. > > encodePath only allows for a single path, not a set of paths. I'm > simply concatenating them with | (pipe). And splitting and decoding > them in PHP. How do I access the compiled encoder. I'm currently > using google.maps.geometry.encoding.encodePath()
Oh great, you're already using it. I thought you meant you were using an older JavaScript poly encoder that had not been compiled. > Very useful. -ve values from computeSignedArea() relate to the outer > polygons and +ve values to the inner ones. That's right. > I think the final piece for me now is to determine from 2 polygons if > one is completely within the other. I thought you already had this structure. Else, how are you currently generating KML and WKT queries as you mention? Cheers Ben > > > -- > Richard Quadling > Twitter : EE : Zend > @RQuadling : e-e.com/M_248814.html : bit.ly/9O8vFY > > -- > You received this message because you are subscribed to the Google Groups "Google Maps JavaScript API v3" group. > To post to this group, send email to google-maps-js-api-v3@googlegroups.com. > To unsubscribe from this group, send email to google-maps-js-api-v3+unsubscr...@googlegroups.com. > For more options, visit this group at http://groups.google.com/group/google-maps-js-api-v3?hl=en. > -- You received this message because you are subscribed to the Google Groups "Google Maps JavaScript API v3" group. To post to this group, send email to google-maps-js-api-v3@googlegroups.com. To unsubscribe from this group, send email to google-maps-js-api-v3+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/google-maps-js-api-v3?hl=en.