

Turf – A modular GIS engine written in JavaScript - uptown
http://turfjs.org/

======
mattdesl
Re-posting what I said in r/javascript. I'm digging the modularity.

My only complaint would be that some of those modules do not really need to be
"turf" specific. For example, "turf-is-clockwise" would be more Unixy if it
was just "is-clockwise" or "is-polygon-clockwise". This would help improve
discoverability and make them nicer to use alongside other generic npm
modules, like:

simplify-path, delaunay-triangulate, triangulate-contours, chaikin-smooth,
convex-hull

etc.

I also think the turf modules would appeal to other uses than just GIS. They
are generic enough to be useful in games, interactive apps, etc. :)

------
ldng
Has anyone tested this with a ~500 MB dataset ? Say the parcels of a city. How
does it perform ?

~~~
morganherlocker
Here are some rough benchmarks[1]

Performance will vary widely depending on which functions you are calling and
characteristics of the data. Some types of analysis will quickly process 500
MB, and others you will probably want to use some sort of indexing strategy.

For pure javascript indexers, check out rbush[2] (R-Tree indexes) and tile-
cover[3] (map tile indexes), both of which are as fast or faster than the C++
indexers used in most mainstream spatial databases.

Expect these benchmarks to improve in the coming months as we push the limits
with new, faster algorithms as well.

[1]
[https://gist.github.com/morganherlocker/a9041f2491c63b541cb2](https://gist.github.com/morganherlocker/a9041f2491c63b541cb2)

[2] [https://github.com/mourner/rbush](https://github.com/mourner/rbush)

[3] [https://github.com/mapbox/tile-cover](https://github.com/mapbox/tile-
cover)

~~~
ldng
Thanks ! I'll have a deeper look at all that later. I was wondering if you
were using r-tree indexes (I haven't looked at the code yet). Rbush certainly
looks interesting.

------
mbq
It is sad that substantial part of this lib assumes flat Earth; it will work
well on a city scale, but one has to expect spectacular fails on a longer
distances and near the poles :/

~~~
morganherlocker
Distance calculations account for this and geodesic buffer support is on the
way. This is close to top of my priority list right now.

------
mrec
All examples currently failing, getting an error page instead of turf.min.js:

"This request has been blacklisted for sending too much traffic to rawgit.com.
Please contact the owner of the site that sent you here and ask them to use
cdn.rawgit.com instead, which has no traffic limit."

~~~
morganherlocker
Thanks for the heads up! Everything is back up now.

------
rektide
I'd just started learning about what's offered in Geotools.JS
([https://github.com/jillesvangurp/geotools-
js](https://github.com/jillesvangurp/geotools-js)). This looks way way more
comprehensive; very cool.

------
metastew
Have you thought about porting it to Meteor's Atmosphere
([https://atmospherejs.com/i/publishing](https://atmospherejs.com/i/publishing))?
You'd only need to set up a Meteor Developer account and then create a Meteor
package file and export the library for Meteor's usage (afaik).

I'm curious if this supports Leaflet too?

~~~
uptown
Here's the Mapbox blog post about it, where they confirm easy integration with
Leaflet:

[https://www.mapbox.com/blog/turf-gis-for-web-
maps/](https://www.mapbox.com/blog/turf-gis-for-web-maps/)

------
thomasfoster96
Does anyone know how widely this is being used in production? Turf looks
pretty good and I've had my eye on it for a while, but I'm not willing to get
too attached to it if it has performance issues, and I'd like to hear about
other people's experiences.

------
noer
wow, that looks beautiful! i used GIS pretty extensively when I worked in the
public sector. I've sort of stopped doing any kind of mapping work, but this
makes me want to find a project!

------
whalesalad
I wish I had a use for this because the documentation is beautiful.

------
elinchrome
In the demo wombats code, shouldn't 'miles' be in a constant somewhere? That
seem messy.

~~~
uptown
The source has awareness of miles, kilometers, radians, and degrees as units
of measure. Passing it in the demo is just specifying which one you're
expecting results to use in its calculations.

~~~
maxerickson
Does it just punt on miles<->longitude? I looked at the code some and don't
see where it would ever deal with projections.

(jsts mentions coordinates systems in comments, but I don't where it ever does
anything about them)

~~~
morganherlocker
Wgs84 data is assumed for distance calculations. If you need to convert your
data on the fly, I typically recommend proj4js.

~~~
ldng
Maybe you could document that more explicitly. Basically defining the scope of
the project and where to look for complementary tools like proj4js and rbush
for instance.

