class LZRTag::Map::MyMapsParser

Attributes

points[RW]
polygons[RW]
styles[RW]

Public Class Methods

new(filename) click to toggle source
# File lib/lzrtag/map/myMaps_parser.rb, line 13
def initialize(filename)
        @xmlStructure = XmlSimple.xml_in(filename)["Document"][0];

        @styles = Hash.new();
        _fetch_styles();

        @polygons = Hash.new();
        @polygons[""] = _fetch_polygons();

        @points = Hash.new();
        @points[""] = _fetch_marks();

        if(folders = @xmlStructure["Folder"])
                folders.each do |folder|
                        @polygons[folder["name"][0]] = _fetch_polygons(folder)
                        @points[folder["name"][0]] = _fetch_marks(folder);
                end
        end
end

Public Instance Methods

_fetch_marks(folder = nil) click to toggle source
# File lib/lzrtag/map/myMaps_parser.rb, line 93
def _fetch_marks(folder = nil)
        folder ||= @xmlStructure;

        outPoints = Array.new();
        return outPoints unless(placemarks = folder["Placemark"])

        placemarks.each do |pmark|
                next unless pmark["Point"];

                outPoint = Hash.new();
                outPoint[:name] = pmark["name"][0];
                outPoint[:description] = (pmark["description"] || [""])[0];

                outPoint[:description].split("<br>").each do |tag|
                        if(tag =~ /([^:]*):([^:]*)/)
                                outPoint[:arguments][$1] = $2;
                        end
                end

                outPoint[:point] = pmark["Point"][0]["coordinates"][0].gsub(/\s/, "").split(",")[0..1];

                outPoints << outPoint
        end

        return outPoints
end
generate_zones(zoneSet = "") click to toggle source
# File lib/lzrtag/map/myMaps_parser.rb, line 120
def generate_zones(zoneSet = "")
        if(zoneSet.is_a? String)
                zoneSet = @polygons[zoneSet];
        end

        zoneSet = [zoneSet].flatten;

        outZones = Array.new();
        zoneSet.each do |rawZone|
                outZones << Zone.from_raw_zone(rawZone);
        end

        return outZones;
end

Private Instance Methods

_fetch_polygons(folder = nil) click to toggle source
# File lib/lzrtag/map/myMaps_parser.rb, line 52
def _fetch_polygons(folder = nil)
        folder ||= @xmlStructure;

        outZones = Array.new();

        return outZones unless(placemarks = folder["Placemark"])

        placemarks.each do |zone|
                next unless zone["Polygon"];

                outZone = Hash.new();
                outZone[:name]  = zone["name"][0];
                outZone[:description] = (zone["description"] || [""])[0];

                outZone[:arguments] = Hash.new();
                outZone[:description].split("<br>").each do |tag|
                        if(tag =~ /([^:]*):([^:]*)/)
                                outZone[:arguments][$1] = $2;
                        end
                end

                outZone[:style] = @styles[zone["styleUrl"][0]];

                rawPolyData = zone["Polygon"][0]["outerBoundaryIs"][0]["LinearRing"][0]["coordinates"][0];
                rawPolyData.gsub!(" ", "");
                rawPolyArray = rawPolyData.split("\n");

                outZone[:polygon] = Array.new();
                rawPolyArray.each do |point|
                        point = point.split(",");
                        next if point.empty?
                        outZone[:polygon] << [point[0].to_f, point[1].to_f];
                end

                outZones << outZone;
        end

        return outZones;
end
_fetch_styles() click to toggle source
# File lib/lzrtag/map/myMaps_parser.rb, line 33
def _fetch_styles()
        @xmlStructure["Style"].each do |s|
                id = s["id"];
                if(id =~ /(.*)-normal$/)
                        id = $1;
                else
                        next;
                end

                next unless(s.has_key?("PolyStyle") && s.has_key?("LineStyle"))

                @styles["#" + id] = {
                        color: s["PolyStyle"][0]["color"][0],
                        borderColor: s["LineStyle"][0]["color"][0]
                };
        end
end