Skip to content

GeoJSON comments #7

Open
Open

Description

@velipso

Please leave comments here about the experimental GeoJSON support.

Activity

  1. added a commit that references this issue on Jul 22, 2017
  2. velipso commented on Jan 29, 2018

    @velipso
    OwnerAuthor

    #11 says GeoJSON is working as expected.

  3. Portur commented on Mar 19, 2018

    @Portur

    The documentation is a bit unclear for GeoJson.

    From the function call i'm assuming polygonFromGeoJSON will retrieve a single polygon from a geojson object that only contains a single polygon?

    Also the inverted tag has no explanation so I am unsure if this is auto generated when reading from geojson? Maybe an example for this would help.

    My use case is to combine 10 to 500 polygons retrieved from 4-15 geojson files. Do I need to extract them individually to union them? polygonFromGeoJSON seems to be what I'm looking for but I'm not sure if the result will be what I am expecting it to do, which is extract all polygon(s) and return an array of PolyboolJS polygons to use in union/intersect/etc.

  4. velipso commented on Mar 19, 2018

    @velipso
    OwnerAuthor

    The polygonFromGeoJSON function should work on Polygon and MultiPolygon GeoJSON types. It should convert a GeoJSON object to a polybooljs polygon.

    The easiest way to explain the inverted flag is to see it in the demo:

    https://rawgit.com/voidqk/polybooljs/master/dist/demo.html

    If you click on the Invert Red or Invert Blue buttons, you can see what toggling the invert flag does. What's considered outside the polygon is now considered inside, and vice-versa.

    I don't know if you need to extract the GeoJSON individually, I don't know what your data looks like. The polygonFromGeoJSON function takes an object that looks like { type: "MultiPolygon", coordinates: [[...]] }.

  5. Portur commented on Mar 19, 2018

    @Portur

    Extract all polygons from a geojson file. eg.

    This geojson contains n polygons:
    { "type": "Feature", "properties": {"party": "Republican"}, "geometry": { "type": "Polygon", "coordinates": [[ [-104.05, 48.99], [-97.22, 48.98], [-96.58, 45.94], [-104.03, 45.94], [-104.05, 48.99] ]] } }, { "type": "Feature", "properties": {"party": "Democrat"}, "geometry": { "type": "Polygon", "coordinates": [[ [-109.05, 41.00], [-102.06, 40.99], [-102.03, 36.99], [-109.04, 36.99], [-109.05, 41.00] ]] } },{...}

    Another example geojson collection

    Will polygonFromGeoJSON only extract the first polygon?

    About the inverted tag; Will the resulting poly from polygonFromGeoJSON contain a default eg {inverted : false} ? Assuming most polys are not inverted.

  6. Portur commented on Mar 19, 2018

    @Portur

    A handy page to play with geojson
    http://geojson.io

    Added example geojson : pastebin

  7. velipso commented on Mar 19, 2018

    @velipso
    OwnerAuthor

    Right, so the object that has "type": "Polygon" is what needs to be passed to polygonFromGeoJSON, i.e., data[n].geometry.

    Yes, polygonFromGeoJSON will fill out the inverted flag.

  8. cyrilchapon commented on Jul 10, 2018

    @cyrilchapon

    Hey.

    Just to add some random feedbacks and caveats of my knowledge and experience about GeoJSON, maybe could help, and lead to improvements in the future.

    • The types field should respect case (and is camel cased)
    • A Feature is something in the shape {type: 'Feature', properties: {}, geometry: <Geometry>}
      • type, properties (don't forget it) and geometry are mandatory
    • A Geometry is something in the shape {type: <GeometryType>, coordinates: []} OR {type: 'GeometryCollection', geometries: [Geometry]}
      • There is a trick here, and this library should be concerned about this : GeometryCollection is a valid geometry, and thus changes the shape of the root Geometry object...
      • I don't know if a GeometryCollection can be a geometry child of another GeometryCollection, but that's worth checking it
    • About coordinates, they are separated in "rings" logic
      • A Polygon coordinates member is in the shape
      [ // <= Array of 'rings'
        [ // Single outer 'ring'. It MUST be counter-clockwise
          [lng, lat], [lng, lat], [...] // Coordinates serie MUST have last === first
        ],
        [ // Inner 'ring' (hole). It MUST be clockwise
          [lng, lat], [lng, lat], [...] // Coordinates serie MUST have last === first
        ],
        [ // Another inner 'ring' (hole). It MUST be clockwise
          [lng, lat], [lng, lat], [...] // Coordinates serie MUST have last === first
        ]
      ]
      
      • (I don't know if a "hole" (inner ring) can contain an "island". But that's worth checking...)
      • A MultiPolygon coordinates member is an array of Polygon coordinates member
      • A Position (coordinates couple) contains at least lng and lat in this order, but is not limited to this length, and could include, eg., elevation as a 3rd member ([lng, lat, elevation])
      • Any GeoJSON member can include a srs (or crs, can't remember) member, which represent the projection of the data. The implicit projection when not provided is WGS84 (=== EPSG:4326)

    Some useful stuff :

  9. Sagarpreet commented on Aug 27, 2019

    @Sagarpreet

    So does this library returns holes when taking union ?

  10. velipso commented on Aug 27, 2019

    @velipso
    OwnerAuthor

    So does this library returns holes when taking union ?

    it could if that's the correct answer, you can play with the demo and see for yourself by dragging points around:

    Screen Shot 2019-08-27 at 9 44 34 AM

  11. domiSchenk commented on Aug 28, 2020

    @domiSchenk

    Just switched from Turf to PolyBoolJs, and i must say i love it! We had many problems with Turf when working with it. Sometimes the resulting geometry is invalid, sometimes it create unreasonable geometries.

    With PolyBoolJs we didn't encounter such problems!

    What would be nice is if we could pass a Feature to PolyBoolJs and not only a geometry. Also if you stick to geometry a more meaningful error would be nice. I first thought the GeoJSON addon did not work.

    An Error like:
    PolyBool: You didn't pass a GeoJSON geometry to PolyBool
    Or
    PolyBool does not support Type: {type}. Try passing a geometry of type 'Polygon' or 'MultiPoligon'
    would be nice

    Keep up the good work!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions