spatial_features 2.9.3 → 2.10.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: 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