Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Adds lineSlice method #158

Merged
merged 2 commits into from
Feb 9, 2024
Merged

Conversation

leiflinse-trivector
Copy link
Contributor

@leiflinse-trivector leiflinse-trivector commented Jan 25, 2024

Issue: #157

@leiflinse-trivector
Copy link
Contributor Author

Rebased upon main

@leiflinse-trivector
Copy link
Contributor Author

  • Rebased upon main (along returns full Feature now)
  • Changed parameters to lineSlice to be Feature instead of just Point and updated testes for that
  • I fixed the port where I inserted a guard for too short lines that shouldn't be there and caused the interpolation to fail in some cases.

I didn't have the time to retrofit changes due to main rebase back into the history so squashed it all together.

@jsiedentop
Copy link
Contributor

Are you finished so that I can do a review?

@leiflinse-trivector
Copy link
Contributor Author

I think it is ready for review.

I have a local test that uses along + lineSlice + length full circle and the accuracy isn't that great. (correct to 1%-level but not at 0,1%-level) But I read in turf.js some complaints about the accuracy of lineSlice so it might be related to that.

@leiflinse-trivector leiflinse-trivector marked this pull request as ready for review February 1, 2024 13:22
@leiflinse-trivector
Copy link
Contributor Author

I can add that I did some testing with lineSlice, along and length that I wrote both in dart and in javascript to verify the port. So I am quite certain that the error-rate is from turf.js itself rather than the port.

@lukas-h
Copy link
Member

lukas-h commented Feb 8, 2024

@leiflinse-trivector I think this is good enough for a merge.

@jsiedentop any objections? looking forward to the review

@leiflinse-trivector
Copy link
Contributor Author

@leiflinse-trivector I think this is good enough for a merge.

I agree.

@jsiedentop
Copy link
Contributor

Since this project is a port of TurfJs, it is also legetim if we provide the same accuracy. Perhaps it would be good to mention the inaccuracy in the method description? We could also link to the TurfJs issue in the code.

@leiflinse-trivector was it TurfJs - lineSlice is very imprecise #2023 you were talking about?

@lukas-h lukas-h merged commit f377e46 into dartclub:main Feb 9, 2024
1 check passed
@lukas-h
Copy link
Member

lukas-h commented Feb 9, 2024

merging this for now.

@leiflinse-trivector
Copy link
Contributor Author

Since this project is a port of TurfJs, it is also legetim if we provide the same accuracy. Perhaps it would be good to mention the inaccuracy in the method description? We could also link to the TurfJs issue in the code.

@leiflinse-trivector was it TurfJs - lineSlice is very imprecise #2023 you were talking about?

Yes that is the complaints on turf.js that I was referring to. The tests I did myself have not been published there though.

@jsiedentop jsiedentop mentioned this pull request Feb 12, 2024
lukas-h added a commit that referenced this pull request May 8, 2024
* initial null-safety implementation

* attributes non-nullable + tests, fix meta tests

* make altitude for Position and BBox nullable

* update action deps, build runner

* delete conflicting outputs, dart test on PR action

* Strongly type and refactor geomEach meta function

This commit also renames Geometry to GeometryObject

* simplify geomEach

* Add coverage reporting to pull requests tests

* Allow PR coverage comment to fail

This allows PRs from forks to still run the tests successfully

* Refactor coverage reporting into its own job

The coverage job is allowed to continue on error, letting the entire
workflow 'pass' if we hit issues running or reporting coverage

* Move coverage reporting into separate workflow

* geomEach: nullable fields #36

* fix types in tests

* Update to latest romeovs/lcov-reporter-action

This should resolve an issue where the 'comment code coverage on PR'
action fails after being merged into main. See
romeovs/lcov-reporter-action#16

* raise version for release 0.0.3

* [meta] add implementation and test for featureEach and propEach (#24)

* Assemble different types, refactor GeoJSON serialization, general improvements (#43)

* #19, #20, #21, refactor

* convert GeoJSONObjectType to enum, rename

* rm overridden bboxes

* Implement vector operations #23

* statically type 'round' helper func, fix unit test

* gen coverage

* fix typo

* geojson unit tests, type fixes

* fix deserialization with GeoJSONObjectType, implement hashCode

* initial unit tests for new constructors

* integration tests

* fix path

* test bbox on other geojson types

* update enum tests

* required params for new constructors, unit tests

* license notices

* bump version for release

* Add basic benchmarking framework (#51)

* Add pub version badge

* [meta] add coordeach implementation (#50)

* [meta] add coordeach implementation

* [benchmark] add coordeach benchmark using test fixtures

* Add implementation for getCoord & getCoords // invariant package (#53)

* initial getCoord & getCoords implementation

* WIP test coords/coord

* test gitpod flutter config

* ports invariants package (#62)

* dart pub get added

* wip, type problem

* fixed return error of the test

* Gitpod config

* new test cases, changed comments

* standardized the comments

* wrapped List in brackets

* some minor typo edit

* added highlight in documentation

* formatted conflicting files

* deleted the gitpod files

Co-authored-by: Arman Torkzaban <[email protected]>

Co-authored-by: arman <[email protected]>
Co-authored-by: arman <[email protected]>
Co-authored-by: Arman Torkzaban <[email protected]>

* Add flattenEach function and tests (#48)

* Add flattenEach function and tests

* Refactor flattenEach slightly

* Refactor meta -- breaking of iterations tests

* Explicitly do not support nested GeometryCollections

* Update documentation links

* Use more specific type checks in flattenEach test

* rm duplicate fcMixed

* remove geometryCollection clause

* warning for nested GeometryCollection

Co-authored-by: Lukas Himsel <[email protected]>

* refactor coordEach with geomEach, change type in geomEach callback (#68)

* [meta] add coordeach implementation

* Rework coordEach implementation to match setup more from geomEach

* cleanup

* optimize for geometry collection

* refactor coordEach with geomEach, change type in geomEach callback

Co-authored-by: Tobrun Van Nuland <[email protected]>

* Port coordAll function and test, also: refactor coordEach callback  (#64)

* beginning

* wip coordAll

* coordAll test, WIP

* changes CoordEachCallback's signature

* typecast removed, test corrected

* changes before merging

* refactor for Position in CoordEachCallback

Co-authored-by: Lukas Himsel <[email protected]>

* Update README.md

* Feature reducers (#49)

* Temporarily type geomEach callback to GeometryType

* Add geomReduce function and tests

* propReduce function

* WIP - featureReduce()

* WIP

* added examples and documentations

* flattenReduce WIP

* WIP

* coordReduce

* documentation

* add static types

* merge readme

* prepare new merge

* generic types for all reducer functions

* TurfJS compatible solution with type checks

* add cloning

* fixed types passed to callbacks, propReduce test

* flattenReduce and featureReduce test

* coordReduce

* minor type conv. num to int

Co-authored-by: Arman Torkzaban <[email protected]>
Co-authored-by: Lukas Himsel <[email protected]>

* Port cluster functions and tests (#69)

* port functions

* getCluster documentation

* WIP documentation

* Did the documentation

* wrote tests

* benchmarks - in process

* moved benchmarks to separate file

* exported clusters.dart

Co-authored-by: armantorkzaban <[email protected]>

* Port meta segment functions & lineSegment (#70)

* initial commit to segment file

* beginning

* lineSegment()

* lineSegment

* refactor

* lineSegment tests

* polygon test

* wip segmentEach

* rewrite segmentEach witohut coordEach

* fix flattenEachCallback

* combine units

* tests for segmentEach

* segmentEach id check tests

* segmentReduce impltd.

* updated README

* Documentation

* benchmark init

Co-authored-by: Arman Torkzaban <[email protected]>

* split up meta into separate files (#72)

* Meta functions extension methods (#73)

* initial setup

* fix export, add all *each functions

* implement 'other' functions

* implement *reduce functions

* fix tests

* rm geojson param for reducers

* Update functions and packages in README.md (#67)

* WIP - updating README.md

* missing new functions & packages

* helpers function aint needed anymore - constructor

* Links added and unnecessary funtioncs deleted

Co-authored-by: Lukas Himsel <[email protected]>

* Raise version to 0.0.5

* Documentation (#75)

* in process - early analysis of the work

* linked the meta functions in readme

* CONTRIBUTING.md

* links to the sources

* edited typos

* documentation work

* closes #77, closes #16

* proofread

* improves pub.dev score, closes #79, #78, #75

* Added deleted model, complemented contributing.md

Co-authored-by: Lukas Himsel <[email protected]>

* raise to version 0.0.6

* Improve pub score & raise to version 0.0.6+2 (#82)

* add examples, fix segment * callbacks

* raise version to 0.0.6+2

* Improve pub score (rename example file, raise to 0.0.6+3) (#84)

* add examples, fix segment * callbacks

* raise version to 0.0.6+2

* Rename example file, raise to 0.0.6+3

* Implement `nearestPointOn(Multi)Line` and `internal` intersects helper (Attempt 2) (#87)

* Implement `nearestPointOn(Multi)Line` (#86)

Co-authored-by: Levente Morva <[email protected]>

* localIndex and index

* add documentation

* Fix `globalIndex` behaviour

Co-authored-by: Levente Morva <[email protected]>

* fix test, according to new globalIndex behaviour

* add intersection test

Co-authored-by: Levente Morva <[email protected]>

* Port explode function and test (#93)

* initial version without tests

* closes #93

* updated readme for explode

* fixed formatting

Co-authored-by: armantorkzaban <[email protected]>

* Merge bbox-polygon and bbox, center, polyline decode (#99)

* Added coordEach translation

* Added bBox translation

* Added center translation

* Added decode points from polyline

* Update read me

* Remove and exclude .idea from git indexing

* Convert double to Position

* Use existing coord each implementation

* Return bBox points in the correct order

* Add bbox unit test

* Change libraries namespaces

* Code refactor

* Add doc blocs and some more missing functions

* Add encode polyline feature

* Add tests for both encode and decode polylines

* Add bbox tests

* Add helper functions

* Convert array to Bbox

* Remove redundant helper functions

* Add documentation

* implementation

* tests init, documentation, addition of types and debug

* implemented, docs

* test initiation

* added it to /lib, updated readme, can close 97

* renamed the test file

* comments resolved

* typo

* unused lib removed

* merge bbox-polygon

* missing center_test.dart

* imported bbox_polygon to center_test

* test error fixes

Co-authored-by: Dennis Mwea <[email protected]>
Co-authored-by: Lukas Himsel <[email protected]>

* Added missing alt1, alt2 in BBox constructor, BBox put in README (#100)

* Added coordEach translation

* Added bBox translation

* Added center translation

* Added decode points from polyline

* Update read me

* Remove and exclude .idea from git indexing

* Convert double to Position

* Use existing coord each implementation

* Return bBox points in the correct order

* Add bbox unit test

* Change libraries namespaces

* Code refactor

* Add doc blocs and some more missing functions

* Add encode polyline feature

* Add tests for both encode and decode polylines

* Add bbox tests

* Add helper functions

* Convert array to Bbox

* Remove redundant helper functions

* Add documentation

* implementation

* tests init, documentation, addition of types and debug

* implemented, docs

* test initiation

* added it to /lib, updated readme, can close 97

* renamed the test file

* comments resolved

* typo

* unused lib removed

* merge bbox-polygon

* missing center_test.dart

* imported bbox_polygon to center_test

* test error fixes

* added alt 1,2 to Bbox

* added bbox to readme

* Fix typos

* bbox constructure changed to standard

* bbox optional positional param. set accordingly

* Documentation on limitation of optional prms. Bbox

* Update geojson.dart

* fix order of BBox default constructor in test

* update doc comment

* fix previously missed null exceptions

Co-authored-by: Dennis Mwea <[email protected]>
Co-authored-by: Lukas Himsel <[email protected]>

* Implement rhumbBearing function and test (#109)

* initial commit, stolen from @armantorkzaban

* fix formatting

* cleanup comments

* Ports lineToPolygon, polygonToLine, and their tests (#104)

* line_to_polygon ported

* test init of lineToPolygon

* debugging the test on line to polygon

* line_to_polygon_test done

* polygonToLine init

* check for features' tyope in FeatureCollections

* file name change

* test and impl. done for polygonToLine

* refactor autocomplete, lineStringToPolygon

* comments resolved

* type added

* implementation and test and type setting

Co-authored-by: Lukas Himsel <[email protected]>

* Adds proper documentation to feature-conversion Part I (#115)

* line_to_polygon ported

* test init of lineToPolygon

* debugging the test on line to polygon

* line_to_polygon_test done

* polygonToLine init

* check for features' tyope in FeatureCollections

* file name change

* test and impl. done for polygonToLine

* refactor autocomplete, lineStringToPolygon

* comments resolved

* type added

* implementation and test and type setting

* corrected documentation

Co-authored-by: Lukas Himsel <[email protected]>

* Update impl status of feature conversion package

* Ports truncate package and its test (#111)

* implemented

* test init

* moving on with the test

* test finished.

* comments resolved

* add truncate reference

* Ports clean_coords and its test (#112)

* init

* implemented

* test init - imported

* test, moving on

* implemented points in comments

* resolving comments

* test done

* readme updated, js removed

* fix turf_equality dep, replace forEach with for

* update types

* trying to fix mutation

* refactor, fix tests

* another variance

* simplified, cleaned comments

* seems like it works!

Co-authored-by: Lukas Himsel <[email protected]>

* Debugs GeometryCollection condition in truncate (#121)

* implemented

* test init

* moving on with the test

* test finished.

* comments resolved

* updated readme.md

* changed from forEach to for and used the element

* changed forEach to a for loop

* variable name changed - resolving a comment

* rid of redundant case for GeometryCollection, test

Co-authored-by: Lukas Himsel <[email protected]>

* close #116 - add src path to README

* update changelog, bump version for release

* Added support for the area function (#123)

* Added the area function

* made the geometry to be of type GeometryType

* fixed the test and added a benchmark test

* fixed the area docs

* added some more tests

* Marked functions as private and fixed documentation

* fixed documentation

* added exception in case of unsupported geometry type, formatted the code and removed some redundant code

Co-authored-by: yarden <[email protected]>

* Implement polygon-smooth and its tests (#127)

* initial implementation, and refactor

* finished test and benchmark impl

* reference in README

* Port boolean functions and tests (#91)

* in process - early analysis of the work

* linked the meta functions in readme

* CONTRIBUTING.md

* links to the sources

* edited typos

* documentation work

* closes #77, closes #16

* proofread

* improves pub.dev score, closes #79, #78, #75

* Added deleted model, complemented contributing.md

* booleans init

* initial import

* boolean_touches

* valid - wip

* within - init

* rewiring the translated code

* contains etc.

* touches

* valid

* dependencies imported

* Update CONTRIBUTING.md

* clockwise test

* concave test

* intersect test

* pointOnLine test

* contains

* crosses_test - blocked by findIntersections

* boolean_contain

* boolean_within

* rhumb_bearing

* rhumb_bearing\'s test  - incomplete

* rhumb_bearing's test - done, added to lib/bearing

* boolean_contains, boolean_parallel, IP

* working on contain - removed usages of runtimeType

* rewriting pointInLine

* tests reverted to false/true folder style

* restructuring, clean-up

* clockwise and its test, documentation

* concave finalized

* PointInPolygon plus test, dart format

* removed the commented JS lines

* return type added

* disjoint and test - not done, depends on sweepline

* equal implement, test, has dependencies

* moving on

* clean coords init

* cleanCoord implemented, going to new branch

* moving on with equal

* update turf_equality dep

* moving forward

* refactors boolean_equal

* #88 crosses, disjoint, equal, intersects, pip @lukas-h

* cleanup on #88

* progress on overlap

* bool: overlap,parallel,valid,touches & lineOverlap

* issue with test is worked on

* still at porting the overlap test

* done: parallel

* working on valid

* touches done

* valid - got stuck

* progress on within

* moved on with valid, refactored

* valid test

* lineIntersection testet - contains sweepline

* package publishabe, rm git deps, fix equality dep

* update params in equality

* mod. on valid to cover the std. - MutiPs' 'finite'

* RFCs resolved - readied for merge

* return type of getGeom

* linter effect!

* reolved requests

* more requests resolved

* more requests resolved

* test name, touching lineOverlap

* fix conversations in booleanContains

* fixes conversations in crosses and disjoint

* resolves allllllllll outdated conversations, refactor

* use getGeom in booleanTouches

* use getGeom more frequently

* rm linter rule, which is already inherited from dartclub_lint

* cleanup, ready for merge

Co-authored-by: Lukas Himsel <[email protected]>

* Add missing parameter 'unit'. (#145)

* Implement rhumb_distance with tests.

* Implement rhumb_destination with tests.

* Implement centroid with tests.

* Implement transform_rotate with tests.

* Add truncate tests for MultiLineString, MultiPoint, MultiPolygon

* run dart format

* introduce localCoordIndex in coordEach, cover more test cases in truncate_test

* prepare for next release, support

* work student position

* Fix excludeWrapCoord in coordEach for MultiPolygon type. (#148)

* Fix excludeWrapCoord in coordEach for MultiPolygon type.

* Added multipolygon test case for centroid.

* format markdown

* Document properties set by NearestPointOnLine on returned Point (#155)

* Implement length and along (#153)

* Implement length with tests

* Implement along with tests

* Fix export added functions

* Document along behaviour when distance is outside line length range

* Format along test

* Change length and along to accept Feature<LineString> instead of LineString

* Change length to never return null.

To my understanding, the reason why segmentReduce in its signature
may return null is due to initialValue may be null, but in length()
we supply 0.0 as the default.

* Change along to throw Exception when empty line is passed instead of returning null

It appears to be more in line with how turf.js operates and also
existing error handling in turf_dart.

* Change along to count from back when distance is negative

I raised an issue with turf.js about behavour being undefined
when distance is zero and they where in favour of counting from
back behavour over clamping to the end. I think it is best to
use same behavour as upstream turf.js so changing to their
solution.

* Update along test for negative distance

* Fix along test for negative distance

* Add along test using default unit

* Add test of length() using default unit

* Fix docs for along() when distance is negative

* Change along() implementation to handle travelled == distance eagerly

* Fix length_test.dart formatting (#159)

* Change return type of along to Feature<Point> (#161)

This goes along with preferring to pass around full Features,
and it allow to in the future set properties on the returned
point without it being a breaking change.

* Prepare release 0.0.9 (#162)

* Update Dart SDK version in pubspec.yaml

* Update README.md

* Remove .DS_Store files

* Update changelog

* Update package version to 0.0.9

* Update dependencies

* Entfernt .DS_Store

* Remove job offer

* Adds lineSlice method (#158)

* Implement lineSlice with tests

* add line_slice link

---------

Co-authored-by: Lukas Himsel <[email protected]>

* Implement booleanWithin (#167)

* document feature booleanWithin

* implement boolean within

* implement boolean within

* add boolean within tests

* export boolean features

* remove duplicate code

* refactor tests

* rename import

* remove warnings

* add source link to readme

* add library declaration for turf_boolean

* Code review suggestions

* .

* .

* fix typos

* fix analyzer warning due to recent dart 3.3.0 release

* Implement lineOverlap, booleanOverlap, refactoring and bug fixes (#174)

* implement lineOverlap, booleanOverlap, refactoring and bugFixes

* minor updates

* clearing up nisses mischief

* update dependency: turf_equality

* Introduce geotypes (#176)

* introduce geotypes

* removed build runner from workflows

* Update readme (#179)

* moved progress and update readme

* add progress link

* add logo

* add badges

* update url

* Fix export strategy (#177)

* fix warnings

* fix export strategy

* remove unused imports

* review changes

* Add discord community (#181)

* Update README.md

* Update README.md

* Fixed typos in example code for nearestPointOnLine (#184)

* prepare for release 0.0.10

---------

Co-authored-by: Brad Parham <[email protected]>
Co-authored-by: Tobrun <[email protected]>
Co-authored-by: arman <[email protected]>
Co-authored-by: arman <[email protected]>
Co-authored-by: Arman Torkzaban <[email protected]>
Co-authored-by: Levente Morva <[email protected]>
Co-authored-by: Dennis Mwea <[email protected]>
Co-authored-by: yardenfi <[email protected]>
Co-authored-by: yarden <[email protected]>
Co-authored-by: Kangmin An <[email protected]>
Co-authored-by: ggastv <[email protected]>
Co-authored-by: L Linse <[email protected]>
Co-authored-by: Leif Linse <[email protected]>
Co-authored-by: Jonas Siedentop <[email protected]>
Co-authored-by: Jonas Siedentop <[email protected]>
Co-authored-by: Bas van Dijk <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants