![6ce37696fe30cc5c3506abcd31d9adb6.png](https://i-blog.csdnimg.cn/blog_migrate/bdb5d95eae293bb7c64b8b5b272f73a7.jpeg)
打开手机 app,轻轻一点,距离你最近的餐馆就会依次排序显示。停下共享单车,手机会提醒你进入了禁停区域...... 这些应用里极为普及的功能都离不开空间分析。
地理空间分析是很大的一个分类,例如计算面积和距离以及将点连接到多边形,使人们能够查看其数据中的图案或关系。
点击查看 Mapbox 如何进行空间分析!docs.mapbox.com如今,空间分析已用于流行病学,生物学,统计学,经济学,商业和商业,城市规划,地质学,石油和天然气以及许多其他行业。
当你寻找最近的餐厅时, 需要列举搜索半径里的所有餐厅,并计算你与每个餐厅的距离,依次排列。 这就涉及到最基础的点是否在多边形(point in polygon)的判断;两点间距离的计算等。
当护林员在 app 里标记野生动物出没的地方, 涉及到如何在地图上绘制点线面,绘制缓冲区(Buffer),坐标系的转换。
探究房价的空间分布,并展示可视化效果时,会用到插值法来处理。
这似乎听起来像要深厚的 GIS 基础, 拓扑空间关系算法.....
![7d23dcb7ba6225ee42a34ba79e78120b.png](https://i-blog.csdnimg.cn/blog_migrate/9849810358587f73cc6740659f30fc60.png)
不, 你无须担心,Mapbox 有个神器,让您无需再造轮子,就可以快速实现你想要的空间分析相关的功能!
那就是TURF——一个开源 JavaScript 库,允许您在浏览器中执行空间操作。Turf 可帮助您分析,汇总和转换数据,以新方式将其可视化并进行高级分析。Turf.js 的算法还移植到了 android 和 ios平台上,你可以使用 Java SDK 的 turf 库和 Turf for Swift 来进行空间分析。
![1cd1738e105193c5bd7a5a91740a3a7a.png](https://i-blog.csdnimg.cn/blog_migrate/fe4ce0f57d2c7ac24dc9becee442e045.jpeg)
查看 Turf.js API 文档:
Turf.js | Advanced Geospatial Analysisturfjs.org查看 github 源码:
turfgithub.com![7542a1f36b50842d24fa0fab8fa6cd1a.png](https://i-blog.csdnimg.cn/blog_migrate/23d62909d299d9a9c39ff6cafadff6b5.png)
它于2015年推出,简单易懂,小巧灵敏,模块化,运行速度极快!
- 简约: 使用 GeoJSON 的模块化、简单易懂的 JavaScript 函数
- 模块化: Turf 是一个个小模块的集合,你想用哪个,就用哪个!
- 快速: 利用最新的算法,无须将数据发送到服务器
在深入了解 Turf 库前的必备知识
所有 Turf 方法都处理遵循 GeoJSON 规范的空间数据。GeoJSON 是一种强大的格式,可用于编码各种地理数据结构。它支持以下几何类型:Point,LineString, Polygon,MultiPoint,MultiLineString,和MultiPolygon。具有其他属性的几何对象是 Feature 对象。
Turf 库利用了这一点,并将 GeoJSON 作为该库的基础。这意味着,例如,如果要获取两个纬度/经度点之间的距离,则首先需要将这些坐标表示为GeoJSON Point对象。
点击这里探索 GeoJSON
![cd54cf2bf63468912653de5ba23eb496.png](https://i-blog.csdnimg.cn/blog_migrate/c2d82e8988a2dbe1220fd699836817ee.png)
Turf 库里面有哪些功能?
turf 库主要分为 17 大类 !提供多达 150 种的空间分析功能!堪称丰富+多样+完备~
![e3bc94702964cd12b7ddc4b8e58183be.png](https://i-blog.csdnimg.cn/blog_migrate/0bab7570ce6b9248261bcf49fb5512da.png)
查看 Turf.js API 文档一探究竟
1. Measurement 测量:测点到点,点到线的距离, 面积,弧线长,中点等等。
- along
- area
- bbox
- bboxPolygon
- bearing
- center
- centerOfMass
- centroid
- destination
- distance
- envelope
- length
- midpoint
- pointOnFeature
- polygonTangents
- pointToLineDistance
- rhumbBearing
- rhumbDestination
- rhumbDistance
- square
- greatCircle
2. Coordinate Mutation 坐标突变:清除坐标,坐标翻转,倒转,降低精度等
- cleanCoords
- flip
- rewind
- round
- truncate
3. Transformation 转化: 切割bbox,贝塞尔曲线,缓冲区,克隆geojson,合并多边形,相交,简化,镶嵌,旋转等
- bboxClip
- bezierSpline
- buffer
- circle
- clone
- concave
- convex
- difference
- dissolve
- intersect
- lineOffset
- simplify
- tesselate
- transformRotate
- transformTranslate
- transformScale
- union
- voronoi
以 bezierSpline 贝塞尔曲线为例:lineString 可轻松优化为贝塞尔曲线。
![9a8bc5efeb261a40324845abc94812a1.png](https://i-blog.csdnimg.cn/blog_migrate/880e05e32ac639fc1e9802d099286a99.jpeg)
var line = turf.lineString([
[-76.091308, 18.427501],
[-76.695556, 18.729501],
[-76.552734, 19.40443],
[-74.61914, 19.134789],
[-73.652343, 20.07657],
[-73.157958, 20.210656]
]);
var curved = turf.bezierSpline(line);
4. Feature Conversion 要素转化
- combine
- explode
- flatten
- lineToPolygon
- polygonize
- polygonToLine
5. Misc
- kinks
- lineArc
- lineChunk
- lineIntersect
- lineOverlap
- lineSegment
- lineSlice
- lineSliceAlong
- lineSplit
- mask
- nearestPointOnLine
- sector
- shortestPath
- unkinkPolygon
6. Helper
- featureCollection
- feature
- geometryCollection
- lineString
- multiLineString
- multiPoint
- multiPolygon
- point
- polygon
7. Random:生成随机点,线,面。
- randomPosition
- randomPoint
- randomLineString
- randomPolygon
8. Data
- sample
9. Interpolation:插值法,包括等频带,等值线,tin 插值法等。
- interpolate
- isobands
- isolines
- planepoint
- tin
10. Joins:点在多边形中的判断等
- pointsWithinPolygon
- tag
11. Grids:格网
- hexGrid
- pointGrid
- squareGrid
- triangleGrid
12. Classification 分类
- nearestPoint
13. Aggregation 聚合:集合,Kmeans 集群分析,Dbscan 集群分析等。
- collect
- clustersDbscan
- clustersKmeans
14. Meta
- coordAll
- coordEach
- coordReduce
- featureEach
- featureReduce
- flattenEach
- flattenReduce
- getCoord
- getCoords
- getGeom
- getType
- geomEach
- geomReduce
- propEach
- propReduce
- segmentEach
- segmentReduce
- getCluster
- clusterEach
- clusterReduce
15. Assertions
- collectionOf
- containsNumber
- geojsonType
- featureOf
16. Booleans 布尔值
- booleanClockwise
- booleanContains
- booleanCrosses
- booleanDisjoint
- booleanEqual
- booleanOverlap
- booleanParallel
- booleanPointInPolygon
- booleanPointOnLine
- booleanWithin
17. Unit Conversion 单位换算
- bearingToAzimuth
- convertArea
- convertLength
- degreesToRadians
- lengthToRadians
- lengthToDegrees
- radiansToLength
- radiansToDegrees
- toMercator
- toWgs84
Turf 库的应用案例大赏
1. Mapbox GL JS 和 Turf.js 联用:
![fe4c33590d7c331d5745aff50e01ce8b.png](https://i-blog.csdnimg.cn/blog_migrate/812273584fa5e2515e3905f218967167.jpeg)
使用Turf.js和Mapbox GL JS分析数据
![2777df7ca1e87c48b323c5060462d00a.png](https://i-blog.csdnimg.cn/blog_migrate/9661fea04247d22e8b796a74eb10216c.jpeg)
按距离对商店进行排序
2. Maps SDK for Android and the Java SDK 的案例
![433ad7cfe2965721115771c58973127b.png](https://i-blog.csdnimg.cn/blog_migrate/94c1569d61d5416f76b6927cd8ab31f5.jpeg)
![570a112c0a42a39cc39188cd449b678e.png](https://i-blog.csdnimg.cn/blog_migrate/ccf4d2385a24bc96bdecf55af30a0736.jpeg)
![f4d6ab7246b5152c885548633ed12bda.png](https://i-blog.csdnimg.cn/blog_migrate/f62bb5c37e85887ed3f84d426f84c3c3.png)
3. Maps SDK for iOS and Turf for Swift
前往 Github 查看 Turf for Swift:https://github.com/mapbox/turf-swift/github.com快去试一试吧!一不小心就变成空间分析专家啦!
欢迎您进入 Mapbox.cn 留下你的问题、建议、产品想法等,我们会在 1- 3 个工作日内回复你哦!
![060d3fac007480f4c315e48a490b595d.png](https://i-blog.csdnimg.cn/blog_migrate/44f0beb6bd81596501566ae7353df01e.jpeg)