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

transform-translate does not preserve geometric angles and distances #2774

Open
hadbn opened this issue Dec 17, 2024 · 1 comment · May be fixed by #2775
Open

transform-translate does not preserve geometric angles and distances #2774

hadbn opened this issue Dec 17, 2024 · 1 comment · May be fixed by #2775

Comments

@hadbn
Copy link

hadbn commented Dec 17, 2024

When using this function, the translation is performed on each point independently, without considering the geometry of the feature as a whole.
As a result, the translation of a circle, for example, will no longer be a circle, which can be prejudicial.

Reproduced with Turf version 7.1 running at https://turf-sandbox.netlify.app/ with the following code :

const p = turf.point(  [-30., 40]);

//blue : original circle around p
const c0 = turf.circle(p, 1000);
const c0_col = turf.polygon(c0.geometry.coordinates, {fill: '#0FF'});

//red : transformTranslate of the blue circle
const c1 = turf.transformTranslate(c0, 1000, 30); //red
const c1_col = turf.polygon(c1.geometry.coordinates, {fill: '#ff0000'});

//green : circle around the transformTranslate of the center of the blue one
const p1 = turf.transformTranslate(p, 1000, 30);
const c11 = turf.circle(p1, 1000);
const c11_col = turf.polygon(c11.geometry.coordinates, {fill: '#00ff00'});

return turf.featureCollection([c0_col, c11_col, c1_col]);

image

It would be useful to add a parameter to the function, allowing the user to decide whether or not to keep the geometric properties of the feature given as input.

@smallsaucepan
Copy link
Member

Thanks @hadbn

This seems like a limitation of tranformTranslate. rhumb-translating individual points is bound to distort especially away from the equator. Best illustration I can think of is the red and blue lines are both 8000km long:

Screenshot 2024-12-20 at 23 12 53

Another probable example of this is at #2419

So, your PR seems like a good approach. However I don't think the user should have to opt in. The corrected behaviour should be the default.

Will get a second opinion though. What do you think @mfedderly @JamesLMilner @rowanwins. Can we just fix the bug and not treat this as something the user needs to opt in to? Perhaps we would need to clarify in the docs that translation uses the centroid as the reference point.

Or is this somehow the expected behaviour?

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 a pull request may close this issue.

2 participants