Skip to content
Snippets Groups Projects
Commit 79acd287 authored by Tor-Einar Skog's avatar Tor-Einar Skog
Browse files

First version serving KML files with forecast aggregates for POIs

Added License notices to some files
parent e4b8ebe5
No related branches found
No related tags found
No related merge requests found
...@@ -58,6 +58,11 @@ ...@@ -58,6 +58,11 @@
<version>2.5</version> <version>2.5</version>
<type>jar</type> <type>jar</type>
</dependency> </dependency>
<dependency>
<groupId>de.micromata.jak</groupId>
<artifactId>JavaAPIforKml</artifactId>
<version>2.2.0</version>
</dependency>
<dependency> <dependency>
<groupId>javax</groupId> <groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId> <artifactId>javaee-web-api</artifactId>
...@@ -101,4 +106,5 @@ ...@@ -101,4 +106,5 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
</project> </project>
...@@ -37,6 +37,7 @@ public class VIPSLogicApplication extends Application ...@@ -37,6 +37,7 @@ public class VIPSLogicApplication extends Application
*/ */
private void addRestResourceClasses(Set<Class<?>> resources) { private void addRestResourceClasses(Set<Class<?>> resources) {
resources.add(no.bioforsk.vips.core.service.ModelResource.class); resources.add(no.bioforsk.vips.core.service.ModelResource.class);
resources.add(no.bioforsk.vips.coremanager.service.ManagerResource.class);
resources.add(no.bioforsk.vips.logic.service.LogicService.class); resources.add(no.bioforsk.vips.logic.service.LogicService.class);
} }
......
package no.bioforsk.vips.logic.controller.session; package no.bioforsk.vips.logic.controller.session;
import de.micromata.opengis.kml.v_2_2_0.Coordinate;
import de.micromata.opengis.kml.v_2_2_0.Document;
import de.micromata.opengis.kml.v_2_2_0.Kml;
import de.micromata.opengis.kml.v_2_2_0.KmlFactory;
import de.micromata.opengis.kml.v_2_2_0.Placemark;
import de.micromata.opengis.kml.v_2_2_0.Point;
import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
...@@ -28,6 +35,7 @@ import no.bioforsk.vips.logic.entity.ForecastModelConfiguration; ...@@ -28,6 +35,7 @@ import no.bioforsk.vips.logic.entity.ForecastModelConfiguration;
import no.bioforsk.vips.logic.scheduling.model.ModelRunPreprocessor; import no.bioforsk.vips.logic.scheduling.model.ModelRunPreprocessor;
import no.bioforsk.vips.logic.scheduling.model.ModelRunPreprocessorFactory; import no.bioforsk.vips.logic.scheduling.model.ModelRunPreprocessorFactory;
import no.bioforsk.vips.logic.scheduling.model.PreprocessorException; import no.bioforsk.vips.logic.scheduling.model.PreprocessorException;
import no.bioforsk.vips.logic.util.Globals;
import no.bioforsk.vips.logic.util.RunModelException; import no.bioforsk.vips.logic.util.RunModelException;
import no.bioforsk.vips.logic.util.SessionControllerGetter; import no.bioforsk.vips.logic.util.SessionControllerGetter;
import no.bioforsk.web.forms.FormField; import no.bioforsk.web.forms.FormField;
...@@ -275,8 +283,8 @@ public class ForecastBean { ...@@ -275,8 +283,8 @@ public class ForecastBean {
ModelRunRequest request = new ModelRunRequest(config); ModelRunRequest request = new ModelRunRequest(config);
Map<String,String> loginInfo = new HashMap<>(); Map<String,String> loginInfo = new HashMap<>();
// VIPSLogic logs in on behalf of client // VIPSLogic logs in on behalf of client
//loginInfo.put("username",System.getProperty("no.bioforsk.vips.logic.CORE_BATCH_USERNAME")); loginInfo.put("username",System.getProperty("no.bioforsk.vips.logic.CORE_BATCH_USERNAME"));
loginInfo.put("username","wrongusername"); //loginInfo.put("username","wrongusername");
loginInfo.put("password",System.getProperty("no.bioforsk.vips.logic.CORE_BATCH_PASSWORD")); loginInfo.put("password",System.getProperty("no.bioforsk.vips.logic.CORE_BATCH_PASSWORD"));
request.setLoginInfo(loginInfo); request.setLoginInfo(loginInfo);
// We tell which client this is (the db Id in VIPSCoreManager) // We tell which client this is (the db Id in VIPSCoreManager)
...@@ -308,4 +316,96 @@ public class ForecastBean { ...@@ -308,4 +316,96 @@ public class ForecastBean {
ManagerResource resource = rTarget.proxy(ManagerResource.class); ManagerResource resource = rTarget.proxy(ManagerResource.class);
return resource; return resource;
} }
public Kml getForecastsAggregateKml(Date theDate)
{
// Initialization
final Kml kml = KmlFactory.createKml();
final Document document = kml.createAndSetDocument()
.withName("Forecast results - aggregates").withDescription("Worst forecasts for each POI");
document.createAndAddStyle()
.withId("warning_type_0")
.createAndSetIconStyle()
.withScale(0.55)
.createAndSetIcon()
.withHref("http://www.vips-landbruk.no/graphics/dot_grey.png");
document.createAndAddStyle()
.withId("warning_type_1")
.createAndSetIconStyle()
.withScale(0.55)
.createAndSetIcon()
.withHref("http://www.vips-landbruk.no/graphics/dot_blue.png");
document.createAndAddStyle()
.withId("warning_type_2")
.createAndSetIconStyle()
.withScale(0.55)
.createAndSetIcon()
.withHref("http://www.vips-landbruk.no/graphics/dot_green.png");
document.createAndAddStyle()
.withId("warning_type_3")
.createAndSetIconStyle()
.withScale(0.55)
.createAndSetIcon()
.withHref("http://www.vips-landbruk.no/graphics/dot_yellow.png");
document.createAndAddStyle()
.withId("warning_type_4")
.createAndSetIconStyle()
.withScale(0.55)
.createAndSetIcon()
.withHref("http://www.vips-landbruk.no/graphics/dot_red.png");
// Run through forecast configurations
List<PointOfInterest> poisWithAggregate = getPointOfInterestForecastsAggregate(theDate);
for(PointOfInterest poiWithAggregate:poisWithAggregate)
{
final Placemark placemark = document.createAndAddPlacemark()
.withName(poiWithAggregate.getName())
.withDescription("<![CDATA[Mangler informasjon om varsler for " + poiWithAggregate.getName() + "]]>")
.withStyleUrl("#warning_type_"
+ (poiWithAggregate.getProperties().get("forecastsAggregate") != null ? poiWithAggregate.getProperties().get("forecastsAggregate") : "0")
);
final Point point = placemark.createAndSetPoint();
List<Coordinate> coord = point.createAndSetCoordinates();
coord.add(new Coordinate(
poiWithAggregate.getLongitude(),
poiWithAggregate.getLatitude(),
poiWithAggregate.getAltitude() != null ? poiWithAggregate.getAltitude() : 0
));
}
System.out.println(kml.marshal());
return kml;
}
/**
* TODO: This should be cached somehow. Here in app or in web server???
* @param theDate
* @return
*/
private List<PointOfInterest> getPointOfInterestForecastsAggregate(Date theDate) {
// TODO: More precise gathering of POIs...
List<PointOfInterest> pois = em.createNamedQuery("PointOfInterest.findAll").getResultList();
SimpleDateFormat format = new SimpleDateFormat(Globals.defaultDateFormat);
for(PointOfInterest poi: pois)
{
Query q = em.createNativeQuery("SELECT max(warning_status) FROM forecast_result \n" +
"WHERE forecast_configuration_id IN( \n" +
" SELECT forecast_configuration_id \n" +
" FROM forecast_configuration \n" +
" WHERE location_point_of_interest_id=:locationPointOfInterestId \n" +
")\n" +
"AND to_char(result_valid_time, 'yyyy-MM-dd') = :dateStr");
q.setParameter("locationPointOfInterestId", poi.getPointOfInterestId());
q.setParameter("dateStr", format.format(theDate));
poi.getProperties().put("forecastsAggregate", (Integer) q.getSingleResult());
}
return pois;
}
} }
/*
* Copyright (c) 2013 Bioforsk <http://www.bioforsk.no/>.
*
* This file is part of VIPSLogic.
* VIPSLogic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VIPSLogic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with VIPSLogic. If not, see <http://www.gnu.org/licenses/>.
*
*/
package no.bioforsk.vips.logic.entity; package no.bioforsk.vips.logic.entity;
import java.io.Serializable; import java.io.Serializable;
...@@ -37,6 +55,7 @@ import org.codehaus.jackson.annotate.JsonIgnore; ...@@ -37,6 +55,7 @@ import org.codehaus.jackson.annotate.JsonIgnore;
@NamedQuery(name = "ForecastConfiguration.findByModelId", query = "SELECT f FROM ForecastConfiguration f WHERE f.modelId = :modelId"), @NamedQuery(name = "ForecastConfiguration.findByModelId", query = "SELECT f FROM ForecastConfiguration f WHERE f.modelId = :modelId"),
@NamedQuery(name = "ForecastConfiguration.findByDateStart", query = "SELECT f FROM ForecastConfiguration f WHERE f.dateStart = :dateStart"), @NamedQuery(name = "ForecastConfiguration.findByDateStart", query = "SELECT f FROM ForecastConfiguration f WHERE f.dateStart = :dateStart"),
@NamedQuery(name = "ForecastConfiguration.findByDateEnd", query = "SELECT f FROM ForecastConfiguration f WHERE f.dateEnd = :dateEnd"), @NamedQuery(name = "ForecastConfiguration.findByDateEnd", query = "SELECT f FROM ForecastConfiguration f WHERE f.dateEnd = :dateEnd"),
@NamedQuery(name = "ForecastConfiguration.findByLocationPointOfInterestId", query = "SELECT f FROM ForecastConfiguration f WHERE f.locationPointOfInterestId = :locationPointOfInterestId"),
@NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserId", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId = :vipsLogicUserId"), @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserId", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId = :vipsLogicUserId"),
@NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIds", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId IN (:vipsLogicUserIds)") @NamedQuery(name = "ForecastConfiguration.findByVipsLogicUserIds", query = "SELECT f FROM ForecastConfiguration f WHERE f.vipsLogicUserId IN (:vipsLogicUserIds)")
}) })
......
/*
* Copyright (c) 2013 Bioforsk <http://www.bioforsk.no/>.
*
* This file is part of VIPSLogic.
* VIPSLogic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VIPSLogic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with VIPSLogic. If not, see <http://www.gnu.org/licenses/>.
*
*/
package no.bioforsk.vips.logic.entity; package no.bioforsk.vips.logic.entity;
import java.io.Serializable; import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.persistence.Basic; import javax.persistence.Basic;
import javax.persistence.CascadeType; import javax.persistence.CascadeType;
...@@ -18,6 +38,7 @@ import javax.persistence.NamedQueries; ...@@ -18,6 +38,7 @@ import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery; import javax.persistence.NamedQuery;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.Transient;
import javax.validation.constraints.Size; import javax.validation.constraints.Size;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient; import javax.xml.bind.annotation.XmlTransient;
...@@ -71,6 +92,11 @@ public class PointOfInterest implements Serializable, Comparable { ...@@ -71,6 +92,11 @@ public class PointOfInterest implements Serializable, Comparable {
@ManyToOne @ManyToOne
private PointOfInterestType pointOfInterestType; private PointOfInterestType pointOfInterestType;
// For attaching ad-hoc properties
// e.g. Worst warning for map
@Transient
private Map<String, Object> properties;
public PointOfInterest() { public PointOfInterest() {
} }
...@@ -205,4 +231,22 @@ public class PointOfInterest implements Serializable, Comparable { ...@@ -205,4 +231,22 @@ public class PointOfInterest implements Serializable, Comparable {
public void setTimeZone(String timeZone) { public void setTimeZone(String timeZone) {
this.timeZone = timeZone; this.timeZone = timeZone;
} }
/**
* @return the properties
*/
public Map<String,Object> getProperties() {
if(this.properties == null)
{
this.properties = new HashMap<>();
}
return properties;
}
/**
* @param properties the properties to set
*/
public void setProperties(Map<String,Object> properties) {
this.properties = properties;
}
} }
/*
* Copyright (c) 2013 Bioforsk <http://www.bioforsk.no/>.
*
* This file is part of VIPSLogic.
* VIPSLogic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VIPSLogic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with VIPSLogic. If not, see <http://www.gnu.org/licenses/>.
*
*/
package no.bioforsk.vips.logic.scheduling.model.preprocessor; package no.bioforsk.vips.logic.scheduling.model.preprocessor;
import java.io.IOException;
import no.bioforsk.vips.logic.entity.ForecastConfiguration; import no.bioforsk.vips.logic.entity.ForecastConfiguration;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
......
package no.bioforsk.vips.logic.service; package no.bioforsk.vips.logic.service;
import de.micromata.opengis.kml.v_2_2_0.Kml;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
...@@ -20,6 +21,7 @@ import no.bioforsk.vips.logic.i18n.SessionLocaleUtil; ...@@ -20,6 +21,7 @@ import no.bioforsk.vips.logic.i18n.SessionLocaleUtil;
import no.bioforsk.vips.logic.entity.ForecastConfiguration; import no.bioforsk.vips.logic.entity.ForecastConfiguration;
import no.bioforsk.vips.logic.entity.ForecastModelConfiguration; import no.bioforsk.vips.logic.entity.ForecastModelConfiguration;
import no.bioforsk.vips.logic.util.SessionControllerGetter; import no.bioforsk.vips.logic.util.SessionControllerGetter;
import no.bioforsk.vips.logic.util.SystemTime;
import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget;
import org.jboss.resteasy.spi.HttpRequest; import org.jboss.resteasy.spi.HttpRequest;
...@@ -125,6 +127,15 @@ public class LogicService { ...@@ -125,6 +127,15 @@ public class LogicService {
return Response.ok().entity(forecastModelConfigurations).build(); return Response.ok().entity(forecastModelConfigurations).build();
} }
@GET
@Path("forecastresults/aggregate")
@Produces("application/vnd.google-earth.kml+xml;charset=utf-8")
public Response getForecastResultsAggregate()
{
Kml retVal = SessionControllerGetter.getForecastBean().getForecastsAggregateKml(SystemTime.getSystemTime());
return Response.ok().entity(retVal).build();
}
private ManagerResource getManagerResource() private ManagerResource getManagerResource()
{ {
Client client = ClientBuilder.newClient(); Client client = ClientBuilder.newClient();
......
package no.bioforsk.vips.logic.util; package no.bioforsk.vips.logic.util;
import java.util.Locale;
/** /**
* @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a> * @copyright 2013 <a href="http://www.bioforsk.no/">Bioforsk</a>
* @author Tor-Einar Skog <tor-einar.skog@bioforsk.no> * @author Tor-Einar Skog <tor-einar.skog@bioforsk.no>
...@@ -25,7 +23,8 @@ public class Globals { ...@@ -25,7 +23,8 @@ public class Globals {
"/rest", "/rest",
"/user", "/user",
"/test/testlogin.jsp", "/test/testlogin.jsp",
"/test/testloginsuccess.jsp" "/test/testloginsuccess.jsp",
"/test/mock.kml"
}; };
// Point of interest type IDs // Point of interest type IDs
...@@ -43,5 +42,6 @@ public class Globals { ...@@ -43,5 +42,6 @@ public class Globals {
public static Integer USER_STATUS_DISABLED = 5; public static Integer USER_STATUS_DISABLED = 5;
public static String defaultTimestampFormat = "yyyy-MM-dd HH:mm:ssXXX"; public static String defaultTimestampFormat = "yyyy-MM-dd HH:mm:ssXXX";
public static String defaultDateFormat = "yyyy-MM-dd";
} }
...@@ -93,15 +93,6 @@ ...@@ -93,15 +93,6 @@
<servlet-name>LoginController</servlet-name> <servlet-name>LoginController</servlet-name>
<servlet-class>no.bioforsk.vips.logic.controller.servlet.LoginController</servlet-class> <servlet-class>no.bioforsk.vips.logic.controller.servlet.LoginController</servlet-class>
</servlet> </servlet>
<servlet>
<servlet-name>TestFreemarker</servlet-name>
<servlet-class>no.bioforsk.vips.logic.controller.servlet.TestFreemarker</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>TestFreemarker</servlet-name>
<url-pattern>/testfreemarker</url-pattern>
<url-pattern>/userTEST</url-pattern>
</servlet-mapping>
<filter> <filter>
<description>Authenticates users</description> <description>Authenticates users</description>
<filter-name>AuthenticationFilter</filter-name> <filter-name>AuthenticationFilter</filter-name>
...@@ -115,6 +106,7 @@ ...@@ -115,6 +106,7 @@
<filter-name>AuthenticationFilter</filter-name> <filter-name>AuthenticationFilter</filter-name>
<url-pattern>*</url-pattern> <url-pattern>*</url-pattern>
</filter-mapping> </filter-mapping>
<!-- RestEASY listens to all requests with /rest/* PATH --> <!-- RestEASY listens to all requests with /rest/* PATH -->
<filter> <filter>
<filter-name>Resteasy</filter-name> <filter-name>Resteasy</filter-name>
......
<?xml version="1.0" encoding="UTF-8" ?>
<!--
/*
* Copyright (c) 2014 Bioforsk <http://www.bioforsk.no/>.
*
* This file is part of VIPSLogic.
* VIPSLogic is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* VIPSLogic is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with VIPSLogic. If not, see <http://www.gnu.org/licenses/>.
*
*/
-->
<!-- Test KML for map development -->
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
<name>Varsel hele landet</name>
<description>Klimastasjoner - verste varsel for hele landet</description>
<Style id="style_0">
<IconStyle>
<scale>0.55</scale>
<Icon>
<href>http://www.vips-landbruk.no/graphics/dot_grey.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="style_1">
<IconStyle>
<scale>0.55</scale>
<Icon>
<href>http://www.vips-landbruk.no/graphics/dot_blue.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="style_2">
<IconStyle>
<scale>0.55</scale>
<Icon>
<href>http://www.vips-landbruk.no/graphics/dot_green.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="style_3">
<IconStyle>
<scale>0.55</scale>
<Icon>
<href>http://www.vips-landbruk.no/graphics/dot_yellow.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="style_4">
<IconStyle>
<scale>0.55</scale>
<Icon>
<href>http://www.vips-landbruk.no/graphics/dot_red.png</href>
</Icon>
</IconStyle>
</Style>
<Placemark>
<name>Alvdal</name>
<description><![CDATA[Mangler informasjon om varsler for Alvdal]]></description>
<styleUrl>#style_3</styleUrl>
<Point>
<coordinates>10.62687,62.10944</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Apelsvoll</name>
<description><![CDATA[Mangler informasjon om varsler for Apelsvoll]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.86952,60.70024</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Balestrand</name>
<description><![CDATA[Mangler informasjon om varsler for Balestrand]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.52845,61.20294</coordinates>
</Point>
</Placemark>
<Placemark>
<name></name>
<description><![CDATA[Mangler informasjon om varsler for Bø]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.02859,59.4175</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Darbu</name>
<description><![CDATA[Mangler informasjon om varsler for Darbu]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.85057,59.6879</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Djønno</name>
<description><![CDATA[Mangler informasjon om varsler for Djønno]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.75063,60.46116</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Etne</name>
<description><![CDATA[Mangler informasjon om varsler for Etne]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>5.95383,59.6625</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Flesberg</name>
<description><![CDATA[Mangler informasjon om varsler for Flesberg]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.39985,59.86859</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Folldal</name>
<description><![CDATA[Mangler informasjon om varsler for Folldal]]></description>
<styleUrl>#style_0</styleUrl>
<Point>
<coordinates>9.99453,62.12793</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Frosta</name>
<description><![CDATA[Mangler informasjon om varsler for Frosta]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.69298,63.56502</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Fureneset</name>
<description><![CDATA[Mangler informasjon om varsler for Fureneset]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>5.04428,61.29272</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Fåvang</name>
<description><![CDATA[Mangler informasjon om varsler for Fåvang]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.1872,61.45822</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Gausdal</name>
<description><![CDATA[Mangler informasjon om varsler for Gausdal]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.25878,61.22468</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Gjerpen</name>
<description><![CDATA[Mangler informasjon om varsler for Gjerpen]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.57805,59.22684</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Gran</name>
<description><![CDATA[Mangler informasjon om varsler for Gran]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.55906,60.35575</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Grane</name>
<description><![CDATA[Mangler informasjon om varsler for Grane]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>13.39634,65.55085</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Grue</name>
<description><![CDATA[Mangler informasjon om varsler for Grue]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>12.0349,60.4699</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Gvarv</name>
<description><![CDATA[Mangler informasjon om varsler for Gvarv]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.21189,59.38223</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Hauso</name>
<description><![CDATA[Mangler informasjon om varsler for Hauso]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.64214,60.37373</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Hesthamar</name>
<description><![CDATA[Mangler informasjon om varsler for Hesthamar]]></description>
<styleUrl>#style_2</styleUrl>
<Point>
<coordinates>6.556,60.43029</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Hjelmeland</name>
<description><![CDATA[Mangler informasjon om varsler for Hjelmeland]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.14992,59.22995</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Hokksund</name>
<description><![CDATA[Mangler informasjon om varsler for Hokksund]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.89166,59.76152</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Holt</name>
<description><![CDATA[Mangler informasjon om varsler for Holt]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>18.90946,69.65381</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Hønefoss</name>
<description><![CDATA[Mangler informasjon om varsler for Hønefoss]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.2661,60.14032</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Høyheimsvik</name>
<description><![CDATA[Mangler informasjon om varsler for Høyheimsvik]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>7.40297,61.40506</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Ilseng</name>
<description><![CDATA[Mangler informasjon om varsler for Ilseng]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>11.20298,60.80264</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Kise</name>
<description><![CDATA[Mangler informasjon om varsler for Kise]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.80569,60.77324</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Kvam</name>
<description><![CDATA[Mangler informasjon om varsler for Kvam]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.21821,60.33637</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Kvelde</name>
<description><![CDATA[Mangler informasjon om varsler for Kvelde]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.983036,59.220314</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Kvithamar</name>
<description><![CDATA[Mangler informasjon om varsler for Kvithamar]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.87994,63.48795</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Landvik</name>
<description><![CDATA[Mangler informasjon om varsler for Landvik]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>8.522554,58.340073</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Leirflaten</name>
<description><![CDATA[Mangler informasjon om varsler for Leirflaten]]></description>
<styleUrl>#style_0</styleUrl>
<Point>
<coordinates>9.15267,61.72274</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Lier</name>
<description><![CDATA[Mangler informasjon om varsler for Lier]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.2604,59.79005</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Linge</name>
<description><![CDATA[Mangler informasjon om varsler for Linge]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>7.21713,62.28815</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Ljøsne</name>
<description><![CDATA[Mangler informasjon om varsler for Ljøsne]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>7.56252,61.05454</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Loen</name>
<description><![CDATA[Mangler informasjon om varsler for Loen]]></description>
<styleUrl>#style_2</styleUrl>
<Point>
<coordinates>6.78595,61.87228</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Lyngdal</name>
<description><![CDATA[Mangler informasjon om varsler for Lyngdal]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>7.05036,58.12589</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Løken</name>
<description><![CDATA[Mangler informasjon om varsler for Løken]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.06302,61.12183</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Meldal</name>
<description><![CDATA[Mangler informasjon om varsler for Meldal]]></description>
<styleUrl>#style_2</styleUrl>
<Point>
<coordinates>9.716463,63.026787</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Moelv</name>
<description><![CDATA[Mangler informasjon om varsler for Moelv]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.6937,60.943</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Mære</name>
<description><![CDATA[Mangler informasjon om varsler for Mære]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>11.42527,63.94244</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Målselv</name>
<description><![CDATA[Mangler informasjon om varsler for Målselv]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>18.537834,69.258835</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Njøs</name>
<description><![CDATA[Mangler informasjon om varsler for Njøs]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.862209,61.179943</coordinates>
</Point>
</Placemark>
<Placemark>
<name></name>
<description><![CDATA[Mangler informasjon om varsler for Nå]]></description>
<styleUrl>#style_2</styleUrl>
<Point>
<coordinates>6.57052,60.2542</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Oppdal</name>
<description><![CDATA[Mangler informasjon om varsler for Oppdal]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.483333,62.59999</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Orre</name>
<description><![CDATA[Mangler informasjon om varsler for Orre]]></description>
<styleUrl>#style_0</styleUrl>
<Point>
<coordinates>5.55,58.7</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Pasvik</name>
<description><![CDATA[Mangler informasjon om varsler for Pasvik]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>30.04085,69.45513</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Rakkestad</name>
<description><![CDATA[Mangler informasjon om varsler for Rakkestad]]></description>
<styleUrl>#style_2</styleUrl>
<Point>
<coordinates>11.39042,59.38824</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Ramnes</name>
<description><![CDATA[Mangler informasjon om varsler for Ramnes]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.23923,59.38081</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Rena</name>
<description><![CDATA[Mangler informasjon om varsler for Rena]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>11.359307,61.149868</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Rennebu</name>
<description><![CDATA[Mangler informasjon om varsler for Rennebu]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.836755,62.862926</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Rindal</name>
<description><![CDATA[Mangler informasjon om varsler for Rindal]]></description>
<styleUrl>#style_3</styleUrl>
<Point>
<coordinates>9.376915,63.104248</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Rissa</name>
<description><![CDATA[Mangler informasjon om varsler for Rissa]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.97051,63.58592</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Roverud</name>
<description><![CDATA[Mangler informasjon om varsler for Roverud]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>12.09144,60.25378</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Rygge</name>
<description><![CDATA[Mangler informasjon om varsler for Rygge]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.75427,59.39805</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Sandane</name>
<description><![CDATA[Mangler informasjon om varsler for Sandane]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.15884,61.79835</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Sande</name>
<description><![CDATA[Mangler informasjon om varsler for Sande]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.22339,59.6162</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Sandefjord</name>
<description><![CDATA[Mangler informasjon om varsler for Sandefjord]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.27512,59.16827</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Sekse</name>
<description><![CDATA[Mangler informasjon om varsler for Sekse]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.62133,60.25028</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Skjetlein</name>
<description><![CDATA[Mangler informasjon om varsler for Skjetlein]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.29737,63.34038</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Skjetten</name>
<description><![CDATA[Mangler informasjon om varsler for Skjetten]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.97765,59.97758</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Skogmo</name>
<description><![CDATA[Mangler informasjon om varsler for Skogmo]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>12.01885,64.51035</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Slinde</name>
<description><![CDATA[Mangler informasjon om varsler for Slinde]]></description>
<styleUrl>#style_2</styleUrl>
<Point>
<coordinates>6.93651,61.15988</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Soknedal</name>
<description><![CDATA[Mangler informasjon om varsler for Soknedal]]></description>
<styleUrl>#style_2</styleUrl>
<Point>
<coordinates>10.239745,62.92845</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Sortland</name>
<description><![CDATA[Mangler informasjon om varsler for Sortland]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>15.28288,68.64825</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Surnadal</name>
<description><![CDATA[Mangler informasjon om varsler for Surnadal]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>8.68956,62.98474</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Svelvik</name>
<description><![CDATA[Mangler informasjon om varsler for Svelvik]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.40478,59.60272</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Svelvik syd</name>
<description><![CDATA[Mangler informasjon om varsler for Svelvik syd]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.39205,59.55416</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Særheim</name>
<description><![CDATA[Mangler informasjon om varsler for Særheim]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>5.65078,58.76053</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Søve</name>
<description><![CDATA[Mangler informasjon om varsler for Søve]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>9.28132,59.27891</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Tingvoll</name>
<description><![CDATA[Mangler informasjon om varsler for Tingvoll]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>8.18623,62.91341</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Tjølling</name>
<description><![CDATA[Mangler informasjon om varsler for Tjølling]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.12513,59.04641</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Tjøtta</name>
<description><![CDATA[Mangler informasjon om varsler for Tjøtta]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>12.42553,65.82951</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Tomb</name>
<description><![CDATA[Mangler informasjon om varsler for Tomb]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.81449,59.31893</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Ullensvang</name>
<description><![CDATA[Mangler informasjon om varsler for Ullensvang]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.65381,60.31853</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Ulvik</name>
<description><![CDATA[Mangler informasjon om varsler for Ulvik]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>6.93246,60.56365</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Vågønes</name>
<description><![CDATA[Mangler informasjon om varsler for Vågønes]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>14.45155,67.28465</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Øsaker</name>
<description><![CDATA[Mangler informasjon om varsler for Øsaker]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>11.04221,59.31936</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Årnes</name>
<description><![CDATA[Mangler informasjon om varsler for Årnes]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>11.39342,60.1268</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Ås</name>
<description><![CDATA[Mangler informasjon om varsler for Ås]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.781989,59.66047</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Åsbakken</name>
<description><![CDATA[Mangler informasjon om varsler for Åsbakken]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>10.768903,59.66855</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Åsnes</name>
<description><![CDATA[Mangler informasjon om varsler for Åsnes]]></description>
<styleUrl>#style_4</styleUrl>
<Point>
<coordinates>12.0244,60.54933</coordinates>
</Point>
</Placemark>
</Document>
</kml>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment