WME SC MapRaid Overlay

Adds a SC MapRaid area overlay.

  1. // ==UserScript==
  2. // @name WME SC MapRaid Overlay
  3. // @namespace https://greatest.deepsurf.us/users/45389
  4. // @version 2018.04.03.001
  5. // @description Adds a SC MapRaid area overlay.
  6. // @author WazeDev (MapOMatic)
  7. // @include /^https:\/\/(www|beta)\.waze\.com\/(?!user\/)(.{2,6}\/)?editor\/?.*$/
  8. // @require https://greatest.deepsurf.us/scripts/24851-wazewrap/code/WazeWrap.js
  9. // @license GNU GPLv3
  10. // @grant none
  11. // ==/UserScript==
  12.  
  13. (function() {
  14. 'use strict';
  15.  
  16. // Enter the state abbreviation:
  17. var _stateAbbr = "SC";
  18.  
  19. // Enter the MapRaid area names and the desired fill colors, in order they appear in the original map legend:
  20. var _areas = {
  21. '7A Fort Jackson':{fillColor:'#FF0000'},
  22. '7B Shaw AFB':{fillColor:'#FF0000'},
  23. '7C McEntyre JNGB':{fillColor:'#FF0000'},
  24. '1 Aiken':{fillColor:'#01579b'},
  25. '2 Lexington':{fillColor:'#7cb342'},
  26. '3 Columbia-Harbison':{fillColor:'#f57c00'},
  27. '4 Columbia-Camden':{fillColor:'#ffea00'},
  28. '5 Rock Hill':{fillColor:'#01579b'},
  29. '6 Fort Mill-Lancaster':{fillColor:'#7cb342'}
  30. };
  31.  
  32. var _settingsStoreName = '_wme_' + _stateAbbr + '_mapraid';
  33. var _settings;
  34. var _features;
  35. var _kml;
  36. var _layerName = _stateAbbr + ' MapRaid';
  37. var _layer = null;
  38. var defaultFillOpacity = 0.3;
  39.  
  40. function loadSettingsFromStorage() {
  41. _settings = $.parseJSON(localStorage.getItem(_settingsStoreName));
  42. if(!_settings) {
  43. _settings = {
  44. layerVisible: true,
  45. hiddenAreas: []
  46. };
  47. } else {
  48. _settings.layerVisible = (_settings.layerVisible === true);
  49. _settings.hiddenAreas = _settings.hiddenAreas || [];
  50. }
  51. }
  52.  
  53. function saveSettingsToStorage() {
  54. if (localStorage) {
  55. var settings = {
  56. layerVisible: _layer.visibility,
  57. hiddenAreas: _settings.hiddenAreas
  58. };
  59. localStorage.setItem(_settingsStoreName, JSON.stringify(settings));
  60. }
  61. }
  62.  
  63. function GetFeaturesFromKMLString(strKML) {
  64. var format = new OpenLayers.Format.KML({
  65. 'internalProjection': Waze.map.baseLayer.projection,
  66. 'externalProjection': new OpenLayers.Projection("EPSG:4326")
  67. });
  68. return format.read(strKML);
  69. }
  70.  
  71. function updateDistrictNameDisplay(){
  72. $('.mapraid-region').remove();
  73. if (_layer !== null) {
  74. var mapCenter = new OpenLayers.Geometry.Point(W.map.center.lon,W.map.center.lat);
  75. for (var i=0;i<_layer.features.length;i++){
  76. var feature = _layer.features[i];
  77. var color;
  78. var text = '';
  79. var num;
  80. var url;
  81. if(feature.geometry.containsPoint(mapCenter)) {
  82. text = feature.attributes.name;
  83. color = '#00ffff';
  84. var $div = $('<div>', {id:'mapraid', class:"mapraid-region", style:'display:inline-block;margin-left:10px;', title:'Click to toggle color on/off for this group'})
  85. .css({color:color, cursor:"pointer"})
  86. .click(toggleAreaFill);
  87. var $span = $('<span>').css({display:'inline-block'});
  88. $span.text('MR Area: ' + text).appendTo($div);
  89. $('.location-info-region').parent().append($div);
  90. if (color) {
  91. break;
  92. }
  93. }
  94. }
  95. }
  96. }
  97.  
  98. function toggleAreaFill() {
  99. var text = $('#mapraid span').text();
  100. if (text) {
  101. var match = text.match(/^MR Area: (.*)/);
  102. if (match.length > 1) {
  103. var areaName = match[1];
  104. var f = _layer.getFeaturesByAttribute('name', areaName)[0];
  105. var hide = f.attributes.fillOpacity !== 0;
  106. f.attributes.fillOpacity = hide ? 0 : defaultFillOpacity;
  107. var idx = _settings.hiddenAreas.indexOf(areaName);
  108. if (hide) {
  109. if (idx === -1) _settings.hiddenAreas.push(areaName);
  110. } else {
  111. if (idx > -1) {
  112. _settings.hiddenAreas.splice(idx,1);
  113. }
  114. }
  115. saveSettingsToStorage();
  116. _layer.redraw();
  117. }
  118. }
  119. }
  120.  
  121.  
  122. function init() {
  123. InstallKML();
  124. loadSettingsFromStorage();
  125. var layerid = 'wme_' + _stateAbbr + '_mapraid';
  126. var _features = GetFeaturesFromKMLString(_kml);
  127. var i = 0;
  128. for(var areaName in _areas) {
  129. _features[i].attributes.name = areaName;
  130. _features[i].attributes.fillColor = _areas[areaName].fillColor;
  131. _features[i].attributes.fillOpacity = _settings.hiddenAreas.indexOf(areaName) > -1 ? 0 : defaultFillOpacity;
  132. i++;
  133. }
  134. var layerStyle = new OpenLayers.StyleMap({
  135. strokeDashstyle: 'solid',
  136. strokeColor: '#000000',
  137. strokeOpacity: 1,
  138. strokeWidth: 3,
  139. fillOpacity: '${fillOpacity}',
  140. fillColor: '${fillColor}'
  141. });
  142. _layer = new OL.Layer.Vector(_stateAbbr + " MapRaid", {
  143. rendererOptions: { zIndexing: true },
  144. uniqueName: layerid,
  145. shortcutKey: "S+" + 0,
  146. layerGroup: _stateAbbr + '_mapraid',
  147. zIndex: -9999,
  148. displayInLayerSwitcher: true,
  149. visibility: _settings.layerVisible,
  150. styleMap: layerStyle
  151. });
  152. I18n.translations[I18n.locale].layers.name[layerid] = _stateAbbr + " MapRaid";
  153. _layer.addFeatures(_features);
  154. W.map.addLayer(_layer);
  155. W.map.events.register("moveend", null, updateDistrictNameDisplay);
  156. window.addEventListener('beforeunload', function saveOnClose() { saveSettingsToStorage(); }, false);
  157. updateDistrictNameDisplay();
  158.  
  159. // Add the layer checkbox to the Layers menu.
  160. WazeWrap.Interface.AddLayerCheckbox("display", "SC MapRaid", _settings.layerVisible, layerToggled);
  161. }
  162.  
  163. function layerToggled(visible) {
  164. _layer.setVisibility(visible);
  165. saveSettingsToStorage();
  166. }
  167.  
  168. function bootstrap() {
  169. if (W && W.loginManager && W.loginManager.isLoggedIn()) {
  170. init();
  171. console.log(_stateAbbr + ' MR Overlay:', 'Initialized');
  172. } else {
  173. console.log(_stateAbbr + ' MR Overlay: ', 'Bootstrap failed. Trying again...');
  174. window.setTimeout(() => bootstrap(), 500);
  175. }
  176. }
  177.  
  178. bootstrap();
  179.  
  180. function InstallKML(){
  181. OpenLayers.Format.KML=OpenLayers.Class(OpenLayers.Format.XML,{namespaces:{kml:"http://www.opengis.net/kml/2.2",gx:"http://www.google.com/kml/ext/2.2"},kmlns:"http://earth.google.com/kml/2.0",placemarksDesc:"No description available",foldersName:"OpenLayers export",foldersDesc:"Exported on "+new Date,extractAttributes:!0,kvpAttributes:!1,extractStyles:!1,extractTracks:!1,trackAttributes:null,internalns:null,features:null,styles:null,styleBaseUrl:"",fetched:null,maxDepth:0,initialize:function(a){this.regExes=
  182. {trimSpace:/^\s*|\s*$/g,removeSpace:/\s*/g,splitSpace:/\s+/,trimComma:/\s*,\s*/g,kmlColor:/(\w{2})(\w{2})(\w{2})(\w{2})/,kmlIconPalette:/root:\/\/icons\/palette-(\d+)(\.\w+)/,straightBracket:/\$\[(.*?)\]/g};this.externalProjection=new OpenLayers.Projection("EPSG:4326");OpenLayers.Format.XML.prototype.initialize.apply(this,[a])},read:function(a){this.features=[];this.styles={};this.fetched={};return this.parseData(a,{depth:0,styleBaseUrl:this.styleBaseUrl})},parseData:function(a,b){"string"==typeof a&&
  183. (a=OpenLayers.Format.XML.prototype.read.apply(this,[a]));for(var c=["Link","NetworkLink","Style","StyleMap","Placemark"],d=0,e=c.length;d<e;++d){var f=c[d],g=this.getElementsByTagNameNS(a,"*",f);if(0!=g.length)switch(f.toLowerCase()){case "link":case "networklink":this.parseLinks(g,b);break;case "style":this.extractStyles&&this.parseStyles(g,b);break;case "stylemap":this.extractStyles&&this.parseStyleMaps(g,b);break;case "placemark":this.parseFeatures(g,b)}}return this.features},parseLinks:function(a,
  184. b){if(b.depth>=this.maxDepth)return!1;var c=OpenLayers.Util.extend({},b);c.depth++;for(var d=0,e=a.length;d<e;d++){var f=this.parseProperty(a[d],"*","href");f&&!this.fetched[f]&&(this.fetched[f]=!0,(f=this.fetchLink(f))&&this.parseData(f,c))}},fetchLink:function(a){if(a=OpenLayers.Request.GET({url:a,async:!1}))return a.responseText},parseStyles:function(a,b){for(var c=0,d=a.length;c<d;c++){var e=this.parseStyle(a[c]);e&&(this.styles[(b.styleBaseUrl||"")+"#"+e.id]=e)}},parseKmlColor:function(a){var b=
  185. null;a&&(a=a.match(this.regExes.kmlColor))&&(b={color:"#"+a[4]+a[3]+a[2],opacity:parseInt(a[1],16)/255});return b},parseStyle:function(a){for(var b={},c=["LineStyle","PolyStyle","IconStyle","BalloonStyle","LabelStyle"],d,e,f=0,g=c.length;f<g;++f)if(d=c[f],e=this.getElementsByTagNameNS(a,"*",d)[0])switch(d.toLowerCase()){case "linestyle":d=this.parseProperty(e,"*","color");if(d=this.parseKmlColor(d))b.strokeColor=d.color,b.strokeOpacity=d.opacity;(d=this.parseProperty(e,"*","width"))&&(b.strokeWidth=
  186. d);break;case "polystyle":d=this.parseProperty(e,"*","color");if(d=this.parseKmlColor(d))b.fillOpacity=d.opacity,b.fillColor=d.color;"0"==this.parseProperty(e,"*","fill")&&(b.fillColor="none");"0"==this.parseProperty(e,"*","outline")&&(b.strokeWidth="0");break;case "iconstyle":var h=parseFloat(this.parseProperty(e,"*","scale")||1);d=32*h;var i=32*h,j=this.getElementsByTagNameNS(e,"*","Icon")[0];if(j){var k=this.parseProperty(j,"*","href");if(k){var l=this.parseProperty(j,"*","w"),m=this.parseProperty(j,
  187. "*","h");OpenLayers.String.startsWith(k,"http://maps.google.com/mapfiles/kml")&&(!l&&!m)&&(m=l=64,h/=2);l=l||m;m=m||l;l&&(d=parseInt(l)*h);m&&(i=parseInt(m)*h);if(m=k.match(this.regExes.kmlIconPalette))l=m[1],m=m[2],k=this.parseProperty(j,"*","x"),j=this.parseProperty(j,"*","y"),k="http://maps.google.com/mapfiles/kml/pal"+l+"/icon"+(8*(j?7-j/32:7)+(k?k/32:0))+m;b.graphicOpacity=1;b.externalGraphic=k}}if(e=this.getElementsByTagNameNS(e,"*","hotSpot")[0])k=parseFloat(e.getAttribute("x")),j=parseFloat(e.getAttribute("y")),
  188. l=e.getAttribute("xunits"),"pixels"==l?b.graphicXOffset=-k*h:"insetPixels"==l?b.graphicXOffset=-d+k*h:"fraction"==l&&(b.graphicXOffset=-d*k),e=e.getAttribute("yunits"),"pixels"==e?b.graphicYOffset=-i+j*h+1:"insetPixels"==e?b.graphicYOffset=-(j*h)+1:"fraction"==e&&(b.graphicYOffset=-i*(1-j)+1);b.graphicWidth=d;b.graphicHeight=i;break;case "balloonstyle":(e=OpenLayers.Util.getXmlNodeValue(e))&&(b.balloonStyle=e.replace(this.regExes.straightBracket,"${$1}"));break;case "labelstyle":if(d=this.parseProperty(e,
  189. "*","color"),d=this.parseKmlColor(d))b.fontColor=d.color,b.fontOpacity=d.opacity}!b.strokeColor&&b.fillColor&&(b.strokeColor=b.fillColor);if((a=a.getAttribute("id"))&&b)b.id=a;return b},parseStyleMaps:function(a,b){for(var c=0,d=a.length;c<d;c++)for(var e=a[c],f=this.getElementsByTagNameNS(e,"*","Pair"),e=e.getAttribute("id"),g=0,h=f.length;g<h;g++){var i=f[g],j=this.parseProperty(i,"*","key");(i=this.parseProperty(i,"*","styleUrl"))&&"normal"==j&&(this.styles[(b.styleBaseUrl||"")+"#"+e]=this.styles[(b.styleBaseUrl||
  190. "")+i])}},parseFeatures:function(a,b){for(var c=[],d=0,e=a.length;d<e;d++){var f=a[d],g=this.parseFeature.apply(this,[f]);if(g){this.extractStyles&&(g.attributes&&g.attributes.styleUrl)&&(g.style=this.getStyle(g.attributes.styleUrl,b));if(this.extractStyles){var h=this.getElementsByTagNameNS(f,"*","Style")[0];if(h&&(h=this.parseStyle(h)))g.style=OpenLayers.Util.extend(g.style,h)}if(this.extractTracks){if((f=this.getElementsByTagNameNS(f,this.namespaces.gx,"Track"))&&0<f.length)g={features:[],feature:g},
  191. this.readNode(f[0],g),0<g.features.length&&c.push.apply(c,g.features)}else c.push(g)}else throw"Bad Placemark: "+d;}this.features=this.features.concat(c)},readers:{kml:{when:function(a,b){b.whens.push(OpenLayers.Date.parse(this.getChildValue(a)))},_trackPointAttribute:function(a,b){var c=a.nodeName.split(":").pop();b.attributes[c].push(this.getChildValue(a))}},gx:{Track:function(a,b){var c={whens:[],points:[],angles:[]};if(this.trackAttributes){var d;c.attributes={};for(var e=0,f=this.trackAttributes.length;e<
  192. f;++e)d=this.trackAttributes[e],c.attributes[d]=[],d in this.readers.kml||(this.readers.kml[d]=this.readers.kml._trackPointAttribute)}this.readChildNodes(a,c);if(c.whens.length!==c.points.length)throw Error("gx:Track with unequal number of when ("+c.whens.length+") and gx:coord ("+c.points.length+") elements.");var g=0<c.angles.length;if(g&&c.whens.length!==c.angles.length)throw Error("gx:Track with unequal number of when ("+c.whens.length+") and gx:angles ("+c.angles.length+") elements.");for(var h,
  193. i,e=0,f=c.whens.length;e<f;++e){h=b.feature.clone();h.fid=b.feature.fid||b.feature.id;i=c.points[e];h.geometry=i;"z"in i&&(h.attributes.altitude=i.z);this.internalProjection&&this.externalProjection&&h.geometry.transform(this.externalProjection,this.internalProjection);if(this.trackAttributes){i=0;for(var j=this.trackAttributes.length;i<j;++i)h.attributes[d]=c.attributes[this.trackAttributes[i]][e]}h.attributes.when=c.whens[e];h.attributes.trackId=b.feature.id;g&&(i=c.angles[e],h.attributes.heading=
  194. parseFloat(i[0]),h.attributes.tilt=parseFloat(i[1]),h.attributes.roll=parseFloat(i[2]));b.features.push(h)}},coord:function(a,b){var c=this.getChildValue(a).replace(this.regExes.trimSpace,"").split(/\s+/),d=new OpenLayers.Geometry.Point(c[0],c[1]);2<c.length&&(d.z=parseFloat(c[2]));b.points.push(d)},angles:function(a,b){var c=this.getChildValue(a).replace(this.regExes.trimSpace,"").split(/\s+/);b.angles.push(c)}}},parseFeature:function(a){for(var b=["MultiGeometry","Polygon","LineString","Point"],
  195. c,d,e,f=0,g=b.length;f<g;++f)if(c=b[f],this.internalns=a.namespaceURI?a.namespaceURI:this.kmlns,d=this.getElementsByTagNameNS(a,this.internalns,c),0<d.length){if(b=this.parseGeometry[c.toLowerCase()])e=b.apply(this,[d[0]]),this.internalProjection&&this.externalProjection&&e.transform(this.externalProjection,this.internalProjection);else throw new TypeError("Unsupported geometry type: "+c);break}var h;this.extractAttributes&&(h=this.parseAttributes(a));c=new OpenLayers.Feature.Vector(e,h);a=a.getAttribute("id")||
  196. a.getAttribute("name");null!=a&&(c.fid=a);return c},getStyle:function(a,b){var c=OpenLayers.Util.removeTail(a),d=OpenLayers.Util.extend({},b);d.depth++;d.styleBaseUrl=c;!this.styles[a]&&!OpenLayers.String.startsWith(a,"#")&&d.depth<=this.maxDepth&&!this.fetched[c]&&(c=this.fetchLink(c))&&this.parseData(c,d);return OpenLayers.Util.extend({},this.styles[a])},parseGeometry:{point:function(a){var b=this.getElementsByTagNameNS(a,this.internalns,"coordinates"),a=[];if(0<b.length)var c=b[0].firstChild.nodeValue,
  197. c=c.replace(this.regExes.removeSpace,""),a=c.split(",");b=null;if(1<a.length)2==a.length&&(a[2]=null),b=new OpenLayers.Geometry.Point(a[0],a[1],a[2]);else throw"Bad coordinate string: "+c;return b},linestring:function(a,b){var c=this.getElementsByTagNameNS(a,this.internalns,"coordinates"),d=null;if(0<c.length){for(var c=this.getChildValue(c[0]),c=c.replace(this.regExes.trimSpace,""),c=c.replace(this.regExes.trimComma,","),d=c.split(this.regExes.splitSpace),e=d.length,f=Array(e),g,h,i=0;i<e;++i)if(g=
  198. d[i].split(","),h=g.length,1<h)2==g.length&&(g[2]=null),f[i]=new OpenLayers.Geometry.Point(g[0],g[1],g[2]);else throw"Bad LineString point coordinates: "+d[i];if(e)d=b?new OpenLayers.Geometry.LinearRing(f):new OpenLayers.Geometry.LineString(f);else throw"Bad LineString coordinates: "+c;}return d},polygon:function(a){var a=this.getElementsByTagNameNS(a,this.internalns,"LinearRing"),b=a.length,c=Array(b);if(0<b)for(var d=0,e=a.length;d<e;++d)if(b=this.parseGeometry.linestring.apply(this,[a[d],!0]))c[d]=
  199. b;else throw"Bad LinearRing geometry: "+d;return new OpenLayers.Geometry.Polygon(c)},multigeometry:function(a){for(var b,c=[],d=a.childNodes,e=0,f=d.length;e<f;++e)a=d[e],1==a.nodeType&&(b=this.parseGeometry[(a.prefix?a.nodeName.split(":")[1]:a.nodeName).toLowerCase()])&&c.push(b.apply(this,[a]));return new OpenLayers.Geometry.Collection(c)}},parseAttributes:function(a){var b={},c=a.getElementsByTagName("ExtendedData");c.length&&(b=this.parseExtendedData(c[0]));for(var d,e,f,a=a.childNodes,c=0,g=
  200. a.length;c<g;++c)if(d=a[c],1==d.nodeType&&(e=d.childNodes,1<=e.length&&3>=e.length)){switch(e.length){case 1:f=e[0];break;case 2:f=e[0];e=e[1];f=3==f.nodeType||4==f.nodeType?f:e;break;default:f=e[1]}if(3==f.nodeType||4==f.nodeType)if(d=d.prefix?d.nodeName.split(":")[1]:d.nodeName,f=OpenLayers.Util.getXmlNodeValue(f))f=f.replace(this.regExes.trimSpace,""),b[d]=f}return b},parseExtendedData:function(a){var b={},c,d,e,f,g=a.getElementsByTagName("Data");c=0;for(d=g.length;c<d;c++){e=g[c];f=e.getAttribute("name");
  201. var h={},i=e.getElementsByTagName("value");i.length&&(h.value=this.getChildValue(i[0]));this.kvpAttributes?b[f]=h.value:(e=e.getElementsByTagName("displayName"),e.length&&(h.displayName=this.getChildValue(e[0])),b[f]=h)}a=a.getElementsByTagName("SimpleData");c=0;for(d=a.length;c<d;c++)h={},e=a[c],f=e.getAttribute("name"),h.value=this.getChildValue(e),this.kvpAttributes?b[f]=h.value:(h.displayName=f,b[f]=h);return b},parseProperty:function(a,b,c){var d,a=this.getElementsByTagNameNS(a,b,c);try{d=OpenLayers.Util.getXmlNodeValue(a[0])}catch(e){d=
  202. null}return d},write:function(a){OpenLayers.Util.isArray(a)||(a=[a]);for(var b=this.createElementNS(this.kmlns,"kml"),c=this.createFolderXML(),d=0,e=a.length;d<e;++d)c.appendChild(this.createPlacemarkXML(a[d]));b.appendChild(c);return OpenLayers.Format.XML.prototype.write.apply(this,[b])},createFolderXML:function(){var a=this.createElementNS(this.kmlns,"Folder");if(this.foldersName){var b=this.createElementNS(this.kmlns,"name"),c=this.createTextNode(this.foldersName);b.appendChild(c);a.appendChild(b)}this.foldersDesc&&
  203. (b=this.createElementNS(this.kmlns,"description"),c=this.createTextNode(this.foldersDesc),b.appendChild(c),a.appendChild(b));return a},createPlacemarkXML:function(a){var b=this.createElementNS(this.kmlns,"name");b.appendChild(this.createTextNode(a.style&&a.style.label?a.style.label:a.attributes.name||a.id));var c=this.createElementNS(this.kmlns,"description");c.appendChild(this.createTextNode(a.attributes.description||this.placemarksDesc));var d=this.createElementNS(this.kmlns,"Placemark");null!=
  204. a.fid&&d.setAttribute("id",a.fid);d.appendChild(b);d.appendChild(c);b=this.buildGeometryNode(a.geometry);d.appendChild(b);a.attributes&&(a=this.buildExtendedData(a.attributes))&&d.appendChild(a);return d},buildGeometryNode:function(a){var b=a.CLASS_NAME,b=this.buildGeometry[b.substring(b.lastIndexOf(".")+1).toLowerCase()],c=null;b&&(c=b.apply(this,[a]));return c},buildGeometry:{point:function(a){var b=this.createElementNS(this.kmlns,"Point");b.appendChild(this.buildCoordinatesNode(a));return b},multipoint:function(a){return this.buildGeometry.collection.apply(this,
  205. [a])},linestring:function(a){var b=this.createElementNS(this.kmlns,"LineString");b.appendChild(this.buildCoordinatesNode(a));return b},multilinestring:function(a){return this.buildGeometry.collection.apply(this,[a])},linearring:function(a){var b=this.createElementNS(this.kmlns,"LinearRing");b.appendChild(this.buildCoordinatesNode(a));return b},polygon:function(a){for(var b=this.createElementNS(this.kmlns,"Polygon"),a=a.components,c,d,e=0,f=a.length;e<f;++e)c=0==e?"outerBoundaryIs":"innerBoundaryIs",
  206. c=this.createElementNS(this.kmlns,c),d=this.buildGeometry.linearring.apply(this,[a[e]]),c.appendChild(d),b.appendChild(c);return b},multipolygon:function(a){return this.buildGeometry.collection.apply(this,[a])},collection:function(a){for(var b=this.createElementNS(this.kmlns,"MultiGeometry"),c,d=0,e=a.components.length;d<e;++d)(c=this.buildGeometryNode.apply(this,[a.components[d]]))&&b.appendChild(c);return b}},buildCoordinatesNode:function(a){var b=this.createElementNS(this.kmlns,"coordinates"),
  207. c;if(c=a.components){for(var d=c.length,e=Array(d),f=0;f<d;++f)a=c[f],e[f]=this.buildCoordinates(a);c=e.join(" ")}else c=this.buildCoordinates(a);c=this.createTextNode(c);b.appendChild(c);return b},buildCoordinates:function(a){this.internalProjection&&this.externalProjection&&(a=a.clone(),a.transform(this.internalProjection,this.externalProjection));return a.x+","+a.y},buildExtendedData:function(a){var b=this.createElementNS(this.kmlns,"ExtendedData"),c;for(c in a)if(a[c]&&"name"!=c&&"description"!=
  208. c&&"styleUrl"!=c){var d=this.createElementNS(this.kmlns,"Data");d.setAttribute("name",c);var e=this.createElementNS(this.kmlns,"value");if("object"==typeof a[c]){if(a[c].value&&e.appendChild(this.createTextNode(a[c].value)),a[c].displayName){var f=this.createElementNS(this.kmlns,"displayName");f.appendChild(this.getXMLDoc().createCDATASection(a[c].displayName));d.appendChild(f)}}else e.appendChild(this.createTextNode(a[c]));d.appendChild(e);b.appendChild(d)}return this.isSimpleContent(b)?null:b},
  209. CLASS_NAME:"OpenLayers.Format.KML"});
  210.  
  211. _kml = `<?xml version="1.0" encoding="UTF-8"?>
  212. <kml xmlns="http://www.opengis.net/kml/2.2">
  213. <Document>
  214. <name>SC Midlands Mapraid</name>
  215. <description/>
  216. <Style id="poly-000000-1200-77-nodesc-normal">
  217. <LineStyle>
  218. <color>ff000000</color>
  219. <width>1.2</width>
  220. </LineStyle>
  221. <PolyStyle>
  222. <color>4d000000</color>
  223. <fill>1</fill>
  224. <outline>1</outline>
  225. </PolyStyle>
  226. <BalloonStyle>
  227. <text><![CDATA[<h3>$[name]</h3>]]></text>
  228. </BalloonStyle>
  229. </Style>
  230. <Style id="poly-000000-1200-77-nodesc-highlight">
  231. <LineStyle>
  232. <color>ff000000</color>
  233. <width>1.8</width>
  234. </LineStyle>
  235. <PolyStyle>
  236. <color>4d000000</color>
  237. <fill>1</fill>
  238. <outline>1</outline>
  239. </PolyStyle>
  240. <BalloonStyle>
  241. <text><![CDATA[<h3>$[name]</h3>]]></text>
  242. </BalloonStyle>
  243. </Style>
  244. <StyleMap id="poly-000000-1200-77-nodesc">
  245. <Pair>
  246. <key>normal</key>
  247. <styleUrl>#poly-000000-1200-77-nodesc-normal</styleUrl>
  248. </Pair>
  249. <Pair>
  250. <key>highlight</key>
  251. <styleUrl>#poly-000000-1200-77-nodesc-highlight</styleUrl>
  252. </Pair>
  253. </StyleMap>
  254. <Style id="poly-0288D1-1200-77-nodesc-normal">
  255. <LineStyle>
  256. <color>ffd18802</color>
  257. <width>1.2</width>
  258. </LineStyle>
  259. <PolyStyle>
  260. <color>4dd18802</color>
  261. <fill>1</fill>
  262. <outline>1</outline>
  263. </PolyStyle>
  264. <BalloonStyle>
  265. <text><![CDATA[<h3>$[name]</h3>]]></text>
  266. </BalloonStyle>
  267. </Style>
  268. <Style id="poly-0288D1-1200-77-nodesc-highlight">
  269. <LineStyle>
  270. <color>ffd18802</color>
  271. <width>1.8</width>
  272. </LineStyle>
  273. <PolyStyle>
  274. <color>4dd18802</color>
  275. <fill>1</fill>
  276. <outline>1</outline>
  277. </PolyStyle>
  278. <BalloonStyle>
  279. <text><![CDATA[<h3>$[name]</h3>]]></text>
  280. </BalloonStyle>
  281. </Style>
  282. <StyleMap id="poly-0288D1-1200-77-nodesc">
  283. <Pair>
  284. <key>normal</key>
  285. <styleUrl>#poly-0288D1-1200-77-nodesc-normal</styleUrl>
  286. </Pair>
  287. <Pair>
  288. <key>highlight</key>
  289. <styleUrl>#poly-0288D1-1200-77-nodesc-highlight</styleUrl>
  290. </Pair>
  291. </StyleMap>
  292. <Style id="poly-0F9D58-1200-77-nodesc-normal">
  293. <LineStyle>
  294. <color>ff589d0f</color>
  295. <width>1.2</width>
  296. </LineStyle>
  297. <PolyStyle>
  298. <color>4d589d0f</color>
  299. <fill>1</fill>
  300. <outline>1</outline>
  301. </PolyStyle>
  302. <BalloonStyle>
  303. <text><![CDATA[<h3>$[name]</h3>]]></text>
  304. </BalloonStyle>
  305. </Style>
  306. <Style id="poly-0F9D58-1200-77-nodesc-highlight">
  307. <LineStyle>
  308. <color>ff589d0f</color>
  309. <width>1.8</width>
  310. </LineStyle>
  311. <PolyStyle>
  312. <color>4d589d0f</color>
  313. <fill>1</fill>
  314. <outline>1</outline>
  315. </PolyStyle>
  316. <BalloonStyle>
  317. <text><![CDATA[<h3>$[name]</h3>]]></text>
  318. </BalloonStyle>
  319. </Style>
  320. <StyleMap id="poly-0F9D58-1200-77-nodesc">
  321. <Pair>
  322. <key>normal</key>
  323. <styleUrl>#poly-0F9D58-1200-77-nodesc-normal</styleUrl>
  324. </Pair>
  325. <Pair>
  326. <key>highlight</key>
  327. <styleUrl>#poly-0F9D58-1200-77-nodesc-highlight</styleUrl>
  328. </Pair>
  329. </StyleMap>
  330. <Style id="poly-1A237E-3301-117-nodesc-normal">
  331. <LineStyle>
  332. <color>ff7e231a</color>
  333. <width>3.301</width>
  334. </LineStyle>
  335. <PolyStyle>
  336. <color>757e231a</color>
  337. <fill>1</fill>
  338. <outline>1</outline>
  339. </PolyStyle>
  340. <BalloonStyle>
  341. <text><![CDATA[<h3>$[name]</h3>]]></text>
  342. </BalloonStyle>
  343. </Style>
  344. <Style id="poly-1A237E-3301-117-nodesc-highlight">
  345. <LineStyle>
  346. <color>ff7e231a</color>
  347. <width>4.9515</width>
  348. </LineStyle>
  349. <PolyStyle>
  350. <color>757e231a</color>
  351. <fill>1</fill>
  352. <outline>1</outline>
  353. </PolyStyle>
  354. <BalloonStyle>
  355. <text><![CDATA[<h3>$[name]</h3>]]></text>
  356. </BalloonStyle>
  357. </Style>
  358. <StyleMap id="poly-1A237E-3301-117-nodesc">
  359. <Pair>
  360. <key>normal</key>
  361. <styleUrl>#poly-1A237E-3301-117-nodesc-normal</styleUrl>
  362. </Pair>
  363. <Pair>
  364. <key>highlight</key>
  365. <styleUrl>#poly-1A237E-3301-117-nodesc-highlight</styleUrl>
  366. </Pair>
  367. </StyleMap>
  368. <Style id="poly-9C27B0-1200-77-nodesc-normal">
  369. <LineStyle>
  370. <color>ffb0279c</color>
  371. <width>1.2</width>
  372. </LineStyle>
  373. <PolyStyle>
  374. <color>4db0279c</color>
  375. <fill>1</fill>
  376. <outline>1</outline>
  377. </PolyStyle>
  378. <BalloonStyle>
  379. <text><![CDATA[<h3>$[name]</h3>]]></text>
  380. </BalloonStyle>
  381. </Style>
  382. <Style id="poly-9C27B0-1200-77-nodesc-highlight">
  383. <LineStyle>
  384. <color>ffb0279c</color>
  385. <width>1.8</width>
  386. </LineStyle>
  387. <PolyStyle>
  388. <color>4db0279c</color>
  389. <fill>1</fill>
  390. <outline>1</outline>
  391. </PolyStyle>
  392. <BalloonStyle>
  393. <text><![CDATA[<h3>$[name]</h3>]]></text>
  394. </BalloonStyle>
  395. </Style>
  396. <StyleMap id="poly-9C27B0-1200-77-nodesc">
  397. <Pair>
  398. <key>normal</key>
  399. <styleUrl>#poly-9C27B0-1200-77-nodesc-normal</styleUrl>
  400. </Pair>
  401. <Pair>
  402. <key>highlight</key>
  403. <styleUrl>#poly-9C27B0-1200-77-nodesc-highlight</styleUrl>
  404. </Pair>
  405. </StyleMap>
  406. <Style id="poly-F9A825-1200-77-nodesc-normal">
  407. <LineStyle>
  408. <color>ff25a8f9</color>
  409. <width>1.2</width>
  410. </LineStyle>
  411. <PolyStyle>
  412. <color>4d25a8f9</color>
  413. <fill>1</fill>
  414. <outline>1</outline>
  415. </PolyStyle>
  416. <BalloonStyle>
  417. <text><![CDATA[<h3>$[name]</h3>]]></text>
  418. </BalloonStyle>
  419. </Style>
  420. <Style id="poly-F9A825-1200-77-nodesc-highlight">
  421. <LineStyle>
  422. <color>ff25a8f9</color>
  423. <width>1.8</width>
  424. </LineStyle>
  425. <PolyStyle>
  426. <color>4d25a8f9</color>
  427. <fill>1</fill>
  428. <outline>1</outline>
  429. </PolyStyle>
  430. <BalloonStyle>
  431. <text><![CDATA[<h3>$[name]</h3>]]></text>
  432. </BalloonStyle>
  433. </Style>
  434. <StyleMap id="poly-F9A825-1200-77-nodesc">
  435. <Pair>
  436. <key>normal</key>
  437. <styleUrl>#poly-F9A825-1200-77-nodesc-normal</styleUrl>
  438. </Pair>
  439. <Pair>
  440. <key>highlight</key>
  441. <styleUrl>#poly-F9A825-1200-77-nodesc-highlight</styleUrl>
  442. </Pair>
  443. </StyleMap>
  444. <Style id="poly-FF5252-1200-77-nodesc-normal">
  445. <LineStyle>
  446. <color>ff5252ff</color>
  447. <width>1.2</width>
  448. </LineStyle>
  449. <PolyStyle>
  450. <color>4d5252ff</color>
  451. <fill>1</fill>
  452. <outline>1</outline>
  453. </PolyStyle>
  454. <BalloonStyle>
  455. <text><![CDATA[<h3>$[name]</h3>]]></text>
  456. </BalloonStyle>
  457. </Style>
  458. <Style id="poly-FF5252-1200-77-nodesc-highlight">
  459. <LineStyle>
  460. <color>ff5252ff</color>
  461. <width>1.8</width>
  462. </LineStyle>
  463. <PolyStyle>
  464. <color>4d5252ff</color>
  465. <fill>1</fill>
  466. <outline>1</outline>
  467. </PolyStyle>
  468. <BalloonStyle>
  469. <text><![CDATA[<h3>$[name]</h3>]]></text>
  470. </BalloonStyle>
  471. </Style>
  472. <StyleMap id="poly-FF5252-1200-77-nodesc">
  473. <Pair>
  474. <key>normal</key>
  475. <styleUrl>#poly-FF5252-1200-77-nodesc-normal</styleUrl>
  476. </Pair>
  477. <Pair>
  478. <key>highlight</key>
  479. <styleUrl>#poly-FF5252-1200-77-nodesc-highlight</styleUrl>
  480. </Pair>
  481. </StyleMap>
  482. <Style id="poly-FFEA00-1200-77-nodesc-normal">
  483. <LineStyle>
  484. <color>ff00eaff</color>
  485. <width>1.2</width>
  486. </LineStyle>
  487. <PolyStyle>
  488. <color>4d00eaff</color>
  489. <fill>1</fill>
  490. <outline>1</outline>
  491. </PolyStyle>
  492. <BalloonStyle>
  493. <text><![CDATA[<h3>$[name]</h3>]]></text>
  494. </BalloonStyle>
  495. </Style>
  496. <Style id="poly-FFEA00-1200-77-nodesc-highlight">
  497. <LineStyle>
  498. <color>ff00eaff</color>
  499. <width>1.8</width>
  500. </LineStyle>
  501. <PolyStyle>
  502. <color>4d00eaff</color>
  503. <fill>1</fill>
  504. <outline>1</outline>
  505. </PolyStyle>
  506. <BalloonStyle>
  507. <text><![CDATA[<h3>$[name]</h3>]]></text>
  508. </BalloonStyle>
  509. </Style>
  510. <StyleMap id="poly-FFEA00-1200-77-nodesc">
  511. <Pair>
  512. <key>normal</key>
  513. <styleUrl>#poly-FFEA00-1200-77-nodesc-normal</styleUrl>
  514. </Pair>
  515. <Pair>
  516. <key>highlight</key>
  517. <styleUrl>#poly-FFEA00-1200-77-nodesc-highlight</styleUrl>
  518. </Pair>
  519. </StyleMap>
  520. <Folder>
  521. <name>Individual Areas</name>
  522. <Placemark>
  523. <name>Group 7A Fort Jackson</name>
  524. <styleUrl>#poly-F9A825-1200-77-nodesc</styleUrl>
  525. <Polygon>
  526. <outerBoundaryIs>
  527. <LinearRing>
  528. <tessellate>1</tessellate>
  529. <coordinates>
  530. -80.9292841,33.9784208,0
  531. -80.9218812,33.9830115,0
  532. -80.9155512,33.980218,0
  533. -80.9137058,33.9805205,0
  534. -80.8927631,33.9850043,0
  535. -80.8689022,33.9915516,0
  536. -80.7671928,34.0055697,0
  537. -80.7063389,34.0083446,0
  538. -80.7044506,34.0096965,0
  539. -80.7039356,34.0612636,0
  540. -80.7071114,34.0626857,0
  541. -80.7132053,34.063539,0
  542. -80.7239342,34.0675207,0
  543. -80.7299423,34.0717155,0
  544. -80.7350063,34.0773675,0
  545. -80.7418299,34.0814552,0
  546. -80.7494259,34.0838011,0
  547. -80.7529449,34.0833035,0
  548. -80.7550049,34.08373,0
  549. -80.7614422,34.0891324,0
  550. -80.7652187,34.0938948,0
  551. -80.766592,34.0972354,0
  552. -80.7699394,34.1000073,0
  553. -80.7763767,34.1025659,0
  554. -80.7837582,34.1017841,0
  555. -80.8022976,34.1029923,0
  556. -80.8059883,34.1042715,0
  557. -80.8186054,34.1044137,0
  558. -80.8816051,34.0796069,0
  559. -80.9231043,34.0520194,0
  560. -80.9237051,34.0507394,0
  561. -80.9365368,34.0414229,0
  562. -80.9381676,34.0345949,0
  563. -80.9596252,34.0003399,0
  564. -80.9593678,33.9960704,0
  565. -80.9571362,33.9960348,0
  566. -80.9553337,33.9943269,0
  567. -80.9455919,33.9939355,0
  568. -80.9429741,33.9927614,0
  569. -80.9337044,33.9797553,0
  570. -80.9312367,33.9808941,0
  571. -80.9292841,33.9784208,0
  572. </coordinates>
  573. </LinearRing>
  574. </outerBoundaryIs>
  575. </Polygon>
  576. </Placemark>
  577. <Placemark>
  578. <name>Group 7B Shaw AFB</name>
  579. <styleUrl>#poly-F9A825-1200-77-nodesc</styleUrl>
  580. <Polygon>
  581. <outerBoundaryIs>
  582. <LinearRing>
  583. <tessellate>1</tessellate>
  584. <coordinates>
  585. -80.4428387,33.9650389,0
  586. -80.4412937,33.9697015,0
  587. -80.4482031,33.9828336,0
  588. -80.4551554,33.9899148,0
  589. -80.4575586,33.9888473,0
  590. -80.4606915,33.99237,0
  591. -80.4636526,33.9894166,0
  592. -80.4800034,33.9924767,0
  593. -80.4858398,33.9967108,0
  594. -80.4902601,33.9951097,0
  595. -80.4901743,33.9916228,0
  596. -80.485754,33.9874596,0
  597. -80.4900455,33.9858939,0
  598. -80.4883289,33.9822998,0
  599. -80.4900455,33.9725843,0
  600. -80.4932213,33.9727266,0
  601. -80.4936934,33.970093,0
  602. -80.4908609,33.9698794,0
  603. -80.4924917,33.9684558,0
  604. -80.4925346,33.9657152,0
  605. -80.4910326,33.9655372,0
  606. -80.490818,33.9542891,0
  607. -80.4758406,33.9598065,0
  608. -80.4670429,33.9617643,0
  609. -80.4623222,33.9639711,0
  610. -80.4428387,33.9650389,0
  611. </coordinates>
  612. </LinearRing>
  613. </outerBoundaryIs>
  614. </Polygon>
  615. </Placemark>
  616. <Placemark>
  617. <name>Group 7C McEntyre JNGB</name>
  618. <styleUrl>#poly-F9A825-1200-77-nodesc</styleUrl>
  619. <Polygon>
  620. <outerBoundaryIs>
  621. <LinearRing>
  622. <tessellate>1</tessellate>
  623. <coordinates>
  624. -80.8191204,33.9137338,0
  625. -80.7785225,33.901909,0
  626. -80.7817841,33.9205003,0
  627. -80.7916975,33.9309695,0
  628. -80.7891655,33.93364,0
  629. -80.790925,33.9348862,0
  630. -80.7886505,33.9389452,0
  631. -80.7997656,33.9400133,0
  632. -80.8025551,33.9410814,0
  633. -80.805645,33.9441788,0
  634. -80.8098936,33.9410458,0
  635. -80.8104086,33.9333196,0
  636. -80.8171463,33.9316104,0
  637. -80.820837,33.921996,0
  638. -80.8191204,33.9137338,0
  639. </coordinates>
  640. </LinearRing>
  641. </outerBoundaryIs>
  642. </Polygon>
  643. </Placemark>
  644. <Placemark>
  645. <name>Group 1 Aiken</name>
  646. <styleUrl>#poly-FFEA00-1200-77-nodesc</styleUrl>
  647. <Polygon>
  648. <outerBoundaryIs>
  649. <LinearRing>
  650. <tessellate>1</tessellate>
  651. <coordinates>
  652. -81.0145569,33.3534733,0
  653. -81.2796021,33.6557808,0
  654. -81.8385315,33.8840974,0
  655. -81.907196,34.1356784,0
  656. -82.1763611,34.0082735,0
  657. -82.276268,33.7703005,0
  658. -82.2422791,33.7397579,0
  659. -82.1949005,33.6266268,0
  660. -82.1303558,33.5883113,0
  661. -82.1076965,33.5974628,0
  662. -82.0410919,33.5574179,0
  663. -81.9909668,33.5021825,0
  664. -81.9871902,33.4855764,0
  665. -81.9312286,33.4675352,0
  666. -81.9113159,33.4394635,0
  667. -81.9326019,33.4291492,0
  668. -81.9449615,33.3658038,0
  669. -81.9404984,33.344296,0
  670. -81.8481445,33.2653887,0
  671. -81.8526077,33.2475888,0
  672. -81.8041992,33.2114037,0
  673. -81.7671204,33.2102547,0
  674. -81.7671204,33.1582477,0
  675. -81.7025757,33.1145494,0
  676. -81.5007019,33.0144214,0
  677. -81.3935852,32.5977339,0
  678. -81.184845,32.4587911,0
  679. -81.1505127,32.2348746,0
  680. -81.0598755,32.2813277,0
  681. -80.632782,32.895732,0
  682. -81.0145569,33.3534733,0
  683. </coordinates>
  684. </LinearRing>
  685. </outerBoundaryIs>
  686. </Polygon>
  687. </Placemark>
  688. <Placemark>
  689. <name>Group 2 Lexington</name>
  690. <styleUrl>#poly-0288D1-1200-77-nodesc</styleUrl>
  691. <Polygon>
  692. <outerBoundaryIs>
  693. <LinearRing>
  694. <tessellate>1</tessellate>
  695. <coordinates>
  696. -80.6259155,34.0754124,0
  697. -80.7039356,34.0612636,0
  698. -80.7044506,34.0096965,0
  699. -80.7063389,34.0083446,0
  700. -80.7671928,34.0055697,0
  701. -80.8689022,33.9915516,0
  702. -80.8927631,33.9850043,0
  703. -80.9155512,33.980218,0
  704. -80.9218812,33.9830115,0
  705. -80.9292841,33.9784208,0
  706. -80.9312367,33.9808941,0
  707. -80.9337044,33.9797553,0
  708. -80.9379959,33.9776735,0
  709. -80.952673,33.9630812,0
  710. -80.9543896,33.9575284,0
  711. -80.9603119,33.9513345,0
  712. -80.9800529,33.9380907,0
  713. -81.0167885,33.9323938,0
  714. -81.0459709,33.9759653,0
  715. -81.0464859,33.9897725,0
  716. -81.0663986,34.0091984,0
  717. -81.0723209,34.0062101,0
  718. -81.0867405,34.0136095,0
  719. -81.0935211,34.0131115,0
  720. -81.0993576,34.0236405,0
  721. -81.1251068,34.0244941,0
  722. -81.1566925,34.0347371,0
  723. -81.1611557,34.0415651,0
  724. -81.1738586,34.0475392,0
  725. -81.1865616,34.0449789,0
  726. -81.2147141,34.0535128,0
  727. -81.2363434,34.0498149,0
  728. -81.282692,34.0694404,0
  729. -81.3918686,34.0665964,0
  730. -81.4213943,34.0808154,0
  731. -81.442337,34.0765499,0
  732. -81.4677429,34.0873553,0
  733. -81.475296,34.0779718,0
  734. -81.4831924,34.0808154,0
  735. -81.5058517,34.0745593,0
  736. -81.5116882,34.0816684,0
  737. -81.5274811,34.0842276,0
  738. -81.5415573,34.0802467,0
  739. -81.5473938,34.0924732,0
  740. -81.5734863,34.1004337,0
  741. -81.5885925,34.1169209,0
  742. -81.907196,34.1356784,0
  743. -81.8385315,33.8840974,0
  744. -81.2796021,33.6557808,0
  745. -80.632782,32.895732,0
  746. -80.4116821,33.4933073,0
  747. -80.4398144,33.9946116,0
  748. -80.6259155,34.0754124,0
  749. </coordinates>
  750. </LinearRing>
  751. </outerBoundaryIs>
  752. </Polygon>
  753. </Placemark>
  754. <Placemark>
  755. <name>Group 3 Columbia-Harbison</name>
  756. <styleUrl>#poly-FF5252-1200-77-nodesc</styleUrl>
  757. <Polygon>
  758. <outerBoundaryIs>
  759. <LinearRing>
  760. <tessellate>1</tessellate>
  761. <coordinates>
  762. -80.9218597,34.067734,0
  763. -80.9260654,34.067734,0
  764. -80.9428024,34.0736351,0
  765. -80.9636593,34.0742038,0
  766. -80.9742165,34.0727819,0
  767. -81.0032272,34.0738484,0
  768. -81.0080338,34.073564,0
  769. -81.0214233,34.0662409,0
  770. -81.0379887,34.0663831,0
  771. -81.0439968,34.0648188,0
  772. -81.0537815,34.0565705,0
  773. -81.0734367,34.0479659,0
  774. -81.088028,34.0775452,0
  775. -81.1045074,34.0894878,0
  776. -81.149826,34.1578409,0
  777. -81.3317871,34.2572164,0
  778. -81.4196777,34.4488212,0
  779. -81.4251709,34.5699064,0
  780. -81.5570068,34.5846057,0
  781. -81.9030762,34.4001112,0
  782. -81.907196,34.1356784,0
  783. -81.5885925,34.1169209,0
  784. -81.5734863,34.1004337,0
  785. -81.5473938,34.0924732,0
  786. -81.5415573,34.0802467,0
  787. -81.5274811,34.0842276,0
  788. -81.5116882,34.0816684,0
  789. -81.5058517,34.0745593,0
  790. -81.4831924,34.0808154,0
  791. -81.475296,34.0779718,0
  792. -81.4677429,34.0873553,0
  793. -81.442337,34.0765499,0
  794. -81.4213943,34.0808154,0
  795. -81.3918686,34.0665964,0
  796. -81.282692,34.0694404,0
  797. -81.2363434,34.0498149,0
  798. -81.2147141,34.0535128,0
  799. -81.1865616,34.0449789,0
  800. -81.1738586,34.0475392,0
  801. -81.1611557,34.0415651,0
  802. -81.1566925,34.0347371,0
  803. -81.1251068,34.0244941,0
  804. -81.0993576,34.0236405,0
  805. -81.0935211,34.0131115,0
  806. -81.0867405,34.0136095,0
  807. -81.0723209,34.0062101,0
  808. -81.0663986,34.0091984,0
  809. -81.0464859,33.9897725,0
  810. -81.0459709,33.9759653,0
  811. -81.0167885,33.9323938,0
  812. -80.9800529,33.9380907,0
  813. -80.9603119,33.9513345,0
  814. -80.9543896,33.9575284,0
  815. -80.952673,33.9630812,0
  816. -80.9379959,33.9776735,0
  817. -80.9337044,33.9797553,0
  818. -80.9429741,33.9927614,0
  819. -80.9455919,33.9939355,0
  820. -80.9553337,33.9943269,0
  821. -80.9571362,33.9960348,0
  822. -80.9593678,33.9960704,0
  823. -80.9596252,34.0003399,0
  824. -80.9381676,34.0345949,0
  825. -80.9365368,34.0414229,0
  826. -80.9237051,34.0507394,0
  827. -80.9231043,34.0520194,0
  828. -80.9218597,34.067734,0
  829. </coordinates>
  830. </LinearRing>
  831. </outerBoundaryIs>
  832. </Polygon>
  833. </Placemark>
  834. <Placemark>
  835. <name>Group 4 Columbia-Camden</name>
  836. <styleUrl>#poly-9C27B0-1200-77-nodesc</styleUrl>
  837. <Polygon>
  838. <outerBoundaryIs>
  839. <LinearRing>
  840. <tessellate>1</tessellate>
  841. <coordinates>
  842. -81.0015106,34.5382375,0
  843. -81.0063171,34.3210388,0
  844. -80.9967041,34.2986356,0
  845. -81.0001373,34.2433109,0
  846. -81.149826,34.1578409,0
  847. -81.1045074,34.0894878,0
  848. -81.088028,34.0775452,0
  849. -81.0734367,34.0479659,0
  850. -81.0537815,34.0565705,0
  851. -81.0439968,34.0648188,0
  852. -81.0379887,34.0663831,0
  853. -81.0214233,34.0662409,0
  854. -81.0080338,34.073564,0
  855. -81.0032272,34.0738484,0
  856. -80.9742165,34.0727819,0
  857. -80.9636593,34.0742038,0
  858. -80.9428024,34.0736351,0
  859. -80.9260654,34.067734,0
  860. -80.9218597,34.067734,0
  861. -80.9231043,34.0520194,0
  862. -80.8816051,34.0796069,0
  863. -80.8186054,34.1044137,0
  864. -80.8059883,34.1042715,0
  865. -80.8022976,34.1029923,0
  866. -80.7837582,34.1017841,0
  867. -80.7763767,34.1025659,0
  868. -80.7699394,34.1000073,0
  869. -80.766592,34.0972354,0
  870. -80.7652187,34.0938948,0
  871. -80.7614422,34.0891324,0
  872. -80.7550049,34.08373,0
  873. -80.7529449,34.0833035,0
  874. -80.7494259,34.0838011,0
  875. -80.7418299,34.0814552,0
  876. -80.7350063,34.0773675,0
  877. -80.7299423,34.0717155,0
  878. -80.7239342,34.0675207,0
  879. -80.7132053,34.063539,0
  880. -80.7071114,34.0626857,0
  881. -80.7039356,34.0612636,0
  882. -80.6259155,34.0754124,0
  883. -80.4398144,33.9946116,0
  884. -79.887085,33.9296876,0
  885. -79.8184204,34.2980684,0
  886. -80.0271606,34.4250361,0
  887. -81.0015106,34.5382375,0
  888. </coordinates>
  889. </LinearRing>
  890. </outerBoundaryIs>
  891. </Polygon>
  892. </Placemark>
  893. <Placemark>
  894. <name>Group 5 Rock Hill</name>
  895. <styleUrl>#poly-0F9D58-1200-77-nodesc</styleUrl>
  896. <Polygon>
  897. <outerBoundaryIs>
  898. <LinearRing>
  899. <tessellate>1</tessellate>
  900. <coordinates>
  901. -81.0384178,34.7906866,0
  902. -81.0303497,34.8318411,0
  903. -81.0052872,34.8597356,0
  904. -80.9994507,34.8836779,0
  905. -80.9706116,34.9363264,0
  906. -80.988636,34.9792366,0
  907. -80.9834862,34.9875347,0
  908. -80.9939575,34.9911912,0
  909. -80.9996223,35.0062374,0
  910. -80.9967041,35.0115803,0
  911. -81.0143852,35.0250764,0
  912. -81.0301781,35.0193127,0
  913. -81.0415077,35.0298558,0
  914. -81.0414889,35.0446995,0
  915. -81.0612488,35.0668162,0
  916. -81.0494041,35.099687,0
  917. -81.032238,35.1048833,0
  918. -81.0379028,35.1256652,0
  919. -81.0514641,35.1335272,0
  920. -81.0455304,35.1498955,0
  921. -81.4429593,35.1679411,0
  922. -81.7748436,34.7398512,0
  923. -81.5570068,34.5846057,0
  924. -81.4251709,34.5699064,0
  925. -81.4196777,34.4488212,0
  926. -81.3317871,34.2572164,0
  927. -81.149826,34.1578409,0
  928. -81.0001373,34.2433109,0
  929. -80.9967041,34.2986356,0
  930. -81.0063171,34.3210388,0
  931. -81.0015106,34.5382375,0
  932. -81.0296631,34.642812,0
  933. -81.0384178,34.7906866,0
  934. </coordinates>
  935. </LinearRing>
  936. </outerBoundaryIs>
  937. </Polygon>
  938. </Placemark>
  939. <Placemark>
  940. <name>Group 6 Fort Mill-Lancaster</name>
  941. <styleUrl>#poly-000000-1200-77-nodesc</styleUrl>
  942. <Polygon>
  943. <outerBoundaryIs>
  944. <LinearRing>
  945. <tessellate>1</tessellate>
  946. <coordinates>
  947. -80.988636,34.9792366,0
  948. -80.9706116,34.9363264,0
  949. -80.9994507,34.8836779,0
  950. -81.0052872,34.8597356,0
  951. -81.0303497,34.8318411,0
  952. -81.0384178,34.7906866,0
  953. -81.0296631,34.642812,0
  954. -81.0015106,34.5382375,0
  955. -80.0271606,34.4250361,0
  956. -79.8184204,34.2980684,0
  957. -79.552002,34.3661107,0
  958. -79.3177378,34.5099162,0
  959. -79.6753001,34.8047441,0
  960. -80.797543,34.8197863,0
  961. -80.7820415,34.9357843,0
  962. -80.9349503,35.1074089,0
  963. -81.0414889,35.0446995,0
  964. -81.0415077,35.0298558,0
  965. -81.0301781,35.0193127,0
  966. -81.0143852,35.0250764,0
  967. -80.9967041,35.0115803,0
  968. -80.9996223,35.0062374,0
  969. -80.9939575,34.9911912,0
  970. -80.9834862,34.9875347,0
  971. -80.988636,34.9792366,0
  972. </coordinates>
  973. </LinearRing>
  974. </outerBoundaryIs>
  975. </Polygon>
  976. </Placemark>
  977. </Folder>
  978. </Document>
  979. </kml>`;
  980. }
  981. })();