turf-ruby 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/turf/length.rb +21 -0
- data/lib/turf/meta.rb +60 -0
- data/lib/turf/version.rb +1 -1
- data/lib/turf_ruby.rb +6 -5
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c2222302d50f2e6f28d1369f76d100b8fc31751dbda47083894a2dac065c84d
|
4
|
+
data.tar.gz: 188b67a600244bc887794766e03b2107c819bc1ccfe559a8aab8c761920a2eb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9c194a59ebf4c99d9390ff90262d297bfebf0dd58ef9ee973435a7c14118e73e60494dec2d1013568bb07a4172fda3fe1fb77dbe50b47e382c0c62d07cdf93e
|
7
|
+
data.tar.gz: b3b425aa16b643ec0956f7a58b69a8562acf52791c674d12f044883c3445af8d088827abba0d576d5c4d5c251ace25709411e210d274b5c3e9a624c00f2947b6
|
data/lib/turf/length.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#:nodoc:
|
4
|
+
module Turf
|
5
|
+
# @!group Measurement
|
6
|
+
|
7
|
+
# Takes a GeoJSON and measures its length in the specified units, (Multi)Point 's distance are ignored.
|
8
|
+
# @see http://turfjs.org/docs/#length
|
9
|
+
# @param geojson [Feature<LineString|MultiLinestring>] GeoJSON to measure
|
10
|
+
# @param units [string] can be degrees, radians, miles, or kilometers (optional, default "kilometers")
|
11
|
+
# @return [number] length of GeoJSON
|
12
|
+
def length(geojson, units: "kilometers")
|
13
|
+
geojson = deep_symbolize_keys(geojson)
|
14
|
+
geojson = feature(geojson) if geojson[:geometry].nil?
|
15
|
+
segment_reduce(geojson, initial_value: 0) do |previous_value, segment|
|
16
|
+
previous_value ||= 0
|
17
|
+
coords = segment.dig(:geometry, :coordinates)
|
18
|
+
previous_value + Turf.distance(coords[0], coords[1], units: units)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/turf/meta.rb
CHANGED
@@ -298,4 +298,64 @@ module Turf
|
|
298
298
|
|
299
299
|
previous_value
|
300
300
|
end
|
301
|
+
|
302
|
+
# Iterate over 2-vertex line segment in any GeoJSON object, similar to Array.forEach()
|
303
|
+
# (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
|
304
|
+
# @see https://turfjs.org/docs/#segmentEach
|
305
|
+
# @param geojson [FeatureCollection|Feature|Geometry] any GeoJSON object
|
306
|
+
def segment_each(geojson)
|
307
|
+
flatten_each(geojson) do |feature, feature_index|
|
308
|
+
# Exclude null Geometries
|
309
|
+
return if feature[:geometry].nil?
|
310
|
+
|
311
|
+
# (Multi)Point geometries do not contain segments therefore they are ignored during this operation.
|
312
|
+
type = feature[:geometry][:type]
|
313
|
+
return if %w[Point MultiPoint].include?(type)
|
314
|
+
|
315
|
+
segment_index = 0
|
316
|
+
|
317
|
+
# Generate 2-vertex line segments
|
318
|
+
previous_coords = nil
|
319
|
+
previous_feature_index = 0
|
320
|
+
coord_each(feature) do |current_coord|
|
321
|
+
# Simulating a meta.coord_reduce() since `reduce` operations cannot be stopped by returning `false`
|
322
|
+
if previous_coords.nil? || feature_index > previous_feature_index
|
323
|
+
previous_coords = current_coord
|
324
|
+
previous_feature_index = feature_index
|
325
|
+
segment_index = 0
|
326
|
+
next
|
327
|
+
end
|
328
|
+
|
329
|
+
segment = Turf.line_string([previous_coords, current_coord], properties: feature[:properties])
|
330
|
+
next unless yield(segment, feature_index)
|
331
|
+
|
332
|
+
segment_index += 1
|
333
|
+
previous_coords = current_coord
|
334
|
+
end
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
def segment_reduce(geojson, initial_value: nil)
|
339
|
+
previous_value = initial_value
|
340
|
+
started = false
|
341
|
+
|
342
|
+
segment_each(geojson) do |segment, feature_index, multifeature_index, geometry_index, segment_index|
|
343
|
+
previous_value =
|
344
|
+
if !started && initial_value.nil?
|
345
|
+
segment
|
346
|
+
else
|
347
|
+
yield(
|
348
|
+
previous_value,
|
349
|
+
segment,
|
350
|
+
feature_index,
|
351
|
+
multifeature_index,
|
352
|
+
geometry_index,
|
353
|
+
segment_index
|
354
|
+
)
|
355
|
+
end
|
356
|
+
started = true
|
357
|
+
end
|
358
|
+
|
359
|
+
previous_value
|
360
|
+
end
|
301
361
|
end
|
data/lib/turf/version.rb
CHANGED
data/lib/turf_ruby.rb
CHANGED
@@ -4,15 +4,16 @@
|
|
4
4
|
#
|
5
5
|
# https://github.com/Turfjs/turf/tree/master/packages
|
6
6
|
#
|
7
|
-
require "turf/
|
7
|
+
require "turf/along"
|
8
|
+
require "turf/area"
|
8
9
|
require "turf/bearing"
|
10
|
+
require "turf/boolean_point_in_polygon"
|
11
|
+
require "turf/centroid"
|
9
12
|
require "turf/destination"
|
10
|
-
require "turf/along"
|
11
13
|
require "turf/distance"
|
14
|
+
require "turf/helpers"
|
12
15
|
require "turf/invariant"
|
13
|
-
require "turf/
|
14
|
-
require "turf/centroid"
|
16
|
+
require "turf/length"
|
15
17
|
require "turf/meta"
|
16
|
-
require "turf/area"
|
17
18
|
|
18
19
|
require "turf"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turf-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rafael Santos
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Turf Ruby is a Ruby library for spatial analysis. It includes traditional
|
14
14
|
spatial operations, helper functions for creating GeoJSON data, and data classification
|
@@ -29,6 +29,7 @@ files:
|
|
29
29
|
- lib/turf/distance.rb
|
30
30
|
- lib/turf/helpers.rb
|
31
31
|
- lib/turf/invariant.rb
|
32
|
+
- lib/turf/length.rb
|
32
33
|
- lib/turf/meta.rb
|
33
34
|
- lib/turf/version.rb
|
34
35
|
- lib/turf_ruby.rb
|
@@ -39,7 +40,7 @@ metadata:
|
|
39
40
|
homepage_uri: http://github.com/formigarafa/turf-ruby
|
40
41
|
source_code_uri: http://github.com/formigarafa/turf-ruby
|
41
42
|
documentation_uri: https://formigarafa.github.io/turf-ruby/
|
42
|
-
post_install_message:
|
43
|
+
post_install_message:
|
43
44
|
rdoc_options: []
|
44
45
|
require_paths:
|
45
46
|
- lib
|
@@ -54,9 +55,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
54
55
|
- !ruby/object:Gem::Version
|
55
56
|
version: '0'
|
56
57
|
requirements: []
|
57
|
-
|
58
|
-
|
59
|
-
signing_key:
|
58
|
+
rubygems_version: 3.1.6
|
59
|
+
signing_key:
|
60
60
|
specification_version: 4
|
61
61
|
summary: A modular geospatial engine. Ruby port of TurfJS.
|
62
62
|
test_files: []
|