Class: Map::KmlEditService

Inherits:
Object
  • Object
show all
Defined in:
lib/map/kml_edit_service.rb

Instance Method Summary collapse

Constructor Details

#initialize(raw_kml) ⇒ KmlEditService

Returns a new instance of KmlEditService.



4
5
6
7
# File 'lib/map/kml_edit_service.rb', line 4

def initialize(raw_kml)
  @raw_kml = raw_kml
  adjust_invalid_kml!
end

Instance Method Details

#add_default_value_to_placemarks(data) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
# File 'lib/map/kml_edit_service.rb', line 51

def add_default_value_to_placemarks(data)
  data.each do |name, value|
    check_definition!(name)

    document.css('Placemark').each do |placemark|
      add_extended_data(name, value, placemark)
    end
  end

  self
end

#add_definition_custom_field(name, type) ⇒ Object

add extended data do KML Based on developers.google.com/kml/documentation/extendeddata



11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/map/kml_edit_service.rb', line 11

def add_definition_custom_field(name, type)
  schema = Nokogiri::XML::Node.new('Schema', nokogiri)
  schema['name'] = name
  schema['id'] = "#{name}Id"
  simple_field = Nokogiri::XML::Node.new('SimpleField', nokogiri)
  simple_field['type'] = type
  simple_field['name'] = name
  schema << simple_field

  document << schema

  self
end

#add_point(lat, lon, data = {}) ⇒ Object

Add new point to KML (Placemark)



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/map/kml_edit_service.rb', line 26

def add_point(lat, lon, data = {})
  index = document.css('Placemark').length + 1
  placemark = Nokogiri::XML::Node.new('Placemark', nokogiri)
  name = Nokogiri::XML::Node.new('name', nokogiri)
  name.content = "Point #{index}"

  # ExtendedData
  data.each do |key, value|
    add_extended_data(key, value, placemark)
  end

  # Point
  point = Nokogiri::XML::Node.new('Point', nokogiri)
  coordinates = Nokogiri::XML::Node.new('coordinates', nokogiri)
  coordinates.content = "#{lon},#{lat}"
  point << coordinates

  placemark << name
  placemark << point

  document_or_folder << placemark

  self
end

#remove_node(name) ⇒ Object



67
68
69
70
71
# File 'lib/map/kml_edit_service.rb', line 67

def remove_node(name)
  document.css(name.to_s).each(&:remove)

  self
end

#to_xmlObject



63
64
65
# File 'lib/map/kml_edit_service.rb', line 63

def to_xml
  nokogiri.to_xml
end