spatial_features 2.10.3 → 2.10.8
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e304bd5be296e4094c384df03f72117452bce5bafc5364dd3277c9826c374f28
|
4
|
+
data.tar.gz: d0bddea53fc9210bbc192160c490b7ba8b85dcafc8ee6dc238f8f8f8d4ea6a43
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bef25168be8628a563a5aff4026c3dd3de26ba5cbcd82ed6b3de155bfed59d6e8ac72af4f05b8a12f3755125772732fe14238f5ea9daccc6d62bfb8fc9739311
|
7
|
+
data.tar.gz: 9f0969a84cd00fca613384cbf8dfdd5989421de2b63c56db600729f94dc5c65a6333ba96dd99377b9339823bca8657fd7eaa51e1aff91abb8bfcd34bb3db9cb0
|
@@ -131,7 +131,7 @@ module SpatialFeatures
|
|
131
131
|
scope = scope.select(options[:columns])
|
132
132
|
|
133
133
|
scope = scope.select("ST_Distance(features.geom, other_features.geom) AS distance_in_meters") if options[:distance]
|
134
|
-
scope = scope.select("ST_Area(ST_Intersection(features.geom, other_features.geom)) AS intersection_area_in_square_meters") if options[:intersection_area]
|
134
|
+
scope = scope.select("ST_Area(ST_Intersection(ST_CollectionExtract(features.geom, 3), ST_CollectionExtract(other_features.geom, 3))) AS intersection_area_in_square_meters") if options[:intersection_area] # Use ST_CollectionExtract to avoid a segfault we've been seeing when intersecting certain geometry
|
135
135
|
|
136
136
|
return scope
|
137
137
|
end
|
@@ -141,13 +141,12 @@ module SpatialFeatures
|
|
141
141
|
def spatial_join(other, buffer = 0, table_alias = 'features', other_alias = 'other_features', geom = 'geom_lowres')
|
142
142
|
scope = features_scope(self).select("#{geom} AS geom").select(:spatial_model_id)
|
143
143
|
|
144
|
-
other_scope = features_scope(other)
|
145
|
-
other_scope_select_sql = "ST_Union(#{geom})"
|
146
|
-
other_scope_select_sql = "ST_Buffer(#{other_scope_select_sql}, #{buffer})" if buffer&.positive?
|
147
|
-
other_scope = other_scope.select("ST_Union(#{geom}) AS geom").select("#{other_scope_select_sql} AS buffered_geom")
|
148
|
-
|
144
|
+
other_scope = features_scope(other).select("ST_Union(#{geom}) AS geom")
|
149
145
|
return joins(%Q(INNER JOIN (#{scope.to_sql}) AS #{table_alias} ON #{table_alias}.spatial_model_id = #{table_name}.id))
|
150
|
-
.joins(%Q(INNER JOIN (#{other_scope.to_sql}) AS #{other_alias}
|
146
|
+
.joins(%Q(INNER JOIN (#{other_scope.to_sql}) AS #{other_alias}
|
147
|
+
ON NOT ST_IsEmpty(#{table_alias}.geom) -- Can't ST_DWithin empty geometry
|
148
|
+
AND NOT ST_IsEmpty(#{other_alias}.geom) -- Can't ST_DWithin empty geometry
|
149
|
+
AND ST_DWithin(#{table_alias}.geom, #{other_alias}.geom, #{buffer})))
|
151
150
|
end
|
152
151
|
|
153
152
|
def features_scope(other)
|
@@ -4,7 +4,11 @@ module SpatialFeatures
|
|
4
4
|
module Importers
|
5
5
|
class File < SimpleDelegator
|
6
6
|
def initialize(data, *args)
|
7
|
-
|
7
|
+
begin
|
8
|
+
file = Download.open(data, unzip: [/\.kml$/, /\.shp$/], downcase: true)
|
9
|
+
rescue Unzip::PathNotFound
|
10
|
+
raise ImportError, "Archive did not contain a .kml or .shp file. Supported formats are KMZ, KML, and zipped ArcGIS shapefiles."
|
11
|
+
end
|
8
12
|
|
9
13
|
case ::File.extname(file.path.downcase)
|
10
14
|
when '.kml'
|
@@ -23,10 +23,17 @@ module SpatialFeatures
|
|
23
23
|
yield OpenStruct.new data_from_wkt(record.geometry.as_text, proj4_projection).merge(:metadata => record.attributes) if record.geometry.present?
|
24
24
|
end
|
25
25
|
end
|
26
|
+
rescue Errno::ENOENT => e
|
27
|
+
case e.message
|
28
|
+
when /No such file or directory @ rb_sysopen - (.+)/
|
29
|
+
raise IncompleteShapefileArchive, "Shapefile archive is missing a required file: #{::File.basename($1)}"
|
30
|
+
else
|
31
|
+
raise e
|
32
|
+
end
|
26
33
|
end
|
27
34
|
|
28
35
|
def proj4_projection
|
29
|
-
@proj4 ||= proj4_from_file || default_proj4_projection || raise(
|
36
|
+
@proj4 ||= proj4_from_file || default_proj4_projection || raise(IndeterminateShapefileProjection, 'Could not determine shapefile projection. Check that `gdalsrsinfo` is installed.')
|
30
37
|
end
|
31
38
|
|
32
39
|
def proj4_from_file
|
@@ -45,11 +52,10 @@ module SpatialFeatures
|
|
45
52
|
def file
|
46
53
|
@file ||= Download.open(@data, unzip: /\.shp$/, downcase: true)
|
47
54
|
end
|
48
|
-
|
49
|
-
|
50
|
-
# ERRORS
|
51
|
-
|
52
|
-
class IndeterminateProjection < StandardError; end
|
53
55
|
end
|
56
|
+
|
57
|
+
# ERRORS
|
58
|
+
class IndeterminateShapefileProjection < SpatialFeatures::ImportError; end
|
59
|
+
class IncompleteShapefileArchive < SpatialFeatures::ImportError; end
|
54
60
|
end
|
55
61
|
end
|
@@ -7,7 +7,7 @@ module SpatialFeatures
|
|
7
7
|
|
8
8
|
if find = Array.wrap(find).presence
|
9
9
|
paths = paths.detect {|path| find.any? {|pattern| path.index(pattern) } }
|
10
|
-
raise(
|
10
|
+
raise(PathNotFound, "Archive did not contain a file matching #{find}") unless paths.present?
|
11
11
|
end
|
12
12
|
|
13
13
|
return paths
|
@@ -44,5 +44,9 @@ module SpatialFeatures
|
|
44
44
|
rescue EOFError
|
45
45
|
return false
|
46
46
|
end
|
47
|
+
|
48
|
+
# EXCEPTIONS
|
49
|
+
|
50
|
+
class PathNotFound < StandardError; end
|
47
51
|
end
|
48
52
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spatial_features
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.10.
|
4
|
+
version: 2.10.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Wallace
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-05-
|
12
|
+
date: 2020-05-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -18,9 +18,9 @@ dependencies:
|
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '4.2'
|
21
|
-
- - "
|
21
|
+
- - "<"
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version: '5.
|
23
|
+
version: '5.2'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -28,9 +28,9 @@ dependencies:
|
|
28
28
|
- - ">="
|
29
29
|
- !ruby/object:Gem::Version
|
30
30
|
version: '4.2'
|
31
|
-
- - "
|
31
|
+
- - "<"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '5.
|
33
|
+
version: '5.2'
|
34
34
|
- !ruby/object:Gem::Dependency
|
35
35
|
name: delayed_job_active_record
|
36
36
|
requirement: !ruby/object:Gem::Requirement
|