spatial_features 3.7.0 → 3.8.0
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: 54f447bf36298072b9480e0f33faa93145d8f4dbdecd5d1422001f0202a25354
|
4
|
+
data.tar.gz: 2546213005b5fde86ed5732c9d408a9b1ee7f30d9c53afeaa75a19a4b0f299f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9295415b8375b8d5c9741b15371b2aebf0eb02dc75220a6d0f3ac16259d26f1dd60aefdc0f3bf96f8e5c959a4b34d81717efaa87309555f1bbfe28261797aa6
|
7
|
+
data.tar.gz: 26fedef5b3779e49f656410a5fbfc7cbf8997d2a7ac627015681372a5e61dc1392116ed95a46662143f1fdd1ea628a8b5aaaf6b0e7f45b08a42189f27a5e7cca
|
@@ -59,7 +59,41 @@ class AbstractFeature < ActiveRecord::Base
|
|
59
59
|
else "ST_Transform(ST_SetSRID(ST_Point(:lng, :lat), 4326), #{detect_srid(geom)})"
|
60
60
|
end
|
61
61
|
|
62
|
-
|
62
|
+
binds = { :lng => lng.to_d, :lat => lat.to_d }
|
63
|
+
|
64
|
+
within_distance_of_sql(point_sql, distance_in_meters, geom, **binds)
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.within_distance_of_line(points, distance_in_meters, geom = 'geom_lowres')
|
68
|
+
point_sql =
|
69
|
+
case geom.to_s
|
70
|
+
when 'geog' then ':points'
|
71
|
+
else "ST_Transform(ST_SetSRID(:points::geometry, 4326), #{detect_srid(geom)})"
|
72
|
+
end
|
73
|
+
|
74
|
+
binds = { :points => "LINESTRING(#{points.map {|coords| coords.join(' ') }.join(', ')})" }
|
75
|
+
|
76
|
+
within_distance_of_sql(point_sql, distance_in_meters, geom, **binds)
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.within_distance_of_polygon(points, distance_in_meters, geom = 'geom_lowres')
|
80
|
+
point_sql =
|
81
|
+
case geom.to_s
|
82
|
+
when 'geog' then "ST_Polygon(:points::geometry)"
|
83
|
+
else "ST_Transform(ST_Polygon(:points::geometry, 4326), #{detect_srid(geom)})"
|
84
|
+
end
|
85
|
+
|
86
|
+
binds = { :points => "LINESTRING(#{points.map {|coords| coords.join(' ') }.join(', ')})" }
|
87
|
+
|
88
|
+
within_distance_of_sql(point_sql, distance_in_meters, geom, **binds)
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.within_distance_of_sql(geometry_sql, distance_in_meters, features_column = 'geom_lowres', **binds)
|
92
|
+
if distance_in_meters.to_f > 0
|
93
|
+
where("ST_DWithin(features.#{features_column}, #{geometry_sql}, :distance)", **binds, :distance => distance_in_meters)
|
94
|
+
else
|
95
|
+
where("ST_Intersects(features.#{features_column}, #{geometry_sql})", **binds)
|
96
|
+
end
|
63
97
|
end
|
64
98
|
|
65
99
|
def self.area_in_square_meters(geom = 'geom_lowres')
|
@@ -6,12 +6,18 @@ module SpatialFeatures
|
|
6
6
|
def self.update_cached_status(record, method_name, state)
|
7
7
|
return unless record.has_attribute?(:spatial_processing_status_cache)
|
8
8
|
|
9
|
-
cache = record.spatial_processing_status_cache
|
9
|
+
cache = record.spatial_processing_status_cache
|
10
10
|
cache[method_name] = state
|
11
11
|
record.spatial_processing_status_cache = cache
|
12
12
|
record.update_column(:spatial_processing_status_cache, cache) if record.will_save_change_to_spatial_processing_status_cache?
|
13
13
|
end
|
14
14
|
|
15
|
+
def spatial_processing_status_cache
|
16
|
+
value = super
|
17
|
+
return {} unless value.is_a?(Hash)
|
18
|
+
return value
|
19
|
+
end
|
20
|
+
|
15
21
|
def queue_update_spatial_cache(*args, priority: priority_offset + 1, **kwargs)
|
16
22
|
queue_spatial_task('update_spatial_cache', *args, priority:, **kwargs)
|
17
23
|
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: 3.
|
4
|
+
version: 3.8.0
|
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: 2024-
|
12
|
+
date: 2024-09-28 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|