turf icon indicating copy to clipboard operation
turf copied to clipboard

valid

Open morganherlocker opened this issue 10 years ago • 19 comments

function for checking if a given geojson object is valid. This might be possible with jsts, or with some sort of linter module.

morganherlocker avatar Dec 31 '13 06:12 morganherlocker

+1 for this I currently use QGIS for this and find it quite a hassle.

derrickpelletier avatar Feb 11 '14 01:02 derrickpelletier

I will give this a crack tomorrow. I will probably plug into geojsonhint.

morganherlocker avatar Feb 11 '14 04:02 morganherlocker

Ah, I may have read into it too much in my excitement. I thought you were meaning validity in terms of polys—i.e. having no intersections or duplicate points or whatnot.

derrickpelletier avatar Feb 11 '14 05:02 derrickpelletier

mapshaper does this, which I think is integrated into topojson (which is already a dependency of turf), so the features you are looking for may actually be pretty easy to implement. I will add another feature issue called "fix", which will identify and fix issues like you are describing here.

morganherlocker avatar Feb 12 '14 04:02 morganherlocker

Here is the new issue:

https://github.com/morganherlocker/turf/issues/87

morganherlocker avatar Feb 12 '14 04:02 morganherlocker

this is nice.

some sort of st_makevalid would be even nicer

vlasvlasvlas avatar Feb 13 '15 03:02 vlasvlasvlas

Hello, I implemented the ST_isvalid of postgis : https://github.com/blackrez/turf-isvalid.

How I can add in turf?

blackrez avatar Dec 07 '15 09:12 blackrez

Is this geojson validator still of interest @morganherlocker ? I know jsts is a goner, so we might want to implement this with geojsonhint instead.

@DenisCarriere @rowanwins is this material for booleans?

stebogit avatar Jun 14 '17 07:06 stebogit

It's still interesting from my perspective @stebogit

I think this module probably requires more than geojsonhint and yep would probably fit in the booleans collection.

Off the top of my head it's probably a combination of

  • geojsonhint
  • @turf/kinks for id'ing self-intersections
  • check for duplicate points
  • plus a bunch of other checks!

Some good background reading here from the postgis world.

rowanwins avatar Jun 14 '17 09:06 rowanwins

I will give this a crack tomorrow. I will probably plug into geojsonhint.

@morganherlocker That's a long tomorrow 🤣

DenisCarriere avatar Aug 11 '17 14:08 DenisCarriere

is this material for booleans? (@stebogit)

It could be... 🤔 this would simply be a module which would throw an error (or return a Boolean true/false) if the GeoJSON is valid or not.

DenisCarriere avatar Aug 11 '17 14:08 DenisCarriere

I know jsts is a goner

Yes, however it might be worth looking into how jsts handles it's isValid method. Or at least add it to the test.js cases (same as shapely).

DenisCarriere avatar Aug 11 '17 14:08 DenisCarriere

FYI I've made a good start on this. Basically I'm looking at using the OGC simple feature spec.

I do however have a question about the most helpful API. So here are my options

  1. I could do it as a boolean style module (eg simply return true or false for a feature validity).
  2. I could add properties to a feature showing which validity checks have passed or failed. This is obviously more useful in providing info (eg did the poly fail because start and end points weren't the same or because the polygon hole touched the exterior ring twice).
  3. I could throw an error on the first error encountered with the details, downside to this is that a single geometry might have multiple issues and but by throwing an error we'd only report on the first one encountered.

Any other ideas on this one @DenisCarriere , @stebogit , @morganherlocker

rowanwins avatar Mar 03 '18 03:03 rowanwins

@rowanwins although you wouldn't be able to use a clean

if (turf.valid(geojson) {
// ...
}

I think throwing an error would be the best way to have an informative message about why the feature is invalid. I'm not sure we want a breaking behavior, but it might make sense since Turf is only supposed to work on valid GeoJSON

stebogit avatar Mar 04 '18 22:03 stebogit

Hi there and thanks to all contributors, turf is a great project.

I am looking to a way to validate GeoJSON to avoid side effects when using Polygon and MultiPolygon transformations. https://github.com/Turfjs/turf/pull/1302 has been merged since a few months but package is still unpublished. What are the next steps ? :)

fbnfgc avatar Nov 16 '18 11:11 fbnfgc

Hi, Any updates on this one? Thanks!

florinvirdol avatar Apr 13 '21 09:04 florinvirdol

I've been piecing together the status of this for my own awareness and thought I'd give an update.

turf-boolean-valid is available as an individual package (https://www.npmjs.com/package/@turf/boolean-valid) for folks to use, but is not yet included in the top-level turf library or part of the docs because it wasn't seen as ready. More detail in the PR that was merged (https://github.com/Turfjs/turf/pull/1302).

One suggestion is to narrow the scope of this long running ticket to getting boolean-valid to minimum usefulness and save the rest for add-on issues. Currently it has a few types of geometry validation and that's it - https://github.com/Turfjs/turf/blob/master/packages/turf-boolean-valid/index.ts

Suggested tasks:

  • Better validation to the geojson spec
  • Deeper geometry validation.
    • TBD how far to go. Suggestions in PR, but also like #2240.
  • Add boolean-valid in the top-level turf library.
  • Make sure the docs are in order.

Optional or create as add-on tickets:

  • Returning individual error reason strings. Might be out of scope (it is a boolean method after all). It could be a separate function like PostGIS's ST_isValidReason.
  • Break down the overall validation function (default export) into pieces, and offer additional functions as named exports e.g. isValidGeometry, isValidPolygon. Consider doing this in a way that will minimize breaking changes in the future.

twelch avatar Jan 01 '22 17:01 twelch

Thanks @twelch for the update. My 2c: I think a boolean validator is not very useful if it does not help you understanding why the feature is not valid (so you can fix/handle the error). So I'd refactor the module to throw with an error message - or even better an error code so you can programmatically handle it - in case of failure and make that a main task in the suggested list. Finally, to make it more flexible and easier to maintain, as additional main task I'd suggest to convert this to an equivalent to the @turf/helpers package but for validation (i.e. @turf/validation) with several functions (like the mentioned isValidGeometry, isValidPolygon, etc., all throwing errors) the use can selectively decide to use. We could still have a comprehensive isValid as one of those functions though. Finally, check-geojson seems very interesting, however it also looks like it is very new and the API is likely to change so I would probably wait a bit before including it as dependency - even though at the time this issue will get resolved the API might be super stable 😅.

stebogit avatar Jan 04 '22 00:01 stebogit

Quick update for this 10 year old issue 🎂 🎉

Wondering what we should do with this one. Per @stebogit 's comment above users probably want better feedback on what went wrong. Perhaps we leave turf-boolean-valid as is and refer users to check-geojson or geojsonhint if they need more detail?

smallsaucepan avatar Jan 11 '24 04:01 smallsaucepan