spatial_features 2.9.3 → 2.10.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 060dca976eac8a7cbff438221861b8b60cf559d5c8edae033bf1cd35f1b1ed84
4
- data.tar.gz: ca965a8dbaa21d63f4c226517a7229d573ceec923e97a03b0906da028605b4c0
3
+ metadata.gz: ea21f56e0a79abcbf3f5da215067d6940e015303f8513d429ca4e6993930cc4a
4
+ data.tar.gz: f9af513209d24e7733e988cbf7348b5bde675348e34537924ea8e04132a684a8
5
5
  SHA512:
6
- metadata.gz: 2deace5489bb06708d816d16673bd23b2259b604bc592f7c33e6e29eb1055a1ba6992e11312148f76bb885d20c449a35a8ee0be5c0ff9d3725d0d68ebecec633
7
- data.tar.gz: 1738c4c0665b974aff7ebbf3774d031e444d64a2362f32ede6baae7ca8e7afef47a2c247b8dabf82e1adfabce975138e06bb4e52156344030526c30246180335
6
+ metadata.gz: 04e52b66630bd3092f6c56ea7da6265c844c3c037644f6fe611fa6b1507a286daca147f9b14498272da0d2c6d18bb9355a1da96ddd63346c4a7eadbdeff52684
7
+ data.tar.gz: 0ce4e3fa042d6129429bf1cc7aa7a70e3af3e4e9671f78a6380aea4f7aca9c9be5642e4a66d4f79944ad9bbd58e3e97cd14e24768ca0fe6a8694ea1cf2c21c10
@@ -7,24 +7,17 @@ class AggregateFeature < AbstractFeature
7
7
  def refresh
8
8
  feature_array_sql = <<~SQL
9
9
  ARRAY[
10
- (#{features.select('ST_Multi(ST_Union(ST_CollectionExtract(geog::geometry, 1)))').to_sql}),
11
- (#{features.select('ST_Multi(ST_Union(ST_CollectionExtract(geog::geometry, 2)))').to_sql}),
12
- (#{features.select('ST_Multi(ST_Union(ST_CollectionExtract(geog::geometry, 3)))').to_sql})
10
+ (#{features.select('ST_UNION(ST_CollectionExtract(geog::geometry, 1))').to_sql}),
11
+ (#{features.select('ST_UNION(ST_CollectionExtract(geog::geometry, 2))').to_sql}),
12
+ (#{features.select('ST_UNION(ST_CollectionExtract(geog::geometry, 3))').to_sql})
13
13
  ]
14
14
  SQL
15
15
 
16
16
  # Remove empty features so ST_COLLECT doesn't choke. This seems to be a difference between PostGIS 2.x and 3.x
17
- compacted_feature_array_sql = <<~SQL
18
- array_remove(
19
- array_remove(
20
- array_remove(#{feature_array_sql},
21
- ST_GeomFromText('MultiPoint EMPTY')),
22
- ST_GeomFromText('MultiLinestring EMPTY')),
23
- ST_GeomFromText('MultiPolygon EMPTY'))
24
- SQL
25
-
26
17
  self.geog = ActiveRecord::Base.connection.select_value <<~SQL
27
- SELECT ST_Collect(#{compacted_feature_array_sql})::geography
18
+ SELECT ST_Collect(unnest)::geography
19
+ FROM (SELECT unnest(#{feature_array_sql})) AS features
20
+ WHERE NOT ST_IsEmpty(unnest)
28
21
  SQL
29
22
  self.save!
30
23
  end
@@ -8,12 +8,7 @@ module SpatialFeatures
8
8
  def each_record(&block)
9
9
  Nokogiri::XML(@data).css('Placemark').each do |placemark|
10
10
  name = placemark.css('name').text
11
- metadata = { :description => placemark.css('description').text }
12
- placemark.css('ExtendedData SimpleData').each do |node|
13
- metadata[node['name']] = node.text
14
- end
15
- metadata.delete_if {|key, value| value.blank? }
16
-
11
+ metadata = extract_metadata(placemark)
17
12
 
18
13
  {'Polygon' => 'POLYGON', 'LineString' => 'LINE', 'Point' => 'POINT'}.each do |kml_type, sql_type|
19
14
  placemark.css(kml_type).each do |placemark|
@@ -32,6 +27,34 @@ module SpatialFeatures
32
27
  def geom_from_kml(kml)
33
28
  ActiveRecord::Base.connection.select_value("SELECT ST_GeomFromKML(#{ActiveRecord::Base.connection.quote(kml.to_s)})")
34
29
  end
30
+
31
+ def extract_metadata(placemark)
32
+ metadata = {}
33
+ metadata.merge! extract_table(placemark)
34
+ metadata.merge! extract_extended_data(placemark)
35
+ metadata.merge! :description => placemark.css('description').text if metadata.empty?
36
+ metadata.delete_if {|key, value| value.blank? }
37
+
38
+ return metadata
39
+ end
40
+
41
+ def extract_extended_data(placemark)
42
+ metadata = {}
43
+ placemark.css('ExtendedData SimpleData').each do |node|
44
+ metadata[node['name']] = node.text
45
+ end
46
+ return metadata
47
+ end
48
+
49
+ def extract_table(placemark)
50
+ metadata = {}
51
+ placemark.css('description').each do |description|
52
+ Nokogiri::XML(description.text).css('html table table td').each_slice(2) do |key, value|
53
+ metadata[key.text] = value.text
54
+ end
55
+ end
56
+ return metadata
57
+ end
35
58
  end
36
59
  end
37
60
  end
@@ -1,3 +1,3 @@
1
1
  module SpatialFeatures
2
- VERSION = "2.9.3"
2
+ VERSION = "2.10.0"
3
3
  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.9.3
4
+ version: 2.10.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: 2020-01-12 00:00:00.000000000 Z
12
+ date: 2020-04-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails