diff --git a/VIPSWeb/static/js/forecastmap.js b/VIPSWeb/static/js/frontpageMap.js similarity index 98% rename from VIPSWeb/static/js/forecastmap.js rename to VIPSWeb/static/js/frontpageMap.js index 09b71c889dbcd9a3708aadf79d5a56c063e4c4a8..6199bd4035bbce9fcc8dcdf7eb61cb80829eb8da 100755 --- a/VIPSWeb/static/js/forecastmap.js +++ b/VIPSWeb/static/js/frontpageMap.js @@ -18,14 +18,14 @@ */ /** - * @copyright 2014 <a href="http://www.nibio.no/">NIBIO</a> + * @copyright 2018 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ // Couple of global elements var map; var forecastLayer; - +var observationLayer; /** @@ -74,6 +74,9 @@ function initForecastMap(lonLat, zoomLevel, mapAttribution) }) }); + // GEOJSON? + //observationLayer = + // Layer for popup var popOverlay = new ol.Overlay({ diff --git a/VIPSWeb/static/js/observationMap.js b/VIPSWeb/static/js/observationMap.js new file mode 100644 index 0000000000000000000000000000000000000000..1ec7acab36337786a362c49e19663f3ab16abfb1 --- /dev/null +++ b/VIPSWeb/static/js/observationMap.js @@ -0,0 +1,419 @@ +/* + * Copyright (c) 2018 NIBIO <http://www.nibio.no/>. + * + * This file is part of VIPSWeb. + * VIPSWeb is free software: you can redistribute it and/or modify + * it under the terms of the NIBIO Open Source License as published by + * NIBIO, either version 1 of the License, or (at your option) any + * later version. + * + * VIPSWeb 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 + * NIBIO Open Source License for more details. + * + * You should have received a copy of the NIBIO Open Source License + * along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. + * + */ + +var allObservations = []; // Populated asynchronously +var drawnFeatures = []; // Populated asynchronously +var currentDate; // Initialized in initMap +var map; +var featureOverlay; + +/** + * Default coloring + * @type Array + */ +var ageColors = [ + [7, 'rgba(255, 0, 0, 1.0)'], // Red + [30, 'rgba(244, 206, 66, 1.0)'], // Orange + [60, 'rgba(0, 0, 255, 1.0)'], // Blue +]; + +var ageStyles; + +/* + * Observation map + * @author Tor-Einar Skog <tor-einar.skog@nibio.no> + */ +var initMap = function( + center, + zoomLevel, + organizationId, + from, + to, + pestId, + cropId, + cropCategoryId, + customAgeColors + ) +{ + if(typeof customAgeColors !== 'undefined') + { + ageColors = customAgeColors; + } + + initAgeStyles(); + currentDateInMillis = moment(to).format("X") * 1000; // Reference for coloring the observations + // Background layer is OpenStreetMap + var backgroundLayer = new ol.layer.Tile({ + source: new ol.source.OSM({ + attributions: [ + new ol.Attribution({ + html: mapConstants.MAP_ATTRIBUTION + }) + ] + }) + }); + + // Layer for popup + var popOverlay = new ol.Overlay({ + element: document.getElementById("popover") + }); + + // Creating the map + map = new ol.Map({ + target: 'observationMap', + layers: [backgroundLayer], + overlays: [popOverlay], + renderer: 'canvas' + }); + + var centerPosition = ol.proj.transform(center, 'EPSG:4326', map.getView().getProjection().getCode()); + + // Setting zoom and center for the map (need to do this after creating map. so that we kan transform our + // center to correct map projection) + var view = new ol.View({ + center: centerPosition, + zoom:zoomLevel + }); + map.setView(view); + + // Need to build the query string + var params = []; + + if(from !== "") + { + params.push("from=" + from); + } + if(to !== "") + { + params.push("to=" + to); + } + if(pestId !== null) + { + params.push("pestId=" + pestId); + } + if(cropId !== null) + { + params.push("cropId=" + cropId); + } + if(cropCategoryId !== null) + { + params.push("cropCategoryId=" + cropCategoryId); + } + + + $.getJSON( "/rest/observation/filter/" + organizationId + (params.length > 0 ? "?" + params.join("&") : ""), function( data ) { + allObservations = data; + renderObservationTable(data); + var geoJSON = {"type":"FeatureCollection","features":[]}; + for(var i=0;i<data.length;i++) + { + var observation = data[i]; + var obsFeatures = null; + if(observation.location !== null && observation.location.geoJSON !== null) + { + obsFeatures = JSON.parse(observation.location.geoJSON).features; + // Need to add observation id for these locations + for(var j=0; j<obsFeatures.length; j++) + { + obsFeatures[j].properties["observationId"] = observation.observationId; + } + } + else if(observation.geoinfo !== null && observation.geoinfo.trim() !== "") + { + obsFeatures = JSON.parse(observation.geoinfo).features; + } + else + { + continue; + } + + for(var j=0; j<obsFeatures.length; j++) + { + geoJSON.features.push(obsFeatures[j]); + } + } + var features = new ol.Collection(); + featureOverlay = new ol.layer.Vector({ + source: new ol.source.Vector({ + features: features + }), + style: getCorrectStyle + }); + + + var format = new ol.format.GeoJSON(); + drawnfeatures = format.readFeatures(geoJSON, { + dataProjection: 'EPSG:4326', + featureProjection: map.getView().getProjection().getCode() + }); + + featureOverlay.getSource().addFeatures(drawnfeatures); + //console.log(featureOverlay); + featureOverlay.setMap(map); + if(drawnfeatures.length > 0) + { + extent = featureOverlay.getSource().getExtent(); + map.getView().fit(extent, map.getSize()); + } + }); + + // Using Bootstrap's popover plugin. See http://getbootstrap.com/javascript/#popovers + var poiDetails = $("#popover"); + + var displayFeatureDetails = function(pixel, coordinate) { + var feature = map.forEachFeatureAtPixel(pixel, function(feature,layer){ + return feature; + }); + + if (feature) { + var relAge = getObservationRelativeAge(feature); + if(relAge == null || relAge < 0) + { + return; + } + // Position the popup, and hiding it + // Resetting information from (possible) former popups + var geometry = feature.getGeometry(); + popOverlay.setPosition(ol.extent.getCenter(geometry.getExtent())); + // Get the observation that this feature belongs to + var observation = getObservation(feature.get("observationId")); + //popOverlay.setPosition(geometry.getCoordinates()); + poiDetails.popover('destroy'); + var illustrationElm = ""; + if(observation.observationIllustrationSet.length == 1) + { + var illustration = observation.observationIllustrationSet[0]; + illustrationElm = "<img src='/static/images/observations/" + observation.organismId + "/" + illustration.observationIllustrationPK.fileName + "' class='img-responsive'/>"; + } + // Create the popup, showing it + poiDetails.popover({ + animation: true, + trigger: 'manual', + html: true, + placement: "auto top", + title: "<a href='/observation?action=editObservationForm&observationId=" + observation.observationId + "' target='new'>" + observation.observationHeading + "</a>", + content: "[" + moment(observation.timeOfObservation).format("YYYY-MM-DD HH:mm ZZ") + "]: " + + observation.observationText + + illustrationElm + }); + + + poiDetails.popover('show'); + + + } else { + poiDetails.popover('destroy'); + } + }; + + map.on('singleclick', function(evt) { + var pixel = map.getEventPixel(evt.originalEvent); + displayFeatureDetails(pixel); + }); + + +}; + +var getObservation = function(observationId) +{ + for(var i=0; i<allObservations.length;i++) + { + if(allObservations[i].observationId == observationId) + { + return allObservations[i]; + } + } + return null; +}; + + +var renderObservationTable = function(data) +{ + var tbody = document.getElementById("observationTableBody"); + var tbodyHTML = []; + for(var i=0; i<data.length;i++) + { + var obs = data[i]; + tbodyHTML.push("<tr>"); + tbodyHTML.push("<td>" + moment(obs.timeOfObservation).format("YYYY-MM-DD HH:mm ZZ") + "</td>"); + tbodyHTML.push("<td>" + getLocalizedOrganismName(obs.organism) + "</td>"); + tbodyHTML.push("<td>" + getLocalizedOrganismName(obs.cropOrganism) + "</td>"); + tbodyHTML.push("<td>" + (obs.location != null ? obs.location.name : "") + "</td>"); + tbodyHTML.push("<td>" + obs.user.firstName + " " + obs.user.lastName + "</td>"); + tbodyHTML.push("<td>" + obs.observationHeading + "</td>"); + tbodyHTML.push("<td></td>"); + tbodyHTML.push("</tr>"); + } + tbody.innerHTML = tbodyHTML.join("\n"); +}; + +// TODO: Set selected if possible +var renderOrganismField = function(organismList, fieldId, selectedId) +{ + // Sort alphabetically by local name + organismList.sort(function(a,b){ + if (getLocalizedOrganismName(a) < getLocalizedOrganismName(b)) return -1; + if (getLocalizedOrganismName(a) > getLocalizedOrganismName(b)) return 1; + return 0; + }); + var list = document.getElementById(fieldId); + list.options.length=0; + list.options[0] = new Option("",""); // For the chosenjs to print data-placeholder + for(var i=0;i<organismList.length;i++) + { + var organism = organismList[i]; + var newOption = new Option(getLocalizedOrganismName(organism),organism.organismId); + if(organism.organismId === selectedId) + { + newOption.selected = true; + } + list.options[list.options.length] = newOption; + } +}; + +var renderCropCategoryField = function(cropCategoryList, selectedId) +{ + // TODO: Sort by local name + cropCategoryList.sort(function(a,b){ + if (getLocalizedCropCategoryName(a) < getLocalizedCropCategoryName(b)) return -1; + if (getLocalizedCropCategoryName(a) > getLocalizedCropCategoryName(b)) return 1; + return 0; + }); + var list = document.getElementById("cropCategoryList"); + list.options.length=0; + list.options[0] = new Option("",""); // For the chosenjs to print data-placeholder + for(var i=0;i<cropCategoryList.length;i++) + { + var cropCategory = cropCategoryList[i]; + var newOption = new Option(getLocalizedCropCategoryName(cropCategory),cropCategory.cropCategoryId); + if(cropCategory.cropCategoryId === selectedId) + { + newOption.selected = true; + } + list.options[list.options.length] = newOption; + } +}; + +var initForm = function(organizationId, + pestId, + cropId, + cropCategoryId, + postRenderFormActions + ) +{ + $.getJSON( "/rest/observation/pest/" + organizationId , function( pestList ) { + renderOrganismField(pestList, "pestList", pestId); + $.getJSON( "/rest/observation/crop/" + organizationId , function( cropList ) { + renderOrganismField(cropList, "cropList", cropId); + $.getJSON( "/rest/organism/cropcategory/" + organizationId , function( cropCategoryList ) { + renderCropCategoryField(cropCategoryList, cropCategoryId); + postRenderFormActions(); // Activate chosen.js + }); + }); + }); +}; + +// Global configs +var styleOld = + new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(0, 0, 0, 0.2)' + }), + stroke: new ol.style.Stroke({ + color: '#000000', + width: 2 + }), + image: new ol.style.Circle({ + radius: 7, + fill: new ol.style.Fill({ + color: '#000000' + }) + }) + }); + var styleInvisible = new ol.style.Style({ + fill: new ol.style.Fill({ + color: 'rgba(0, 0, 0, 0.0)' + }), + stroke: new ol.style.Stroke({ + color: 'rgba(0, 0, 0, 0.0)', + width: 0 + }), + image: new ol.style.Circle({ + radius: 0, + fill: new ol.style.Fill({ + color: 'rgba(0, 0, 0, 0.0)' + }) + }) + }); + +var initAgeStyles = function(){ + ageStyles = []; + for(var i in ageColors) + { + ageStyles.push([ + ageColors[i][0], + new ol.style.Style({ + fill: new ol.style.Fill({ + color: ageColors[i][1].replace("1.0","0.2") + }), + stroke: new ol.style.Stroke({ + color: ageColors[i][1], + width: 2 + }), + image: new ol.style.Circle({ + radius: 6, + fill: new ol.style.Fill({ + color: ageColors[i][1] + }) + }) + }) + ]); + } +}; + +var getCorrectStyle = function(feature){ + var age = getObservationRelativeAge(feature); + if(age == null) + { + return; + } + if(age < 0) + { + return styleInvisible; + } + for(var i in ageStyles) + { + if(age < ageStyles[i][0]) + { + return ageStyles[i][1]; + } + } + return styleOld; + }; + +var getObservationRelativeAge = function(feature) +{ + var observation = getObservation(feature.get("observationId")); // TODO include observations timestamp in feature. Speeds things up + if(observation == null) + { + console.info("No obs with id=" + feature.get("observationId")); + return null; // Means invisible + } + return Math.floor((currentDateInMillis - getUnixTimestampFromJSON(observation.timeOfObservation)) / (1000 * 60 * 60 * 24)) + 1; +}; \ No newline at end of file diff --git a/VIPSWeb/static/js/validateForm.js b/VIPSWeb/static/js/validateForm.js index 30822acb10f5e38a5bc59b776585b746d9c9e613..c7afa7d5080abb0bd515b10d3963e62e628c59d3 100755 --- a/VIPSWeb/static/js/validateForm.js +++ b/VIPSWeb/static/js/validateForm.js @@ -88,7 +88,9 @@ function validateForm(theForm, formDefinitionKey) // Iterate through fields in form definition for(var i in formDefinition.fields){ var fieldDefinition = formDefinition.fields[i]; + //console.log(theForm); //console.log(fieldDefinition); + //console.info(theForm[fieldDefinition.name]); if(!validateFieldActual(theForm[fieldDefinition.name], theForm, formDefinitionKey)){ //alert("Validation failed for " + fieldDefinition.name); isValid = false; @@ -230,6 +232,7 @@ function getValidationOutputEl(fieldEl, theForm) */ function validateFieldActual(fieldEl, theForm, formDefinitionKey) { + //console.info(fieldEl); var webValue = fieldEl.value; var fieldDefinition = getFieldDefinition(fieldEl.name, formDefinitions[formDefinitionKey !== null ? formDefinitionKey : theForm.id]); diff --git a/VIPSWeb/templates/index.html b/VIPSWeb/templates/index.html index 3e4f16a568fb567a7da8c699546beddda7ad6cc1..ac64fa208180b9d195f774e9705720979e8dacbf 100755 --- a/VIPSWeb/templates/index.html +++ b/VIPSWeb/templates/index.html @@ -34,7 +34,7 @@ <script type="text/javascript" src="{% static "js/util.js" %}"></script> <script type="text/javascript" src="{% url "views.settings_js" %}"></script> <script type="text/javascript" src="{% static "js/frontpage.js" %}"></script> -<script type="text/javascript" src="{% static "js/forecastmap.js" %}"></script> +<script type="text/javascript" src="{% static "js/frontpageMap.js" %}"></script> <script type="text/javascript"> $(document).ready(function() { diff --git a/cerealblotchmodels/locale/de/LC_MESSAGES/django.mo b/cerealblotchmodels/locale/de/LC_MESSAGES/django.mo index 0d937a96065f4e94585f8f7e3437143836cc3ece..01a204af9666829002cccf454223039e23666e9f 100755 Binary files a/cerealblotchmodels/locale/de/LC_MESSAGES/django.mo and b/cerealblotchmodels/locale/de/LC_MESSAGES/django.mo differ diff --git a/cerealblotchmodels/locale/de/LC_MESSAGES/django.po b/cerealblotchmodels/locale/de/LC_MESSAGES/django.po index 39cb695ea9743ca9f22a9f21e7bfb2c5533e5612..61811b7b0599d3f8e2eb9e25a8ab62db8698b9a8 100755 --- a/cerealblotchmodels/locale/de/LC_MESSAGES/django.po +++ b/cerealblotchmodels/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-09-28 13:03-0700\n" +"POT-Creation-Date: 2018-04-23 14:14+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -28,120 +28,155 @@ msgid "Background data for the barley net blotch model" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:49 +#: templates/cerealblotchmodels/wheatleafblotchform.html:49 msgid "Weather station" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:55 +#: templates/cerealblotchmodels/wheatleafblotchform.html:55 msgid "Sowing date" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:60 +#: templates/cerealblotchmodels/wheatleafblotchform.html:60 msgid "Crop" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:67 +#: templates/cerealblotchmodels/wheatleafblotchform.html:67 msgid "Same crop as last season" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:72 +#: templates/cerealblotchmodels/wheatleafblotchform.html:72 msgid "Plowed" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:78 +#: templates/cerealblotchmodels/wheatleafblotchform.html:78 msgid "Observation date" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:83 +#: templates/cerealblotchmodels/wheatleafblotchform.html:84 msgid "% Infected leaves" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:88 +#: templates/cerealblotchmodels/wheatleafblotchform.html:90 msgid "Spraying date" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:93 +#: templates/cerealblotchmodels/wheatleafblotchform.html:95 msgid "Preparation" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:99 +#: templates/cerealblotchmodels/wheatleafblotchform.html:101 msgid "Preparation dose" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:108 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:152 +#: templates/cerealblotchmodels/wheatleafblotchform.html:110 msgid "Run model" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:115 +#: templates/cerealblotchmodels/wheatleafblotchform.html:117 msgid "Model is running, please wait" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:126 +#: templates/cerealblotchmodels/wheatleafblotchform.html:128 msgid "Scroll past chart by swiping the dotted line on the right" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:152 +#: templates/cerealblotchmodels/wheatleafblotchform.html:154 msgid "Missing observation information" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:161 +#: templates/cerealblotchmodels/wheatleafblotchform.html:163 msgid "Missing spraying information" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:194 +#: templates/cerealblotchmodels/wheatleafblotchform.html:196 msgid "Temperature, daily mean" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:195 +#: templates/cerealblotchmodels/wheatleafblotchform.html:197 msgid "Rain last 28 days" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:196 +#: templates/cerealblotchmodels/wheatleafblotchform.html:198 msgid "Rain, daily" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:197 +#: templates/cerealblotchmodels/wheatleafblotchform.html:199 msgid "Day degrees since sowing" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:198 #: templates/cerealblotchmodels/barleynetblotchform.html:263 +#: templates/cerealblotchmodels/wheatleafblotchform.html:200 +#: templates/cerealblotchmodels/wheatleafblotchform.html:265 msgid "Threshold" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:199 #: templates/cerealblotchmodels/barleynetblotchform.html:264 +#: templates/cerealblotchmodels/wheatleafblotchform.html:201 +#: templates/cerealblotchmodels/wheatleafblotchform.html:266 msgid "Disease" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:206 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:333 +#: templates/cerealblotchmodels/wheatleafblotchform.html:208 msgid "Time" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:214 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:341 +#: templates/cerealblotchmodels/wheatleafblotchform.html:216 msgid "Warning status" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:247 +#: templates/cerealblotchmodels/wheatleafblotchform.html:249 msgid "No data returned" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:260 +#: templates/cerealblotchmodels/wheatleafblotchform.html:262 msgid "Disease value" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:267 +#: templates/cerealblotchmodels/wheatleafblotchform.html:269 msgid "Barley net blotch development" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:279 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:263 +#: templates/cerealblotchmodels/wheatleafblotchform.html:281 msgid "Select weather station" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:305 +#: templates/cerealblotchmodels/wheatleafblotchform.html:307 msgid "Select crop" msgstr "" #: templates/cerealblotchmodels/barleynetblotchform.html:333 +#: templates/cerealblotchmodels/wheatleafblotchform.html:335 msgid "Select preparation" msgstr "" @@ -149,3 +184,139 @@ msgstr "" #: templates/cerealblotchmodels/index.html:27 msgid "Cereal blotch models" msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:25 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:28 +msgid "Septoria humidity model" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:32 +msgid "Background data" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:38 +msgid "Country" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:40 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:47 +msgid "Please select" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:45 +msgid "WeatherStation" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:53 +msgid "Sprayings" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:55 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:60 +msgid "Spraying 1" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:70 +msgid "Phenology" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:72 +msgid "Growth stage 31" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:77 +msgid "3rd upper leaf (gs 32)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:82 +msgid "2nd upper leaf (gs 33)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:87 +msgid "Upper leaf (gs 37-39)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:92 +msgid "All kernels fully developed (gs 75)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:100 +msgid "Threshold values for 'humid hour'" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:102 +msgid "Relative humidity" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:107 +msgid "Leaf wetness (min/hour)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:112 +msgid "Precipitation" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:117 +msgid "Sliding hours past (hours)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:122 +msgid "Sliding hours ahead (hours)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:131 +msgid "Other threshold values" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:133 +msgid "Number of consecutive 'humid hours'" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:138 +msgid "Spraying protection period" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:143 +msgid "Leaf life time (days)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:303 +msgid "The model is running, please wait" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:320 +msgid "Temperature, hourly mean" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:321 +msgid "Rain, hourly" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:322 +msgid "Relative humidity, hourly mean" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:323 +msgid "Leaf wetness, hourly" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:324 +msgid "Humid period hour" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:325 +msgid "Humid hour (yes/no)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:326 +msgid "Humid period hour outside protection period" +msgstr "" + +#: templates/cerealblotchmodels/wheatleafblotchform.html:25 +#: templates/cerealblotchmodels/wheatleafblotchform.html:34 +msgid "Wheat leaf blotch" +msgstr "" + +#: templates/cerealblotchmodels/wheatleafblotchform.html:42 +msgid "Background data for the wheat leaf blotch model" +msgstr "" diff --git a/cerealblotchmodels/locale/nb/LC_MESSAGES/django.mo b/cerealblotchmodels/locale/nb/LC_MESSAGES/django.mo index aae83ed5bcf441930141796979989903e2f83975..3f0be08a16babeb7ab2fb54c2ef07cb5b7e468d5 100755 Binary files a/cerealblotchmodels/locale/nb/LC_MESSAGES/django.mo and b/cerealblotchmodels/locale/nb/LC_MESSAGES/django.mo differ diff --git a/cerealblotchmodels/locale/nb/LC_MESSAGES/django.po b/cerealblotchmodels/locale/nb/LC_MESSAGES/django.po index d23c33b4aa1e5241c8861a1e341da191cff53b30..130c40e9e6c7e1d5fe00c1f6a13b4de6f16bc081 100755 --- a/cerealblotchmodels/locale/nb/LC_MESSAGES/django.po +++ b/cerealblotchmodels/locale/nb/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-06-04 10:45+0200\n" +"POT-Creation-Date: 2018-04-23 14:14+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -19,125 +19,164 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: templates/cerealblotchmodels/barleynetblotchform.html:25 -#: templates/cerealblotchmodels/barleynetblotchform.html:28 +#: templates/cerealblotchmodels/barleynetblotchform.html:34 msgid "Barley net blotch" msgstr "Byggbrunflekk" -#: templates/cerealblotchmodels/barleynetblotchform.html:33 +#: templates/cerealblotchmodels/barleynetblotchform.html:42 msgid "Background data for the barley net blotch model" msgstr "Bakgrunnsdata for byggbrunflekkmodellen" -#: templates/cerealblotchmodels/barleynetblotchform.html:40 +#: templates/cerealblotchmodels/barleynetblotchform.html:49 +#: templates/cerealblotchmodels/wheatleafblotchform.html:49 msgid "Weather station" msgstr "Målestasjon" -#: templates/cerealblotchmodels/barleynetblotchform.html:46 +#: templates/cerealblotchmodels/barleynetblotchform.html:55 +#: templates/cerealblotchmodels/wheatleafblotchform.html:55 msgid "Sowing date" msgstr "Sådato" -#: templates/cerealblotchmodels/barleynetblotchform.html:51 +#: templates/cerealblotchmodels/barleynetblotchform.html:60 +#: templates/cerealblotchmodels/wheatleafblotchform.html:60 msgid "Crop" msgstr "Kultur" -#: templates/cerealblotchmodels/barleynetblotchform.html:58 +#: templates/cerealblotchmodels/barleynetblotchform.html:67 +#: templates/cerealblotchmodels/wheatleafblotchform.html:67 msgid "Same crop as last season" msgstr "Samme kultur som i fjor" -#: templates/cerealblotchmodels/barleynetblotchform.html:63 +#: templates/cerealblotchmodels/barleynetblotchform.html:72 +#: templates/cerealblotchmodels/wheatleafblotchform.html:72 msgid "Plowed" msgstr "Pløyd" -#: templates/cerealblotchmodels/barleynetblotchform.html:69 +#: templates/cerealblotchmodels/barleynetblotchform.html:78 +#: templates/cerealblotchmodels/wheatleafblotchform.html:78 msgid "Observation date" msgstr "Observasjonsdato" -#: templates/cerealblotchmodels/barleynetblotchform.html:74 +#: templates/cerealblotchmodels/barleynetblotchform.html:83 +#: templates/cerealblotchmodels/wheatleafblotchform.html:84 msgid "% Infected leaves" msgstr "% infiserte blad" -#: templates/cerealblotchmodels/barleynetblotchform.html:79 +#: templates/cerealblotchmodels/barleynetblotchform.html:88 +#: templates/cerealblotchmodels/wheatleafblotchform.html:90 msgid "Spraying date" msgstr "Sprøytedato" -#: templates/cerealblotchmodels/barleynetblotchform.html:84 +#: templates/cerealblotchmodels/barleynetblotchform.html:93 +#: templates/cerealblotchmodels/wheatleafblotchform.html:95 msgid "Preparation" msgstr "Plantevernmiddel" -#: templates/cerealblotchmodels/barleynetblotchform.html:90 +#: templates/cerealblotchmodels/barleynetblotchform.html:99 +#: templates/cerealblotchmodels/wheatleafblotchform.html:101 msgid "Preparation dose" msgstr "Dose" -#: templates/cerealblotchmodels/barleynetblotchform.html:99 +#: templates/cerealblotchmodels/barleynetblotchform.html:108 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:152 +#: templates/cerealblotchmodels/wheatleafblotchform.html:110 msgid "Run model" msgstr "Kjør modell" -#: templates/cerealblotchmodels/barleynetblotchform.html:106 +#: templates/cerealblotchmodels/barleynetblotchform.html:115 +#: templates/cerealblotchmodels/wheatleafblotchform.html:117 msgid "Model is running, please wait" msgstr "Modellen kjører, vennligst vent" -#: templates/cerealblotchmodels/barleynetblotchform.html:140 +#: templates/cerealblotchmodels/barleynetblotchform.html:126 +#: templates/cerealblotchmodels/wheatleafblotchform.html:128 +msgid "Scroll past chart by swiping the dotted line on the right" +msgstr "" + +#: templates/cerealblotchmodels/barleynetblotchform.html:152 +#: templates/cerealblotchmodels/wheatleafblotchform.html:154 msgid "Missing observation information" msgstr "Observasjonsinformasjon mangler" -#: templates/cerealblotchmodels/barleynetblotchform.html:149 +#: templates/cerealblotchmodels/barleynetblotchform.html:161 +#: templates/cerealblotchmodels/wheatleafblotchform.html:163 msgid "Missing spraying information" msgstr "Sprøyteinformasjon mangler" -#: templates/cerealblotchmodels/barleynetblotchform.html:188 +#: templates/cerealblotchmodels/barleynetblotchform.html:194 +#: templates/cerealblotchmodels/wheatleafblotchform.html:196 msgid "Temperature, daily mean" msgstr "Temperatur, døgngjennomsnitt" -#: templates/cerealblotchmodels/barleynetblotchform.html:189 +#: templates/cerealblotchmodels/barleynetblotchform.html:195 +#: templates/cerealblotchmodels/wheatleafblotchform.html:197 msgid "Rain last 28 days" msgstr "Regn siste 28 døgn" -#: templates/cerealblotchmodels/barleynetblotchform.html:190 +#: templates/cerealblotchmodels/barleynetblotchform.html:196 +#: templates/cerealblotchmodels/wheatleafblotchform.html:198 msgid "Rain, daily" msgstr "Regn, daglig" -#: templates/cerealblotchmodels/barleynetblotchform.html:191 +#: templates/cerealblotchmodels/barleynetblotchform.html:197 +#: templates/cerealblotchmodels/wheatleafblotchform.html:199 msgid "Day degrees since sowing" msgstr "Døgngrader siden såing" -#: templates/cerealblotchmodels/barleynetblotchform.html:192 -#: templates/cerealblotchmodels/barleynetblotchform.html:253 +#: templates/cerealblotchmodels/barleynetblotchform.html:198 +#: templates/cerealblotchmodels/barleynetblotchform.html:263 +#: templates/cerealblotchmodels/wheatleafblotchform.html:200 +#: templates/cerealblotchmodels/wheatleafblotchform.html:265 msgid "Threshold" msgstr "Terskelverdi" -#: templates/cerealblotchmodels/barleynetblotchform.html:193 -#: templates/cerealblotchmodels/barleynetblotchform.html:254 +#: templates/cerealblotchmodels/barleynetblotchform.html:199 +#: templates/cerealblotchmodels/barleynetblotchform.html:264 +#: templates/cerealblotchmodels/wheatleafblotchform.html:201 +#: templates/cerealblotchmodels/wheatleafblotchform.html:266 msgid "Disease" msgstr "Sykdom" -#: templates/cerealblotchmodels/barleynetblotchform.html:200 +#: templates/cerealblotchmodels/barleynetblotchform.html:206 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:333 +#: templates/cerealblotchmodels/wheatleafblotchform.html:208 msgid "Time" msgstr "Tid" -#: templates/cerealblotchmodels/barleynetblotchform.html:208 +#: templates/cerealblotchmodels/barleynetblotchform.html:214 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:341 +#: templates/cerealblotchmodels/wheatleafblotchform.html:216 msgid "Warning status" msgstr "Varselstatus" -#: templates/cerealblotchmodels/barleynetblotchform.html:237 +#: templates/cerealblotchmodels/barleynetblotchform.html:247 +#: templates/cerealblotchmodels/wheatleafblotchform.html:249 msgid "No data returned" msgstr "Ingen data returnert" -#: templates/cerealblotchmodels/barleynetblotchform.html:250 +#: templates/cerealblotchmodels/barleynetblotchform.html:260 +#: templates/cerealblotchmodels/wheatleafblotchform.html:262 msgid "Disease value" msgstr "Sykdomsverdi" -#: templates/cerealblotchmodels/barleynetblotchform.html:257 +#: templates/cerealblotchmodels/barleynetblotchform.html:267 +#: templates/cerealblotchmodels/wheatleafblotchform.html:269 msgid "Barley net blotch development" msgstr "Utvikling av byggbrunflekk" -#: templates/cerealblotchmodels/barleynetblotchform.html:269 +#: templates/cerealblotchmodels/barleynetblotchform.html:279 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:263 +#: templates/cerealblotchmodels/wheatleafblotchform.html:281 msgid "Select weather station" msgstr "Velg målestasjon" -#: templates/cerealblotchmodels/barleynetblotchform.html:296 +#: templates/cerealblotchmodels/barleynetblotchform.html:305 +#: templates/cerealblotchmodels/wheatleafblotchform.html:307 msgid "Select crop" msgstr "Velg kultur" -#: templates/cerealblotchmodels/barleynetblotchform.html:324 +#: templates/cerealblotchmodels/barleynetblotchform.html:333 +#: templates/cerealblotchmodels/wheatleafblotchform.html:335 msgid "Select preparation" msgstr "Velg plantevernmiddel" @@ -146,3 +185,147 @@ msgstr "Velg plantevernmiddel" msgid "Cereal blotch models" msgstr "Bladflekksjukdommer i korn" +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:25 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:28 +msgid "Septoria humidity model" +msgstr "Septoria fuktmodell" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:32 +msgid "Background data" +msgstr "Bakgrunnsdata" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:38 +msgid "Country" +msgstr "Land" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:40 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:47 +msgid "Please select" +msgstr "Vennligst velg" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:45 +#, fuzzy +msgid "WeatherStation" +msgstr "Målestasjon" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:53 +#, fuzzy +msgid "Sprayings" +msgstr "Sprøytedato" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:55 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:60 +#, fuzzy +msgid "Spraying 1" +msgstr "Sprøytedato" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:70 +msgid "Phenology" +msgstr "Utviklingsstadium" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:72 +msgid "Growth stage 31" +msgstr "Vekststadie 31" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:77 +msgid "3rd upper leaf (gs 32)" +msgstr "3. øverste blad (vs32)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:82 +msgid "2nd upper leaf (gs 33)" +msgstr "Nest øverste blad (vs 33)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:87 +msgid "Upper leaf (gs 37-39)" +msgstr "Øvre blad (vs 37-39)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:92 +msgid "All kernels fully developed (gs 75)" +msgstr "Alle kjerner fullt strukket ut (vs 75)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:100 +msgid "Threshold values for 'humid hour'" +msgstr "Terskelverdier for \"fuktig time\"" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:102 +msgid "Relative humidity" +msgstr "Relativ luftfuktighet" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:107 +msgid "Leaf wetness (min/hour)" +msgstr "Bladfukt (min/t)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:112 +#, fuzzy +msgid "Precipitation" +msgstr "Plantevernmiddel" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:117 +msgid "Sliding hours past (hours)" +msgstr "Glidende sum, bakover (timer)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:122 +msgid "Sliding hours ahead (hours)" +msgstr "Glidende sum, fremover (timer)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:131 +msgid "Other threshold values" +msgstr "Andre terskelverdier" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:133 +msgid "Number of consecutive 'humid hours'" +msgstr "Antall sammenhengende \"fuktige timer\"" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:138 +msgid "Spraying protection period" +msgstr "Antall dager beskyttelse etter sprøyting" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:143 +msgid "Leaf life time (days)" +msgstr "Levetid for blad (dager)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:303 +#, fuzzy +msgid "The model is running, please wait" +msgstr "Modellen kjører, vennligst vent" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:320 +#, fuzzy +msgid "Temperature, hourly mean" +msgstr "Temperatur, døgngjennomsnitt" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:321 +#, fuzzy +msgid "Rain, hourly" +msgstr "Regn, daglig" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:322 +msgid "Relative humidity, hourly mean" +msgstr "Relativ luftfuktighet, timesgjennomsnitt" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:323 +msgid "Leaf wetness, hourly" +msgstr "Bladfukt, timesverdi" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:324 +msgid "Humid period hour" +msgstr "Time nr i fuktig periode" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:325 +msgid "Humid hour (yes/no)" +msgstr "Fuktig time (ja/nei)" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:326 +msgid "Humid period hour outside protection period" +msgstr "Time nr x i fuktig periode utenfor sprøyteperiode" + +#: templates/cerealblotchmodels/wheatleafblotchform.html:25 +#: templates/cerealblotchmodels/wheatleafblotchform.html:34 +msgid "Wheat leaf blotch" +msgstr "Bladflekksjukdommer i hvete" + +#: templates/cerealblotchmodels/wheatleafblotchform.html:42 +#, fuzzy +msgid "Background data for the wheat leaf blotch model" +msgstr "Bakgrunnsdata for byggbrunflekkmodellen" + diff --git a/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.mo b/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.mo index d04c87be24bb154f6e967bf23ec567c41a2b9732..1d22b3b4c2987addf1f13ebb79af5b91d2e7356e 100755 Binary files a/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.mo and b/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.mo differ diff --git a/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.po b/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.po index f80ca7a8c86942f97a45bff5181d47ac45e56f24..8a241ec4d271fcd041479120c2a0d392bc5b2869 100755 --- a/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.po +++ b/cerealblotchmodels/locale/zh_CN/LC_MESSAGES/django.po @@ -7,15 +7,15 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-09-28 13:04-0700\n" +"POT-Creation-Date: 2018-04-23 14:14+0200\n" "PO-Revision-Date: 2016-10-07 11:05+0200\n" +"Last-Translator: \n" +"Language-Team: \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"Last-Translator: \n" -"Language-Team: \n" "X-Generator: Poedit 1.8.7\n" #: templates/cerealblotchmodels/barleynetblotchform.html:25 @@ -28,120 +28,155 @@ msgid "Background data for the barley net blotch model" msgstr "大麦网斑病模型的背景数据" #: templates/cerealblotchmodels/barleynetblotchform.html:49 +#: templates/cerealblotchmodels/wheatleafblotchform.html:49 msgid "Weather station" msgstr "气象站" #: templates/cerealblotchmodels/barleynetblotchform.html:55 +#: templates/cerealblotchmodels/wheatleafblotchform.html:55 msgid "Sowing date" msgstr "播种日期" #: templates/cerealblotchmodels/barleynetblotchform.html:60 +#: templates/cerealblotchmodels/wheatleafblotchform.html:60 msgid "Crop" msgstr "作物" #: templates/cerealblotchmodels/barleynetblotchform.html:67 +#: templates/cerealblotchmodels/wheatleafblotchform.html:67 msgid "Same crop as last season" msgstr "与上季同样的作物" #: templates/cerealblotchmodels/barleynetblotchform.html:72 +#: templates/cerealblotchmodels/wheatleafblotchform.html:72 msgid "Plowed" msgstr "犁过的" #: templates/cerealblotchmodels/barleynetblotchform.html:78 +#: templates/cerealblotchmodels/wheatleafblotchform.html:78 msgid "Observation date" msgstr "观测日期" #: templates/cerealblotchmodels/barleynetblotchform.html:83 +#: templates/cerealblotchmodels/wheatleafblotchform.html:84 msgid "% Infected leaves" msgstr "% 感染水平" #: templates/cerealblotchmodels/barleynetblotchform.html:88 +#: templates/cerealblotchmodels/wheatleafblotchform.html:90 msgid "Spraying date" msgstr "喷药日期" #: templates/cerealblotchmodels/barleynetblotchform.html:93 +#: templates/cerealblotchmodels/wheatleafblotchform.html:95 msgid "Preparation" msgstr "准备" #: templates/cerealblotchmodels/barleynetblotchform.html:99 +#: templates/cerealblotchmodels/wheatleafblotchform.html:101 msgid "Preparation dose" msgstr "准备剂量" #: templates/cerealblotchmodels/barleynetblotchform.html:108 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:152 +#: templates/cerealblotchmodels/wheatleafblotchform.html:110 msgid "Run model" msgstr "运行模型" #: templates/cerealblotchmodels/barleynetblotchform.html:115 +#: templates/cerealblotchmodels/wheatleafblotchform.html:117 msgid "Model is running, please wait" msgstr "模型在运行,请等候" #: templates/cerealblotchmodels/barleynetblotchform.html:126 +#: templates/cerealblotchmodels/wheatleafblotchform.html:128 msgid "Scroll past chart by swiping the dotted line on the right" msgstr "点击右边点状线看上一幅图" #: templates/cerealblotchmodels/barleynetblotchform.html:152 +#: templates/cerealblotchmodels/wheatleafblotchform.html:154 msgid "Missing observation information" msgstr "遗失的观测信息" #: templates/cerealblotchmodels/barleynetblotchform.html:161 +#: templates/cerealblotchmodels/wheatleafblotchform.html:163 msgid "Missing spraying information" msgstr "遗失的喷药信息" #: templates/cerealblotchmodels/barleynetblotchform.html:194 +#: templates/cerealblotchmodels/wheatleafblotchform.html:196 msgid "Temperature, daily mean" msgstr "日均温" #: templates/cerealblotchmodels/barleynetblotchform.html:195 +#: templates/cerealblotchmodels/wheatleafblotchform.html:197 msgid "Rain last 28 days" msgstr "过去28天降雨" #: templates/cerealblotchmodels/barleynetblotchform.html:196 +#: templates/cerealblotchmodels/wheatleafblotchform.html:198 msgid "Rain, daily" msgstr "日降雨" #: templates/cerealblotchmodels/barleynetblotchform.html:197 +#: templates/cerealblotchmodels/wheatleafblotchform.html:199 msgid "Day degrees since sowing" msgstr "从撒种开始日温度" #: templates/cerealblotchmodels/barleynetblotchform.html:198 #: templates/cerealblotchmodels/barleynetblotchform.html:263 +#: templates/cerealblotchmodels/wheatleafblotchform.html:200 +#: templates/cerealblotchmodels/wheatleafblotchform.html:265 msgid "Threshold" msgstr "阈值" #: templates/cerealblotchmodels/barleynetblotchform.html:199 #: templates/cerealblotchmodels/barleynetblotchform.html:264 +#: templates/cerealblotchmodels/wheatleafblotchform.html:201 +#: templates/cerealblotchmodels/wheatleafblotchform.html:266 msgid "Disease" msgstr "疾病" #: templates/cerealblotchmodels/barleynetblotchform.html:206 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:333 +#: templates/cerealblotchmodels/wheatleafblotchform.html:208 msgid "Time" msgstr "时间" #: templates/cerealblotchmodels/barleynetblotchform.html:214 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:341 +#: templates/cerealblotchmodels/wheatleafblotchform.html:216 msgid "Warning status" msgstr "预警信息" #: templates/cerealblotchmodels/barleynetblotchform.html:247 +#: templates/cerealblotchmodels/wheatleafblotchform.html:249 msgid "No data returned" msgstr "无数据返回" #: templates/cerealblotchmodels/barleynetblotchform.html:260 +#: templates/cerealblotchmodels/wheatleafblotchform.html:262 msgid "Disease value" msgstr "疾病值" #: templates/cerealblotchmodels/barleynetblotchform.html:267 +#: templates/cerealblotchmodels/wheatleafblotchform.html:269 msgid "Barley net blotch development" msgstr "大麦网斑病发展" #: templates/cerealblotchmodels/barleynetblotchform.html:279 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:263 +#: templates/cerealblotchmodels/wheatleafblotchform.html:281 msgid "Select weather station" msgstr "选择气象站" #: templates/cerealblotchmodels/barleynetblotchform.html:305 +#: templates/cerealblotchmodels/wheatleafblotchform.html:307 msgid "Select crop" msgstr "选择作物" #: templates/cerealblotchmodels/barleynetblotchform.html:333 +#: templates/cerealblotchmodels/wheatleafblotchform.html:335 msgid "Select preparation" msgstr "选择准备" @@ -149,3 +184,160 @@ msgstr "选择准备" #: templates/cerealblotchmodels/index.html:27 msgid "Cereal blotch models" msgstr "谷物斑点病模型" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:25 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:28 +msgid "Septoria humidity model" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:32 +msgid "Background data" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:38 +msgid "Country" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:40 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:47 +msgid "Please select" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:45 +#, fuzzy +#| msgid "Weather station" +msgid "WeatherStation" +msgstr "气象站" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:53 +#, fuzzy +#| msgid "Spraying date" +msgid "Sprayings" +msgstr "喷药日期" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:55 +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:60 +#, fuzzy +#| msgid "Spraying date" +msgid "Spraying 1" +msgstr "喷药日期" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:70 +msgid "Phenology" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:72 +msgid "Growth stage 31" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:77 +msgid "3rd upper leaf (gs 32)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:82 +msgid "2nd upper leaf (gs 33)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:87 +msgid "Upper leaf (gs 37-39)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:92 +msgid "All kernels fully developed (gs 75)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:100 +msgid "Threshold values for 'humid hour'" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:102 +msgid "Relative humidity" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:107 +msgid "Leaf wetness (min/hour)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:112 +#, fuzzy +#| msgid "Preparation" +msgid "Precipitation" +msgstr "准备" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:117 +msgid "Sliding hours past (hours)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:122 +msgid "Sliding hours ahead (hours)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:131 +msgid "Other threshold values" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:133 +msgid "Number of consecutive 'humid hours'" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:138 +msgid "Spraying protection period" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:143 +msgid "Leaf life time (days)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:303 +#, fuzzy +#| msgid "Model is running, please wait" +msgid "The model is running, please wait" +msgstr "模型在运行,请等候" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:320 +#, fuzzy +#| msgid "Temperature, daily mean" +msgid "Temperature, hourly mean" +msgstr "日均温" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:321 +#, fuzzy +#| msgid "Rain, daily" +msgid "Rain, hourly" +msgstr "日降雨" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:322 +msgid "Relative humidity, hourly mean" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:323 +msgid "Leaf wetness, hourly" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:324 +msgid "Humid period hour" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:325 +msgid "Humid hour (yes/no)" +msgstr "" + +#: templates/cerealblotchmodels/septoriahumiditymodelform.html:326 +msgid "Humid period hour outside protection period" +msgstr "" + +#: templates/cerealblotchmodels/wheatleafblotchform.html:25 +#: templates/cerealblotchmodels/wheatleafblotchform.html:34 +msgid "Wheat leaf blotch" +msgstr "" + +#: templates/cerealblotchmodels/wheatleafblotchform.html:42 +#, fuzzy +#| msgid "Background data for the barley net blotch model" +msgid "Background data for the wheat leaf blotch model" +msgstr "大麦网斑病模型的背景数据" + +#, fuzzy +#~| msgid "Background data for the barley net blotch model" +#~ msgid "Background data for the Septoria humidity model" +#~ msgstr "大麦网斑病模型的背景数据" diff --git a/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/barleyNetBlotchForm.json b/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/barleyNetBlotchForm.json index 514266136f822601d5955ae9ac68829ad42ca74d..683dfbfde3de01a3d118f0daf4de4102f1c0e1bf 100755 --- a/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/barleyNetBlotchForm.json +++ b/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/barleyNetBlotchForm.json @@ -2,19 +2,19 @@ "_licenseNote": [ "Copyright (c) 2014 NIBIO <http://www.nibio.no/>. ", "", - "This file is part of VIPSLogic. ", - "VIPSLogic is free software: you can redistribute it and/or modify ", + "This file is part of VIPSWeb. ", + "VIPSWeb is free software: you can redistribute it and/or modify ", "it under the terms of the NIBIO Open Source License as published by ", "NIBIO, either version 1 of the License, or (at your option) any ", "later version. ", "", - "VIPSLogic is distributed in the hope that it will be useful, ", + "VIPSWeb 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 ", "NIBIO Open Source License for more details. ", "", "You should have received a copy of the NIBIO Open Source License ", - "along with VIPSLogic. If not, see <http://www.nibio.no/licenses/>. " + "along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. " ], "_comment" : "Structure of the observationForm and how to validate it", "fields": [ diff --git a/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/septoriaHumidityForm.json b/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/septoriaHumidityForm.json new file mode 100755 index 0000000000000000000000000000000000000000..6005dbd07334b626f39a822c20284f1178f8c84d --- /dev/null +++ b/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/septoriaHumidityForm.json @@ -0,0 +1,112 @@ +{ + "_licenseNote": [ + "Copyright (c) 2018 NIBIO <http://www.nibio.no/>. ", + "", + "This file is part of VIPSWeb. ", + "VIPSWeb is free software: you can redistribute it and/or modify ", + "it under the terms of the NIBIO Open Source License as published by ", + "NIBIO, either version 1 of the License, or (at your option) any ", + "later version. ", + "", + "VIPSWeb 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 ", + "NIBIO Open Source License for more details. ", + "", + "You should have received a copy of the NIBIO Open Source License ", + "along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. " + ], + "_comment" : "Structure of the septoriaHumidityForm and how to validate it", + "fields": [ + { + "name" : "organizationId_countryCode", + "dataType" : "STRING", + "fieldType" : "SELECT_SINGLE", + "required" : true, + "nullValue" : "None" + }, + { + "name" : "weatherStationId", + "dataType" : "STRING", + "fieldType" : "SELECT_SINGLE", + "required" : true, + "nullValue" : "" + }, + { + "name" : "dateSpraying1", + "dataType" : "DATE", + "required" : false + }, + { + "name" : "dateSpraying2", + "dataType" : "DATE", + "required" : false + }, + { + "name" : "dateGs31", + "dataType" : "DATE", + "required" : true + }, + { + "name" : "date3rdUpperLeafEmerging", + "dataType" : "DATE", + "required" : true + }, + { + "name" : "date2ndUpperLeafEmerging", + "dataType" : "DATE", + "required" : true + }, + { + "name" : "dateUpperLeafEmerging", + "dataType" : "DATE", + "required" : true + }, + { + "name" : "dateGs75", + "dataType" : "DATE", + "required" : true + }, + { + "name" : "thresholdRelativeHumidity", + "dataType" : "DOUBLE", + "required" : true + }, + { + "name" : "thresholdLeafWetness", + "dataType" : "DOUBLE", + "required" : true + }, + { + "name" : "thresholdPrecipitation", + "dataType" : "DOUBLE", + "required" : true + }, + { + "name" : "slidingHoursPast", + "dataType" : "INTEGER", + "required" : true + }, + { + "name" : "slidingHoursAhead", + "dataType" : "INTEGER", + "required" : true + }, + { + "name" : "thresholdHumidPeriodHours", + "dataType" : "INTEGER", + "required" : true + }, + { + "name" : "sprayingProtectionDays", + "dataType" : "INTEGER", + "required" : true + }, + { + "name" : "leafLifeTime", + "dataType" : "INTEGER", + "required" : true + } + + ] +} diff --git a/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/wheatLeafBlotchForm.json b/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/wheatLeafBlotchForm.json new file mode 100755 index 0000000000000000000000000000000000000000..32434bb3643864d7f1bbc1eb08694bd5b530a703 --- /dev/null +++ b/cerealblotchmodels/static/cerealblotchmodels/formdefinitions/wheatLeafBlotchForm.json @@ -0,0 +1,78 @@ +{ + "_licenseNote": [ + "Copyright (c) 2018 NIBIO <http://www.nibio.no/>. ", + "", + "This file is part of VIPSWeb. ", + "VIPSWeb is free software: you can redistribute it and/or modify ", + "it under the terms of the NIBIO Open Source License as published by ", + "NIBIO, either version 1 of the License, or (at your option) any ", + "later version. ", + "", + "VIPSWeb 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 ", + "NIBIO Open Source License for more details. ", + "", + "You should have received a copy of the NIBIO Open Source License ", + "along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. " + ], + "_comment" : "Structure of the observationForm and how to validate it", + "fields": [ + { + "name" : "weatherStationId", + "dataType" : "INTEGER", + "fieldType" : "SELECT_SINGLE", + "required" : true, + "nullValue" : "-1" + }, + { + "name" : "sowingDate", + "dataType" : "DATE", + "required" : true + }, + { + "name" : "cropOrganismId", + "dataType" : "INTEGER", + "fieldType" : "SELECT_SINGLE", + "required" : true, + "nullValue" : "-1" + }, + { + "name" : "sameCropAsLastSeason", + "dataType" : "STRING", + "required" : false + }, + { + "name" : "plowed", + "dataType" : "STRING", + "required" : false + }, + { + "name" : "observationDate", + "dataType" : "DATE", + "required" : false + }, + { + "name" : "observationValue", + "dataType" : "DOUBLE", + "required" : false + }, + { + "name" : "sprayingDate", + "dataType" : "DATE", + "required" : false + }, + { + "name" : "preparationId", + "dataType" : "INTEGER", + "fieldType" : "SELECT_SINGLE", + "required" : false, + "nullValue" : "-1" + }, + { + "name" : "preparationDose", + "dataType" : "DOUBLE", + "required" : false + } + ] +} diff --git a/cerealblotchmodels/static/cerealblotchmodels/weatherDataInfo/PostalCodesUTM.xml b/cerealblotchmodels/static/cerealblotchmodels/weatherDataInfo/PostalCodesUTM.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6db3efd0e5d3c4bcab470bbfecf3ba0780cd99f --- /dev/null +++ b/cerealblotchmodels/static/cerealblotchmodels/weatherDataInfo/PostalCodesUTM.xml @@ -0,0 +1,3627 @@ +<?xml version="1.0" standalone="yes"?> +<PostalCodes> + <PostalCode> + <Code>1050</Code> + <CityName>København K (1050)</CityName> + <UTM_E>724700</UTM_E> + <UTM_N>6177100</UTM_N> + </PostalCode> + <PostalCode> + <Code>1100</Code> + <CityName>København K (1100)</CityName> + <UTM_E>724700</UTM_E> + <UTM_N>6177100</UTM_N> + </PostalCode> + <PostalCode> + <Code>1200</Code> + <CityName>København K (1200)</CityName> + <UTM_E>724300</UTM_E> + <UTM_N>6177300</UTM_N> + </PostalCode> + <PostalCode> + <Code>1300</Code> + <CityName>København K (1300)</CityName> + <UTM_E>723800</UTM_E> + <UTM_N>6177500</UTM_N> + </PostalCode> + <PostalCode> + <Code>1400</Code> + <CityName>København K (1400)</CityName> + <UTM_E>723500</UTM_E> + <UTM_N>6177900</UTM_N> + </PostalCode> + <PostalCode> + <Code>1500</Code> + <CityName>København V (1500)</CityName> + <UTM_E>724200</UTM_E> + <UTM_N>6175400</UTM_N> + </PostalCode> + <PostalCode> + <Code>1600</Code> + <CityName>København V (1600)</CityName> + <UTM_E>723300</UTM_E> + <UTM_N>6175600</UTM_N> + </PostalCode> + <PostalCode> + <Code>1700</Code> + <CityName>København V (1700)</CityName> + <UTM_E>722900</UTM_E> + <UTM_N>6175700</UTM_N> + </PostalCode> + <PostalCode> + <Code>1800</Code> + <CityName>Frederiksberg C (1800)</CityName> + <UTM_E>722600</UTM_E> + <UTM_N>6176100</UTM_N> + </PostalCode> + <PostalCode> + <Code>1900</Code> + <CityName>Frederiksberg C (1900)</CityName> + <UTM_E>722300</UTM_E> + <UTM_N>6176600</UTM_N> + </PostalCode> + <PostalCode> + <Code>2000</Code> + <CityName>Frederiksberg (2000)</CityName> + <UTM_E>720500</UTM_E> + <UTM_N>6177100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2100</Code> + <CityName>København Ø (2100)</CityName> + <UTM_E>724000</UTM_E> + <UTM_N>6180000</UTM_N> + </PostalCode> + <PostalCode> + <Code>2200</Code> + <CityName>København N (2200)</CityName> + <UTM_E>722700</UTM_E> + <UTM_N>6178900</UTM_N> + </PostalCode> + <PostalCode> + <Code>2300</Code> + <CityName>København S (2300)</CityName> + <UTM_E>726200</UTM_E> + <UTM_N>6175000</UTM_N> + </PostalCode> + <PostalCode> + <Code>2400</Code> + <CityName>København NV (2400)</CityName> + <UTM_E>720800</UTM_E> + <UTM_N>6180100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2450</Code> + <CityName>København SV (2450)</CityName> + <UTM_E>722000</UTM_E> + <UTM_N>6172900</UTM_N> + </PostalCode> + <PostalCode> + <Code>2500</Code> + <CityName>Valby (2500)</CityName> + <UTM_E>720100</UTM_E> + <UTM_N>6174400</UTM_N> + </PostalCode> + <PostalCode> + <Code>2600</Code> + <CityName>Glostrup (2600)</CityName> + <UTM_E>713200</UTM_E> + <UTM_N>6176600</UTM_N> + </PostalCode> + <PostalCode> + <Code>2605</Code> + <CityName>Brøndby (2605)</CityName> + <UTM_E>713800</UTM_E> + <UTM_N>6173100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2610</Code> + <CityName>Rødovre (2610)</CityName> + <UTM_E>716600</UTM_E> + <UTM_N>6177700</UTM_N> + </PostalCode> + <PostalCode> + <Code>2620</Code> + <CityName>Albertslund (2620)</CityName> + <UTM_E>710300</UTM_E> + <UTM_N>6176000</UTM_N> + </PostalCode> + <PostalCode> + <Code>2625</Code> + <CityName>Vallensbæk (2625)</CityName> + <UTM_E>711200</UTM_E> + <UTM_N>6172100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2630</Code> + <CityName>Taastrup (2630)</CityName> + <UTM_E>706000</UTM_E> + <UTM_N>6175100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2635</Code> + <CityName>Ishøj (2635)</CityName> + <UTM_E>707800</UTM_E> + <UTM_N>6169300</UTM_N> + </PostalCode> + <PostalCode> + <Code>2640</Code> + <CityName>Hedehusene (2640)</CityName> + <UTM_E>700400</UTM_E> + <UTM_N>6172600</UTM_N> + </PostalCode> + <PostalCode> + <Code>2650</Code> + <CityName>Hvidovre (2650)</CityName> + <UTM_E>717700</UTM_E> + <UTM_N>6171200</UTM_N> + </PostalCode> + <PostalCode> + <Code>2660</Code> + <CityName>Brøndby Strand (2660)</CityName> + <UTM_E>714900</UTM_E> + <UTM_N>6169600</UTM_N> + </PostalCode> + <PostalCode> + <Code>2665</Code> + <CityName>Vallensbæk Strand (2665)</CityName> + <UTM_E>712900</UTM_E> + <UTM_N>6169400</UTM_N> + </PostalCode> + <PostalCode> + <Code>2670</Code> + <CityName>Greve (2670)</CityName> + <UTM_E>706600</UTM_E> + <UTM_N>6166200</UTM_N> + </PostalCode> + <PostalCode> + <Code>2680</Code> + <CityName>Solrød Strand (2680)</CityName> + <UTM_E>702500</UTM_E> + <UTM_N>6159400</UTM_N> + </PostalCode> + <PostalCode> + <Code>2690</Code> + <CityName>Karlslunde (2690)</CityName> + <UTM_E>703000</UTM_E> + <UTM_N>6163000</UTM_N> + </PostalCode> + <PostalCode> + <Code>2700</Code> + <CityName>Brønshøj (2700)</CityName> + <UTM_E>718600</UTM_E> + <UTM_N>6180100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2720</Code> + <CityName>Vanløse (2720)</CityName> + <UTM_E>719000</UTM_E> + <UTM_N>6177400</UTM_N> + </PostalCode> + <PostalCode> + <Code>2730</Code> + <CityName>Herlev (2730)</CityName> + <UTM_E>715100</UTM_E> + <UTM_N>6182500</UTM_N> + </PostalCode> + <PostalCode> + <Code>2740</Code> + <CityName>Skovlunde (2740)</CityName> + <UTM_E>712500</UTM_E> + <UTM_N>6180600</UTM_N> + </PostalCode> + <PostalCode> + <Code>2750</Code> + <CityName>Ballerup (2750)</CityName> + <UTM_E>708200</UTM_E> + <UTM_N>6182200</UTM_N> + </PostalCode> + <PostalCode> + <Code>2760</Code> + <CityName>Måløv (2760)</CityName> + <UTM_E>705400</UTM_E> + <UTM_N>6187100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2765</Code> + <CityName>Smørum (2765)</CityName> + <UTM_E>705500</UTM_E> + <UTM_N>6181900</UTM_N> + </PostalCode> + <PostalCode> + <Code>2770</Code> + <CityName>Kastrup (2770)</CityName> + <UTM_E>729400</UTM_E> + <UTM_N>6171400</UTM_N> + </PostalCode> + <PostalCode> + <Code>2791</Code> + <CityName>Dragør (2791)</CityName> + <UTM_E>726200</UTM_E> + <UTM_N>6165900</UTM_N> + </PostalCode> + <PostalCode> + <Code>2800</Code> + <CityName>Kongens Lyngby (2800)</CityName> + <UTM_E>720000</UTM_E> + <UTM_N>6188000</UTM_N> + </PostalCode> + <PostalCode> + <Code>2820</Code> + <CityName>Gentofte (2820)</CityName> + <UTM_E>721000</UTM_E> + <UTM_N>6184900</UTM_N> + </PostalCode> + <PostalCode> + <Code>2830</Code> + <CityName>Virum (2830)</CityName> + <UTM_E>716700</UTM_E> + <UTM_N>6188800</UTM_N> + </PostalCode> + <PostalCode> + <Code>2840</Code> + <CityName>Holte (2840)</CityName> + <UTM_E>717300</UTM_E> + <UTM_N>6192500</UTM_N> + </PostalCode> + <PostalCode> + <Code>2850</Code> + <CityName>Nærum (2850)</CityName> + <UTM_E>720700</UTM_E> + <UTM_N>6192300</UTM_N> + </PostalCode> + <PostalCode> + <Code>2860</Code> + <CityName>Søborg (2860)</CityName> + <UTM_E>719000</UTM_E> + <UTM_N>6183300</UTM_N> + </PostalCode> + <PostalCode> + <Code>2870</Code> + <CityName>Dyssegård (2870)</CityName> + <UTM_E>719000</UTM_E> + <UTM_N>6183300</UTM_N> + </PostalCode> + <PostalCode> + <Code>2880</Code> + <CityName>Bagsværd (2880)</CityName> + <UTM_E>715800</UTM_E> + <UTM_N>6186200</UTM_N> + </PostalCode> + <PostalCode> + <Code>2900</Code> + <CityName>Hellerup (2900)</CityName> + <UTM_E>723000</UTM_E> + <UTM_N>6183100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2920</Code> + <CityName>Charlottenlund (2920)</CityName> + <UTM_E>723600</UTM_E> + <UTM_N>6185500</UTM_N> + </PostalCode> + <PostalCode> + <Code>2930</Code> + <CityName>Klampenborg (2930)</CityName> + <UTM_E>723000</UTM_E> + <UTM_N>6189400</UTM_N> + </PostalCode> + <PostalCode> + <Code>2942</Code> + <CityName>Skodsborg (2942)</CityName> + <UTM_E>722600</UTM_E> + <UTM_N>6193800</UTM_N> + </PostalCode> + <PostalCode> + <Code>2950</Code> + <CityName>Vedbæk (2950)</CityName> + <UTM_E>721100</UTM_E> + <UTM_N>6195500</UTM_N> + </PostalCode> + <PostalCode> + <Code>2960</Code> + <CityName>Rungsted Kyst (2960)</CityName> + <UTM_E>720700</UTM_E> + <UTM_N>6199400</UTM_N> + </PostalCode> + <PostalCode> + <Code>2970</Code> + <CityName>Hørsholm (2970)</CityName> + <UTM_E>716900</UTM_E> + <UTM_N>6198100</UTM_N> + </PostalCode> + <PostalCode> + <Code>2980</Code> + <CityName>Kokkedal (2980)</CityName> + <UTM_E>714900</UTM_E> + <UTM_N>6203200</UTM_N> + </PostalCode> + <PostalCode> + <Code>2990</Code> + <CityName>Nivå (2990)</CityName> + <UTM_E>718400</UTM_E> + <UTM_N>6205100</UTM_N> + </PostalCode> + <PostalCode> + <Code>3000</Code> + <CityName>Helsingør (3000)</CityName> + <UTM_E>720300</UTM_E> + <UTM_N>6216300</UTM_N> + </PostalCode> + <PostalCode> + <Code>3050</Code> + <CityName>Humlebæk (3050)</CityName> + <UTM_E>719200</UTM_E> + <UTM_N>6208100</UTM_N> + </PostalCode> + <PostalCode> + <Code>3060</Code> + <CityName>Espergærde (3060)</CityName> + <UTM_E>720700</UTM_E> + <UTM_N>6212000</UTM_N> + </PostalCode> + <PostalCode> + <Code>3070</Code> + <CityName>Snekkersten (3070)</CityName> + <UTM_E>723000</UTM_E> + <UTM_N>6213200</UTM_N> + </PostalCode> + <PostalCode> + <Code>3080</Code> + <CityName>Tikøb (3080)</CityName> + <UTM_E>713900</UTM_E> + <UTM_N>6214800</UTM_N> + </PostalCode> + <PostalCode> + <Code>3100</Code> + <CityName>Hornbæk (3100)</CityName> + <UTM_E>714300</UTM_E> + <UTM_N>6219600</UTM_N> + </PostalCode> + <PostalCode> + <Code>3120</Code> + <CityName>Dronningmølle (3120)</CityName> + <UTM_E>710000</UTM_E> + <UTM_N>6221500</UTM_N> + </PostalCode> + <PostalCode> + <Code>3140</Code> + <CityName>Ålsgårde (3140)</CityName> + <UTM_E>718600</UTM_E> + <UTM_N>6220000</UTM_N> + </PostalCode> + <PostalCode> + <Code>3150</Code> + <CityName>Hellebæk (3150)</CityName> + <UTM_E>720700</UTM_E> + <UTM_N>6219300</UTM_N> + </PostalCode> + <PostalCode> + <Code>3200</Code> + <CityName>Helsinge (3200)</CityName> + <UTM_E>698800</UTM_E> + <UTM_N>6214300</UTM_N> + </PostalCode> + <PostalCode> + <Code>3210</Code> + <CityName>Vejby (3210)</CityName> + <UTM_E>695300</UTM_E> + <UTM_N>6218700</UTM_N> + </PostalCode> + <PostalCode> + <Code>3220</Code> + <CityName>Tisvildeleje (3220)</CityName> + <UTM_E>690800</UTM_E> + <UTM_N>6215700</UTM_N> + </PostalCode> + <PostalCode> + <Code>3230</Code> + <CityName>Græsted (3230)</CityName> + <UTM_E>704900</UTM_E> + <UTM_N>6217700</UTM_N> + </PostalCode> + <PostalCode> + <Code>3250</Code> + <CityName>Gilleleje (3250)</CityName> + <UTM_E>705100</UTM_E> + <UTM_N>6222500</UTM_N> + </PostalCode> + <PostalCode> + <Code>3300</Code> + <CityName>Frederiksværk (3300)</CityName> + <UTM_E>688900</UTM_E> + <UTM_N>6208900</UTM_N> + </PostalCode> + <PostalCode> + <Code>3310</Code> + <CityName>Ølsted (3310)</CityName> + <UTM_E>691600</UTM_E> + <UTM_N>6201300</UTM_N> + </PostalCode> + <PostalCode> + <Code>3320</Code> + <CityName>Skævinge (3320)</CityName> + <UTM_E>695900</UTM_E> + <UTM_N>6202200</UTM_N> + </PostalCode> + <PostalCode> + <Code>3330</Code> + <CityName>Gørløse (3330)</CityName> + <UTM_E>699700</UTM_E> + <UTM_N>6198600</UTM_N> + </PostalCode> + <PostalCode> + <Code>3360</Code> + <CityName>Liseleje (3360)</CityName> + <UTM_E>684800</UTM_E> + <UTM_N>6211600</UTM_N> + </PostalCode> + <PostalCode> + <Code>3370</Code> + <CityName>Melby (3370)</CityName> + <UTM_E>684500</UTM_E> + <UTM_N>6209400</UTM_N> + </PostalCode> + <PostalCode> + <Code>3390</Code> + <CityName>Hundested (3390)</CityName> + <UTM_E>681400</UTM_E> + <UTM_N>6206800</UTM_N> + </PostalCode> + <PostalCode> + <Code>3400</Code> + <CityName>Hillerød (3400)</CityName> + <UTM_E>704700</UTM_E> + <UTM_N>6204200</UTM_N> + </PostalCode> + <PostalCode> + <Code>3450</Code> + <CityName>Allerød (3450)</CityName> + <UTM_E>708300</UTM_E> + <UTM_N>6197800</UTM_N> + </PostalCode> + <PostalCode> + <Code>3460</Code> + <CityName>Birkerød (3460)</CityName> + <UTM_E>713600</UTM_E> + <UTM_N>6194400</UTM_N> + </PostalCode> + <PostalCode> + <Code>3480</Code> + <CityName>Fredensborg (3480)</CityName> + <UTM_E>711900</UTM_E> + <UTM_N>6209100</UTM_N> + </PostalCode> + <PostalCode> + <Code>3490</Code> + <CityName>Kvistgård (3490)</CityName> + <UTM_E>717500</UTM_E> + <UTM_N>6212000</UTM_N> + </PostalCode> + <PostalCode> + <Code>3500</Code> + <CityName>Værløse (3500)</CityName> + <UTM_E>710600</UTM_E> + <UTM_N>6187200</UTM_N> + </PostalCode> + <PostalCode> + <Code>3520</Code> + <CityName>Farum (3520)</CityName> + <UTM_E>709500</UTM_E> + <UTM_N>6191500</UTM_N> + </PostalCode> + <PostalCode> + <Code>3540</Code> + <CityName>Lynge (3540)</CityName> + <UTM_E>704600</UTM_E> + <UTM_N>6194800</UTM_N> + </PostalCode> + <PostalCode> + <Code>3550</Code> + <CityName>Slangerup (3550)</CityName> + <UTM_E>699500</UTM_E> + <UTM_N>6194000</UTM_N> + </PostalCode> + <PostalCode> + <Code>3600</Code> + <CityName>Frederikssund (3600)</CityName> + <UTM_E>693200</UTM_E> + <UTM_N>6192900</UTM_N> + </PostalCode> + <PostalCode> + <Code>3630</Code> + <CityName>Jægerspris (3630)</CityName> + <UTM_E>685100</UTM_E> + <UTM_N>6194500</UTM_N> + </PostalCode> + <PostalCode> + <Code>3650</Code> + <CityName>Ølstykke (3650)</CityName> + <UTM_E>696500</UTM_E> + <UTM_N>6187600</UTM_N> + </PostalCode> + <PostalCode> + <Code>3660</Code> + <CityName>Stenløse (3660)</CityName> + <UTM_E>699800</UTM_E> + <UTM_N>6186600</UTM_N> + </PostalCode> + <PostalCode> + <Code>3670</Code> + <CityName>Veksø Sjælland (3670)</CityName> + <UTM_E>701600</UTM_E> + <UTM_N>6183600</UTM_N> + </PostalCode> + <PostalCode> + <Code>3700</Code> + <CityName>Rønne (3700)</CityName> + <UTM_E>868200</UTM_E> + <UTM_N>6123800</UTM_N> + </PostalCode> + <PostalCode> + <Code>3720</Code> + <CityName>Aakirkeby (3720)</CityName> + <UTM_E>876200</UTM_E> + <UTM_N>6119300</UTM_N> + </PostalCode> + <PostalCode> + <Code>3730</Code> + <CityName>Nexø (3730)</CityName> + <UTM_E>887400</UTM_E> + <UTM_N>6117200</UTM_N> + </PostalCode> + <PostalCode> + <Code>3740</Code> + <CityName>Svaneke (3740)</CityName> + <UTM_E>888200</UTM_E> + <UTM_N>6126400</UTM_N> + </PostalCode> + <PostalCode> + <Code>3751</Code> + <CityName>Østermarie (3751)</CityName> + <UTM_E>882800</UTM_E> + <UTM_N>6126800</UTM_N> + </PostalCode> + <PostalCode> + <Code>3760</Code> + <CityName>Gudhjem (3760)</CityName> + <UTM_E>876000</UTM_E> + <UTM_N>6132200</UTM_N> + </PostalCode> + <PostalCode> + <Code>3770</Code> + <CityName>Allinge (3770)</CityName> + <UTM_E>867400</UTM_E> + <UTM_N>6139300</UTM_N> + </PostalCode> + <PostalCode> + <Code>3782</Code> + <CityName>Klemensker (3782)</CityName> + <UTM_E>869500</UTM_E> + <UTM_N>6131600</UTM_N> + </PostalCode> + <PostalCode> + <Code>3790</Code> + <CityName>Hasle (3790)</CityName> + <UTM_E>863900</UTM_E> + <UTM_N>6133500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4000</Code> + <CityName>Roskilde (4000)</CityName> + <UTM_E>693200</UTM_E> + <UTM_N>6171300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4040</Code> + <CityName>Jyllinge (4040)</CityName> + <UTM_E>693800</UTM_E> + <UTM_N>6183500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4050</Code> + <CityName>Skibby (4050)</CityName> + <UTM_E>685000</UTM_E> + <UTM_N>6183600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4060</Code> + <CityName>Kirke Såby (4060)</CityName> + <UTM_E>680300</UTM_E> + <UTM_N>6171300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4070</Code> + <CityName>Kirke Hyllinge (4070)</CityName> + <UTM_E>681700</UTM_E> + <UTM_N>6177400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4100</Code> + <CityName>Ringsted (4100)</CityName> + <UTM_E>679700</UTM_E> + <UTM_N>6148400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4105</Code> + <CityName>Ringsted (4105)</CityName> + <UTM_E>679700</UTM_E> + <UTM_N>6148400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4129</Code> + <CityName>Ringsted (4129)</CityName> + <UTM_E>679700</UTM_E> + <UTM_N>6148400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4130</Code> + <CityName>Viby Sjælland (4130)</CityName> + <UTM_E>690200</UTM_E> + <UTM_N>6159200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4140</Code> + <CityName>Borup (4140)</CityName> + <UTM_E>686900</UTM_E> + <UTM_N>6154900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4160</Code> + <CityName>Herlufmagle (4160)</CityName> + <UTM_E>675000</UTM_E> + <UTM_N>6135000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4171</Code> + <CityName>Glumsø (4171)</CityName> + <UTM_E>668900</UTM_E> + <UTM_N>6139200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4173</Code> + <CityName>Fjenneslev (4173)</CityName> + <UTM_E>668200</UTM_E> + <UTM_N>6146700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4174</Code> + <CityName>Jystrup Midtsj (4174)</CityName> + <UTM_E>680500</UTM_E> + <UTM_N>6157800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4180</Code> + <CityName>Sorø (4180)</CityName> + <UTM_E>661600</UTM_E> + <UTM_N>6147700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4190</Code> + <CityName>Munke Bjergby (4190)</CityName> + <UTM_E>657900</UTM_E> + <UTM_N>6153600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4200</Code> + <CityName>Slagelse (4200)</CityName> + <UTM_E>648300</UTM_E> + <UTM_N>6142200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4220</Code> + <CityName>Korsør (4220)</CityName> + <UTM_E>637200</UTM_E> + <UTM_N>6135500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4230</Code> + <CityName>Skælskør (4230)</CityName> + <UTM_E>646600</UTM_E> + <UTM_N>6123400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4241</Code> + <CityName>Vemmelev (4241)</CityName> + <UTM_E>642400</UTM_E> + <UTM_N>6137400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4242</Code> + <CityName>Boeslunde (4242)</CityName> + <UTM_E>643000</UTM_E> + <UTM_N>6131200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4243</Code> + <CityName>Rude (4243)</CityName> + <UTM_E>657100</UTM_E> + <UTM_N>6123400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4250</Code> + <CityName>Fuglebjerg (4250)</CityName> + <UTM_E>662300</UTM_E> + <UTM_N>6134000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4261</Code> + <CityName>Dalmose (4261)</CityName> + <UTM_E>652900</UTM_E> + <UTM_N>6128700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4262</Code> + <CityName>Sandved (4262)</CityName> + <UTM_E>652900</UTM_E> + <UTM_N>6128700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4270</Code> + <CityName>Høng (4270)</CityName> + <UTM_E>644900</UTM_E> + <UTM_N>6154100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4281</Code> + <CityName>Gørlev (4281)</CityName> + <UTM_E>637700</UTM_E> + <UTM_N>6156600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4291</Code> + <CityName>Ruds Vedby (4291)</CityName> + <UTM_E>649800</UTM_E> + <UTM_N>6158800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4293</Code> + <CityName>Dianalund (4293)</CityName> + <UTM_E>655900</UTM_E> + <UTM_N>6158800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4295</Code> + <CityName>Stenlille (4295)</CityName> + <UTM_E>662700</UTM_E> + <UTM_N>6159400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4296</Code> + <CityName>Nyrup (4296)</CityName> + <UTM_E>662700</UTM_E> + <UTM_N>6159400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4300</Code> + <CityName>Holbæk (4300)</CityName> + <UTM_E>670300</UTM_E> + <UTM_N>6178300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4320</Code> + <CityName>Lejre (4320)</CityName> + <UTM_E>686200</UTM_E> + <UTM_N>6165600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4330</Code> + <CityName>Hvalsø (4330)</CityName> + <UTM_E>680400</UTM_E> + <UTM_N>6164500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4340</Code> + <CityName>Tølløse (4340)</CityName> + <UTM_E>672700</UTM_E> + <UTM_N>6167800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4350</Code> + <CityName>Ugerløse (4350)</CityName> + <UTM_E>664600</UTM_E> + <UTM_N>6165100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4360</Code> + <CityName>Kirke Eskilstrup (4360)</CityName> + <UTM_E>674500</UTM_E> + <UTM_N>6162000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4370</Code> + <CityName>Store Merløse (4370)</CityName> + <UTM_E>671800</UTM_E> + <UTM_N>6159500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4390</Code> + <CityName>Vipperød (4390)</CityName> + <UTM_E>672500</UTM_E> + <UTM_N>6172800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4400</Code> + <CityName>Kalundborg (4400)</CityName> + <UTM_E>629900</UTM_E> + <UTM_N>6172000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4420</Code> + <CityName>Regstrup (4420)</CityName> + <UTM_E>662500</UTM_E> + <UTM_N>6172800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4440</Code> + <CityName>Mørkøv (4440)</CityName> + <UTM_E>656900</UTM_E> + <UTM_N>6169200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4450</Code> + <CityName>Jyderup (4450)</CityName> + <UTM_E>650000</UTM_E> + <UTM_N>6169900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4460</Code> + <CityName>Snertinge (4460)</CityName> + <UTM_E>649000</UTM_E> + <UTM_N>6176800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4470</Code> + <CityName>Svebølle (4470)</CityName> + <UTM_E>646300</UTM_E> + <UTM_N>6168100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4480</Code> + <CityName>Store Fuglede (4480)</CityName> + <UTM_E>638700</UTM_E> + <UTM_N>6160600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4490</Code> + <CityName>Jerslev Sjælland (4490)</CityName> + <UTM_E>640700</UTM_E> + <UTM_N>6165100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4500</Code> + <CityName>Nykøbing Sj (4500)</CityName> + <UTM_E>661600</UTM_E> + <UTM_N>6197000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4520</Code> + <CityName>Svinninge (4520)</CityName> + <UTM_E>655300</UTM_E> + <UTM_N>6180100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4532</Code> + <CityName>Gislinge (4532)</CityName> + <UTM_E>660900</UTM_E> + <UTM_N>6181100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4534</Code> + <CityName>Hørve (4534)</CityName> + <UTM_E>651700</UTM_E> + <UTM_N>6182200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4540</Code> + <CityName>Fårevejle (4540)</CityName> + <UTM_E>652500</UTM_E> + <UTM_N>6188100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4550</Code> + <CityName>Asnæs (4550)</CityName> + <UTM_E>656200</UTM_E> + <UTM_N>6188400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4560</Code> + <CityName>Vig (4560)</CityName> + <UTM_E>663500</UTM_E> + <UTM_N>6192100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4571</Code> + <CityName>Grevinge (4571)</CityName> + <UTM_E>662200</UTM_E> + <UTM_N>6187500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4572</Code> + <CityName>Nørre Asmindrup (4572)</CityName> + <UTM_E>662700</UTM_E> + <UTM_N>6195900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4573</Code> + <CityName>Højby (4573)</CityName> + <UTM_E>660600</UTM_E> + <UTM_N>6199000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4581</Code> + <CityName>Rørvig (4581)</CityName> + <UTM_E>671600</UTM_E> + <UTM_N>6204500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4583</Code> + <CityName>Sjællands Odde (4583)</CityName> + <UTM_E>646800</UTM_E> + <UTM_N>6206700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4591</Code> + <CityName>Føllenslev (4591)</CityName> + <UTM_E>646600</UTM_E> + <UTM_N>6178600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4592</Code> + <CityName>Sejerø (4592)</CityName> + <UTM_E>634200</UTM_E> + <UTM_N>6195800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4593</Code> + <CityName>Eskebjerg (4593)</CityName> + <UTM_E>639900</UTM_E> + <UTM_N>6177100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4600</Code> + <CityName>Køge (4600)</CityName> + <UTM_E>699700</UTM_E> + <UTM_N>6148800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4621</Code> + <CityName>Gadstrup (4621)</CityName> + <UTM_E>695800</UTM_E> + <UTM_N>6162800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4622</Code> + <CityName>Havdrup (4622)</CityName> + <UTM_E>697300</UTM_E> + <UTM_N>6160300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4623</Code> + <CityName>Lille Skensved (4623)</CityName> + <UTM_E>696700</UTM_E> + <UTM_N>6156200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4632</Code> + <CityName>Bjæverskov (4632)</CityName> + <UTM_E>692000</UTM_E> + <UTM_N>6149400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4640</Code> + <CityName>Faxe (4640)</CityName> + <UTM_E>700700</UTM_E> + <UTM_N>6124600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4652</Code> + <CityName>Hårlev (4652)</CityName> + <UTM_E>703000</UTM_E> + <UTM_N>6138000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4653</Code> + <CityName>Karise (4653)</CityName> + <UTM_E>702000</UTM_E> + <UTM_N>6134100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4654</Code> + <CityName>Faxe Ladeplads (4654)</CityName> + <UTM_E>700100</UTM_E> + <UTM_N>6123600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4660</Code> + <CityName>Store Heddinge (4660)</CityName> + <UTM_E>712600</UTM_E> + <UTM_N>6134900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4671</Code> + <CityName>Strøby (4671)</CityName> + <UTM_E>708100</UTM_E> + <UTM_N>6143100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4672</Code> + <CityName>Klippinge (4672)</CityName> + <UTM_E>710900</UTM_E> + <UTM_N>6140300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4673</Code> + <CityName>Rødvig Stevns (4673)</CityName> + <UTM_E>713300</UTM_E> + <UTM_N>6129400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4681</Code> + <CityName>Herfølge (4681)</CityName> + <UTM_E>696900</UTM_E> + <UTM_N>6145100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4682</Code> + <CityName>Tureby (4682)</CityName> + <UTM_E>694500</UTM_E> + <UTM_N>6140100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4683</Code> + <CityName>Rønnede (4683)</CityName> + <UTM_E>691500</UTM_E> + <UTM_N>6126700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4684</Code> + <CityName>Holmegaard (4684)</CityName> + <UTM_E>683700</UTM_E> + <UTM_N>6127500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4690</Code> + <CityName>Haslev (4690)</CityName> + <UTM_E>687300</UTM_E> + <UTM_N>6135700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4700</Code> + <CityName>Næstved (4700)</CityName> + <UTM_E>673300</UTM_E> + <UTM_N>6124300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4720</Code> + <CityName>Præstø (4720)</CityName> + <UTM_E>694400</UTM_E> + <UTM_N>6112200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4733</Code> + <CityName>Tappernøje (4733)</CityName> + <UTM_E>689100</UTM_E> + <UTM_N>6119000</UTM_N> + </PostalCode> + <PostalCode> + <Code>4735</Code> + <CityName>Mern (4735)</CityName> + <UTM_E>695200</UTM_E> + <UTM_N>6105200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4736</Code> + <CityName>Karrebæksminde (4736)</CityName> + <UTM_E>668700</UTM_E> + <UTM_N>6118400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4750</Code> + <CityName>Lundby (4750)</CityName> + <UTM_E>680800</UTM_E> + <UTM_N>6111700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4760</Code> + <CityName>Vordingborg (4760)</CityName> + <UTM_E>679200</UTM_E> + <UTM_N>6101800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4771</Code> + <CityName>Kalvehave (4771)</CityName> + <UTM_E>700200</UTM_E> + <UTM_N>6100900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4772</Code> + <CityName>Langebæk (4772)</CityName> + <UTM_E>696700</UTM_E> + <UTM_N>6098900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4773</Code> + <CityName>Stensved (4773)</CityName> + <UTM_E>694300</UTM_E> + <UTM_N>6097700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4780</Code> + <CityName>Stege (4780)</CityName> + <UTM_E>708700</UTM_E> + <UTM_N>6097400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4791</Code> + <CityName>Borre (4791)</CityName> + <UTM_E>721900</UTM_E> + <UTM_N>6098600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4792</Code> + <CityName>Askeby (4792)</CityName> + <UTM_E>702400</UTM_E> + <UTM_N>6089700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4793</Code> + <CityName>Bogø By (4793)</CityName> + <UTM_E>693400</UTM_E> + <UTM_N>6091700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4800</Code> + <CityName>Nykøbing F (4800)</CityName> + <UTM_E>688600</UTM_E> + <UTM_N>6074700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4840</Code> + <CityName>Nørre Alslev (4840)</CityName> + <UTM_E>681200</UTM_E> + <UTM_N>6088100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4850</Code> + <CityName>Stubbekøbing (4850)</CityName> + <UTM_E>694500</UTM_E> + <UTM_N>6085600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4862</Code> + <CityName>Guldborg (4862)</CityName> + <UTM_E>673700</UTM_E> + <UTM_N>6082900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4863</Code> + <CityName>Eskilstrup (4863)</CityName> + <UTM_E>685200</UTM_E> + <UTM_N>6082800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4871</Code> + <CityName>Horbelev (4871)</CityName> + <UTM_E>696000</UTM_E> + <UTM_N>6079700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4872</Code> + <CityName>Idestrup (4872)</CityName> + <UTM_E>691200</UTM_E> + <UTM_N>6069200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4873</Code> + <CityName>Væggerløse (4873)</CityName> + <UTM_E>687600</UTM_E> + <UTM_N>6064600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4874</Code> + <CityName>Gedser (4874)</CityName> + <UTM_E>687600</UTM_E> + <UTM_N>6055700</UTM_N> + </PostalCode> + <PostalCode> + <Code>4880</Code> + <CityName>Nysted (4880)</CityName> + <UTM_E>675800</UTM_E> + <UTM_N>6064300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4891</Code> + <CityName>Toreby L (4891)</CityName> + <UTM_E>677800</UTM_E> + <UTM_N>6071900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4892</Code> + <CityName>Kettinge (4892)</CityName> + <UTM_E>677200</UTM_E> + <UTM_N>6065800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4894</Code> + <CityName>Øster Ulslev (4894)</CityName> + <UTM_E>667300</UTM_E> + <UTM_N>6064800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4895</Code> + <CityName>Errindlev (4895)</CityName> + <UTM_E>661600</UTM_E> + <UTM_N>6060300</UTM_N> + </PostalCode> + <PostalCode> + <Code>4900</Code> + <CityName>Nakskov (4900)</CityName> + <UTM_E>634300</UTM_E> + <UTM_N>6079400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4912</Code> + <CityName>Harpelunde (4912)</CityName> + <UTM_E>631700</UTM_E> + <UTM_N>6084500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4913</Code> + <CityName>Horslunde (4913)</CityName> + <UTM_E>641200</UTM_E> + <UTM_N>6088400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4920</Code> + <CityName>Søllested (4920)</CityName> + <UTM_E>646800</UTM_E> + <UTM_N>6075100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4930</Code> + <CityName>Maribo (4930)</CityName> + <UTM_E>657700</UTM_E> + <UTM_N>6077500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4941</Code> + <CityName>Bandholm (4941)</CityName> + <UTM_E>657700</UTM_E> + <UTM_N>6077500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4943</Code> + <CityName>Torrig L (4943)</CityName> + <UTM_E>647200</UTM_E> + <UTM_N>6086900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4944</Code> + <CityName>Fejø (4944)</CityName> + <UTM_E>653800</UTM_E> + <UTM_N>6091600</UTM_N> + </PostalCode> + <PostalCode> + <Code>4951</Code> + <CityName>Nørreballe (4951)</CityName> + <UTM_E>655000</UTM_E> + <UTM_N>6077100</UTM_N> + </PostalCode> + <PostalCode> + <Code>4952</Code> + <CityName>Stokkemarke (4952)</CityName> + <UTM_E>651200</UTM_E> + <UTM_N>6080500</UTM_N> + </PostalCode> + <PostalCode> + <Code>4953</Code> + <CityName>Vesterborg (4953)</CityName> + <UTM_E>647500</UTM_E> + <UTM_N>6082400</UTM_N> + </PostalCode> + <PostalCode> + <Code>4960</Code> + <CityName>Holeby (4960)</CityName> + <UTM_E>660700</UTM_E> + <UTM_N>6063900</UTM_N> + </PostalCode> + <PostalCode> + <Code>4970</Code> + <CityName>Rødby (4970)</CityName> + <UTM_E>653600</UTM_E> + <UTM_N>6062800</UTM_N> + </PostalCode> + <PostalCode> + <Code>4983</Code> + <CityName>Dannemare (4983)</CityName> + <UTM_E>640600</UTM_E> + <UTM_N>6070200</UTM_N> + </PostalCode> + <PostalCode> + <Code>4990</Code> + <CityName>Sakskøbing (4990)</CityName> + <UTM_E>670600</UTM_E> + <UTM_N>6075500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5000</Code> + <CityName>Odense C (5000)</CityName> + <UTM_E>587700</UTM_E> + <UTM_N>6140700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5200</Code> + <CityName>Odense V (5200)</CityName> + <UTM_E>582600</UTM_E> + <UTM_N>6139600</UTM_N> + </PostalCode> + <PostalCode> + <Code>5210</Code> + <CityName>Odense NV (5210)</CityName> + <UTM_E>581500</UTM_E> + <UTM_N>6142400</UTM_N> + </PostalCode> + <PostalCode> + <Code>5220</Code> + <CityName>Odense SØ (5220)</CityName> + <UTM_E>594500</UTM_E> + <UTM_N>6135900</UTM_N> + </PostalCode> + <PostalCode> + <Code>5230</Code> + <CityName>Odense M (5230)</CityName> + <UTM_E>588700</UTM_E> + <UTM_N>6136800</UTM_N> + </PostalCode> + <PostalCode> + <Code>5240</Code> + <CityName>Odense NØ (5240)</CityName> + <UTM_E>592200</UTM_E> + <UTM_N>6142500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5250</Code> + <CityName>Odense SV (5250)</CityName> + <UTM_E>582600</UTM_E> + <UTM_N>6134400</UTM_N> + </PostalCode> + <PostalCode> + <Code>5260</Code> + <CityName>Odense S (5260)</CityName> + <UTM_E>586500</UTM_E> + <UTM_N>6132300</UTM_N> + </PostalCode> + <PostalCode> + <Code>5270</Code> + <CityName>Odense N (5270)</CityName> + <UTM_E>584800</UTM_E> + <UTM_N>6145200</UTM_N> + </PostalCode> + <PostalCode> + <Code>5290</Code> + <CityName>Marslev (5290)</CityName> + <UTM_E>596500</UTM_E> + <UTM_N>6140000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5300</Code> + <CityName>Kerteminde (5300)</CityName> + <UTM_E>603400</UTM_E> + <UTM_N>6146300</UTM_N> + </PostalCode> + <PostalCode> + <Code>5320</Code> + <CityName>Agedrup (5320)</CityName> + <UTM_E>594000</UTM_E> + <UTM_N>6143900</UTM_N> + </PostalCode> + <PostalCode> + <Code>5330</Code> + <CityName>Munkebo (5330)</CityName> + <UTM_E>596800</UTM_E> + <UTM_N>6145800</UTM_N> + </PostalCode> + <PostalCode> + <Code>5350</Code> + <CityName>Rynkeby (5350)</CityName> + <UTM_E>601500</UTM_E> + <UTM_N>6140500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5370</Code> + <CityName>Mesinge (5370)</CityName> + <UTM_E>602800</UTM_E> + <UTM_N>6151900</UTM_N> + </PostalCode> + <PostalCode> + <Code>5380</Code> + <CityName>Dalby (5380)</CityName> + <UTM_E>607100</UTM_E> + <UTM_N>6153200</UTM_N> + </PostalCode> + <PostalCode> + <Code>5390</Code> + <CityName>Martofte (5390)</CityName> + <UTM_E>603000</UTM_E> + <UTM_N>6159900</UTM_N> + </PostalCode> + <PostalCode> + <Code>5400</Code> + <CityName>Bogense (5400)</CityName> + <UTM_E>571200</UTM_E> + <UTM_N>6157400</UTM_N> + </PostalCode> + <PostalCode> + <Code>5450</Code> + <CityName>Otterup (5450)</CityName> + <UTM_E>589200</UTM_E> + <UTM_N>6156500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5462</Code> + <CityName>Morud (5462)</CityName> + <UTM_E>575000</UTM_E> + <UTM_N>6143700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5463</Code> + <CityName>Harndrup (5463)</CityName> + <UTM_E>564900</UTM_E> + <UTM_N>6146300</UTM_N> + </PostalCode> + <PostalCode> + <Code>5464</Code> + <CityName>Brenderup Fyn (5464)</CityName> + <UTM_E>562300</UTM_E> + <UTM_N>6150100</UTM_N> + </PostalCode> + <PostalCode> + <Code>5466</Code> + <CityName>Asperup (5466)</CityName> + <UTM_E>556400</UTM_E> + <UTM_N>6150500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5471</Code> + <CityName>Søndersø (5471)</CityName> + <UTM_E>573900</UTM_E> + <UTM_N>6150300</UTM_N> + </PostalCode> + <PostalCode> + <Code>5474</Code> + <CityName>Veflinge (5474)</CityName> + <UTM_E>571900</UTM_E> + <UTM_N>6146600</UTM_N> + </PostalCode> + <PostalCode> + <Code>5485</Code> + <CityName>Skamby (5485)</CityName> + <UTM_E>580400</UTM_E> + <UTM_N>6155700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5491</Code> + <CityName>Blommenslyst (5491)</CityName> + <UTM_E>578600</UTM_E> + <UTM_N>6138300</UTM_N> + </PostalCode> + <PostalCode> + <Code>5492</Code> + <CityName>Vissenbjerg (5492)</CityName> + <UTM_E>571700</UTM_E> + <UTM_N>6139400</UTM_N> + </PostalCode> + <PostalCode> + <Code>5500</Code> + <CityName>Middelfart (5500)</CityName> + <UTM_E>548000</UTM_E> + <UTM_N>6150900</UTM_N> + </PostalCode> + <PostalCode> + <Code>5540</Code> + <CityName>Ullerslev (5540)</CityName> + <UTM_E>605700</UTM_E> + <UTM_N>6136900</UTM_N> + </PostalCode> + <PostalCode> + <Code>5550</Code> + <CityName>Langeskov (5550)</CityName> + <UTM_E>599900</UTM_E> + <UTM_N>6135700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5560</Code> + <CityName>Aarup (5560)</CityName> + <UTM_E>565400</UTM_E> + <UTM_N>6138300</UTM_N> + </PostalCode> + <PostalCode> + <Code>5580</Code> + <CityName>Nørre Aaby (5580)</CityName> + <UTM_E>551800</UTM_E> + <UTM_N>6143800</UTM_N> + </PostalCode> + <PostalCode> + <Code>5591</Code> + <CityName>Gelsted (5591)</CityName> + <UTM_E>559800</UTM_E> + <UTM_N>6139200</UTM_N> + </PostalCode> + <PostalCode> + <Code>5592</Code> + <CityName>Ejby (5592)</CityName> + <UTM_E>555700</UTM_E> + <UTM_N>6140000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5600</Code> + <CityName>Faaborg (5600)</CityName> + <UTM_E>578900</UTM_E> + <UTM_N>6107000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5610</Code> + <CityName>Assens (5610)</CityName> + <UTM_E>558000</UTM_E> + <UTM_N>6126700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5620</Code> + <CityName>Glamsbjerg (5620)</CityName> + <UTM_E>569100</UTM_E> + <UTM_N>6127000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5631</Code> + <CityName>Ebberup (5631)</CityName> + <UTM_E>563600</UTM_E> + <UTM_N>6113700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5642</Code> + <CityName>Millinge (5642)</CityName> + <UTM_E>572900</UTM_E> + <UTM_N>6111700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5672</Code> + <CityName>Broby (5672)</CityName> + <UTM_E>580100</UTM_E> + <UTM_N>6120400</UTM_N> + </PostalCode> + <PostalCode> + <Code>5683</Code> + <CityName>Haarby (5683)</CityName> + <UTM_E>569900</UTM_E> + <UTM_N>6118200</UTM_N> + </PostalCode> + <PostalCode> + <Code>5690</Code> + <CityName>Tommerup (5690)</CityName> + <UTM_E>576700</UTM_E> + <UTM_N>6130600</UTM_N> + </PostalCode> + <PostalCode> + <Code>5700</Code> + <CityName>Svendborg (5700)</CityName> + <UTM_E>597600</UTM_E> + <UTM_N>6100500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5750</Code> + <CityName>Ringe (5750)</CityName> + <UTM_E>590900</UTM_E> + <UTM_N>6120600</UTM_N> + </PostalCode> + <PostalCode> + <Code>5762</Code> + <CityName>Vester Skerninge (5762)</CityName> + <UTM_E>592500</UTM_E> + <UTM_N>6104200</UTM_N> + </PostalCode> + <PostalCode> + <Code>5771</Code> + <CityName>Stenstrup (5771)</CityName> + <UTM_E>595400</UTM_E> + <UTM_N>6109900</UTM_N> + </PostalCode> + <PostalCode> + <Code>5772</Code> + <CityName>Kværndrup (5772)</CityName> + <UTM_E>597300</UTM_E> + <UTM_N>6116700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5792</Code> + <CityName>Årslev (5792)</CityName> + <UTM_E>591400</UTM_E> + <UTM_N>6128700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5800</Code> + <CityName>Nyborg (5800)</CityName> + <UTM_E>610000</UTM_E> + <UTM_N>6133000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5853</Code> + <CityName>Ørbæk (5853)</CityName> + <UTM_E>603000</UTM_E> + <UTM_N>6123000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5854</Code> + <CityName>Gislev (5854)</CityName> + <UTM_E>601400</UTM_E> + <UTM_N>6119600</UTM_N> + </PostalCode> + <PostalCode> + <Code>5856</Code> + <CityName>Ryslinge (5856)</CityName> + <UTM_E>598400</UTM_E> + <UTM_N>6123000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5863</Code> + <CityName>Ferritslev Fyn (5863)</CityName> + <UTM_E>601700</UTM_E> + <UTM_N>6130700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5871</Code> + <CityName>Frørup (5871)</CityName> + <UTM_E>613200</UTM_E> + <UTM_N>6122400</UTM_N> + </PostalCode> + <PostalCode> + <Code>5874</Code> + <CityName>Hesselager (5874)</CityName> + <UTM_E>610400</UTM_E> + <UTM_N>6115100</UTM_N> + </PostalCode> + <PostalCode> + <Code>5881</Code> + <CityName>Skårup Fyn (5881)</CityName> + <UTM_E>607600</UTM_E> + <UTM_N>6105700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5882</Code> + <CityName>Vejstrup (5882)</CityName> + <UTM_E>607200</UTM_E> + <UTM_N>6108200</UTM_N> + </PostalCode> + <PostalCode> + <Code>5883</Code> + <CityName>Oure (5883)</CityName> + <UTM_E>609000</UTM_E> + <UTM_N>6110000</UTM_N> + </PostalCode> + <PostalCode> + <Code>5884</Code> + <CityName>Gudme (5884)</CityName> + <UTM_E>608200</UTM_E> + <UTM_N>6113500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5892</Code> + <CityName>Gudbjerg Sydfyn (5892)</CityName> + <UTM_E>603800</UTM_E> + <UTM_N>6113700</UTM_N> + </PostalCode> + <PostalCode> + <Code>5900</Code> + <CityName>Rudkøbing (5900)</CityName> + <UTM_E>609100</UTM_E> + <UTM_N>6085100</UTM_N> + </PostalCode> + <PostalCode> + <Code>5932</Code> + <CityName>Humble (5932)</CityName> + <UTM_E>607800</UTM_E> + <UTM_N>6075600</UTM_N> + </PostalCode> + <PostalCode> + <Code>5935</Code> + <CityName>Bagenkop (5935)</CityName> + <UTM_E>608700</UTM_E> + <UTM_N>6068200</UTM_N> + </PostalCode> + <PostalCode> + <Code>5953</Code> + <CityName>Tranekær (5953)</CityName> + <UTM_E>617300</UTM_E> + <UTM_N>6102400</UTM_N> + </PostalCode> + <PostalCode> + <Code>5960</Code> + <CityName>Marstal (5960)</CityName> + <UTM_E>595000</UTM_E> + <UTM_N>6083500</UTM_N> + </PostalCode> + <PostalCode> + <Code>5970</Code> + <CityName>Ærøskøbing (5970)</CityName> + <UTM_E>587000</UTM_E> + <UTM_N>6080800</UTM_N> + </PostalCode> + <PostalCode> + <Code>5985</Code> + <CityName>Søby Ærø (5985)</CityName> + <UTM_E>580800</UTM_E> + <UTM_N>6088700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6000</Code> + <CityName>Kolding (6000)</CityName> + <UTM_E>530200</UTM_E> + <UTM_N>6149200</UTM_N> + </PostalCode> + <PostalCode> + <Code>6040</Code> + <CityName>Egtved (6040)</CityName> + <UTM_E>521500</UTM_E> + <UTM_N>6161800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6051</Code> + <CityName>Almind (6051)</CityName> + <UTM_E>530800</UTM_E> + <UTM_N>6156900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6052</Code> + <CityName>Viuf (6052)</CityName> + <UTM_E>531100</UTM_E> + <UTM_N>6162000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6064</Code> + <CityName>Jordrup (6064)</CityName> + <UTM_E>519600</UTM_E> + <UTM_N>6155800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6070</Code> + <CityName>Christiansfeld (6070)</CityName> + <UTM_E>528500</UTM_E> + <UTM_N>6135500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6091</Code> + <CityName>Bjert (6091)</CityName> + <UTM_E>535300</UTM_E> + <UTM_N>6145700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6092</Code> + <CityName>Sønder Stenderup (6092)</CityName> + <UTM_E>540000</UTM_E> + <UTM_N>6146400</UTM_N> + </PostalCode> + <PostalCode> + <Code>6093</Code> + <CityName>Sjølund (6093)</CityName> + <UTM_E>534500</UTM_E> + <UTM_N>6139900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6094</Code> + <CityName>Hejls (6094)</CityName> + <UTM_E>536900</UTM_E> + <UTM_N>6137100</UTM_N> + </PostalCode> + <PostalCode> + <Code>6100</Code> + <CityName>Haderslev (6100)</CityName> + <UTM_E>536800</UTM_E> + <UTM_N>6121900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6200</Code> + <CityName>Aabenraa (6200)</CityName> + <UTM_E>528500</UTM_E> + <UTM_N>6098200</UTM_N> + </PostalCode> + <PostalCode> + <Code>6230</Code> + <CityName>Rødekro (6230)</CityName> + <UTM_E>516600</UTM_E> + <UTM_N>6104300</UTM_N> + </PostalCode> + <PostalCode> + <Code>6240</Code> + <CityName>Løgumkloster (6240)</CityName> + <UTM_E>500000</UTM_E> + <UTM_N>6100700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6261</Code> + <CityName>Bredebro (6261)</CityName> + <UTM_E>483700</UTM_E> + <UTM_N>6103300</UTM_N> + </PostalCode> + <PostalCode> + <Code>6270</Code> + <CityName>Tønder (6270)</CityName> + <UTM_E>492800</UTM_E> + <UTM_N>6090200</UTM_N> + </PostalCode> + <PostalCode> + <Code>6280</Code> + <CityName>Højer (6280)</CityName> + <UTM_E>482200</UTM_E> + <UTM_N>6091600</UTM_N> + </PostalCode> + <PostalCode> + <Code>6300</Code> + <CityName>Gråsten (6300)</CityName> + <UTM_E>531900</UTM_E> + <UTM_N>6084900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6310</Code> + <CityName>Broager (6310)</CityName> + <UTM_E>544000</UTM_E> + <UTM_N>6081500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6320</Code> + <CityName>Egernsund (6320)</CityName> + <UTM_E>539500</UTM_E> + <UTM_N>6084300</UTM_N> + </PostalCode> + <PostalCode> + <Code>6330</Code> + <CityName>Padborg (6330)</CityName> + <UTM_E>521100</UTM_E> + <UTM_N>6079700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6340</Code> + <CityName>Kruså (6340)</CityName> + <UTM_E>526700</UTM_E> + <UTM_N>6079000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6360</Code> + <CityName>Tinglev (6360)</CityName> + <UTM_E>514800</UTM_E> + <UTM_N>6086400</UTM_N> + </PostalCode> + <PostalCode> + <Code>6372</Code> + <CityName>Bylderup-Bov (6372)</CityName> + <UTM_E>506900</UTM_E> + <UTM_N>6090700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6392</Code> + <CityName>Bolderslev (6392)</CityName> + <UTM_E>516600</UTM_E> + <UTM_N>6094200</UTM_N> + </PostalCode> + <PostalCode> + <Code>6400</Code> + <CityName>Sønderborg (6400)</CityName> + <UTM_E>548800</UTM_E> + <UTM_N>6089900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6430</Code> + <CityName>Nordborg (6430)</CityName> + <UTM_E>550300</UTM_E> + <UTM_N>6098100</UTM_N> + </PostalCode> + <PostalCode> + <Code>6440</Code> + <CityName>Augustenborg (6440)</CityName> + <UTM_E>559100</UTM_E> + <UTM_N>6092700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6470</Code> + <CityName>Sydals (6470)</CityName> + <UTM_E>561500</UTM_E> + <UTM_N>6084400</UTM_N> + </PostalCode> + <PostalCode> + <Code>6500</Code> + <CityName>Vojens (6500)</CityName> + <UTM_E>515600</UTM_E> + <UTM_N>6119500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6510</Code> + <CityName>Gram (6510)</CityName> + <UTM_E>500000</UTM_E> + <UTM_N>6124700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6520</Code> + <CityName>Toftlund (6520)</CityName> + <UTM_E>500900</UTM_E> + <UTM_N>6115400</UTM_N> + </PostalCode> + <PostalCode> + <Code>6534</Code> + <CityName>Agerskov (6534)</CityName> + <UTM_E>510500</UTM_E> + <UTM_N>6109600</UTM_N> + </PostalCode> + <PostalCode> + <Code>6535</Code> + <CityName>Branderup J (6535)</CityName> + <UTM_E>503600</UTM_E> + <UTM_N>6107500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6541</Code> + <CityName>Bevtoft (6541)</CityName> + <UTM_E>511900</UTM_E> + <UTM_N>6116200</UTM_N> + </PostalCode> + <PostalCode> + <Code>6560</Code> + <CityName>Sommersted (6560)</CityName> + <UTM_E>516900</UTM_E> + <UTM_N>6132800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6580</Code> + <CityName>Vamdrup (6580)</CityName> + <UTM_E>520600</UTM_E> + <UTM_N>6141000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6600</Code> + <CityName>Vejen (6600)</CityName> + <UTM_E>508900</UTM_E> + <UTM_N>6149500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6621</Code> + <CityName>Gesten (6621)</CityName> + <UTM_E>512800</UTM_E> + <UTM_N>6154500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6622</Code> + <CityName>Bække (6622)</CityName> + <UTM_E>509200</UTM_E> + <UTM_N>6158800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6623</Code> + <CityName>Vorbasse (6623)</CityName> + <UTM_E>505000</UTM_E> + <UTM_N>6166700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6630</Code> + <CityName>Rødding (6630)</CityName> + <UTM_E>503800</UTM_E> + <UTM_N>6133900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6640</Code> + <CityName>Lunderskov (6640)</CityName> + <UTM_E>519900</UTM_E> + <UTM_N>6149300</UTM_N> + </PostalCode> + <PostalCode> + <Code>6650</Code> + <CityName>Brørup (6650)</CityName> + <UTM_E>501000</UTM_E> + <UTM_N>6152700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6660</Code> + <CityName>Lintrup (6660)</CityName> + <UTM_E>498500</UTM_E> + <UTM_N>6139900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6670</Code> + <CityName>Holsted (6670)</CityName> + <UTM_E>493800</UTM_E> + <UTM_N>6152100</UTM_N> + </PostalCode> + <PostalCode> + <Code>6682</Code> + <CityName>Hovborg (6682)</CityName> + <UTM_E>496700</UTM_E> + <UTM_N>6161400</UTM_N> + </PostalCode> + <PostalCode> + <Code>6683</Code> + <CityName>Føvling (6683)</CityName> + <UTM_E>494500</UTM_E> + <UTM_N>6143100</UTM_N> + </PostalCode> + <PostalCode> + <Code>6690</Code> + <CityName>Gørding (6690)</CityName> + <UTM_E>488500</UTM_E> + <UTM_N>6146700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6700</Code> + <CityName>Esbjerg (6700)</CityName> + <UTM_E>465500</UTM_E> + <UTM_N>6147800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6701</Code> + <CityName>Esbjerg (6701)</CityName> + <UTM_E>465500</UTM_E> + <UTM_N>6147800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6705</Code> + <CityName>Esbjerg Ø (6705)</CityName> + <UTM_E>471300</UTM_E> + <UTM_N>6149700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6710</Code> + <CityName>Esbjerg V (6710)</CityName> + <UTM_E>459900</UTM_E> + <UTM_N>6155000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6715</Code> + <CityName>Esbjerg N (6715)</CityName> + <UTM_E>469000</UTM_E> + <UTM_N>6154900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6720</Code> + <CityName>Fanø (6720)</CityName> + <UTM_E>461400</UTM_E> + <UTM_N>6140400</UTM_N> + </PostalCode> + <PostalCode> + <Code>6731</Code> + <CityName>Tjæreborg (6731)</CityName> + <UTM_E>474500</UTM_E> + <UTM_N>6146600</UTM_N> + </PostalCode> + <PostalCode> + <Code>6740</Code> + <CityName>Bramming (6740)</CityName> + <UTM_E>483100</UTM_E> + <UTM_N>6148200</UTM_N> + </PostalCode> + <PostalCode> + <Code>6752</Code> + <CityName>Glejbjerg (6752)</CityName> + <UTM_E>490500</UTM_E> + <UTM_N>6157500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6753</Code> + <CityName>Agerbæk (6753)</CityName> + <UTM_E>488500</UTM_E> + <UTM_N>6162000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6760</Code> + <CityName>Ribe (6760)</CityName> + <UTM_E>482700</UTM_E> + <UTM_N>6129800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6771</Code> + <CityName>Gredstedbro (6771)</CityName> + <UTM_E>483700</UTM_E> + <UTM_N>6140000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6780</Code> + <CityName>Skærbæk (6780)</CityName> + <UTM_E>486700</UTM_E> + <UTM_N>6113100</UTM_N> + </PostalCode> + <PostalCode> + <Code>6792</Code> + <CityName>Rømø (6792)</CityName> + <UTM_E>468400</UTM_E> + <UTM_N>6104800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6800</Code> + <CityName>Varde (6800)</CityName> + <UTM_E>472700</UTM_E> + <UTM_N>6169700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6818</Code> + <CityName>Årre (6818)</CityName> + <UTM_E>478600</UTM_E> + <UTM_N>6158000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6823</Code> + <CityName>Ansager (6823)</CityName> + <UTM_E>484300</UTM_E> + <UTM_N>6175300</UTM_N> + </PostalCode> + <PostalCode> + <Code>6830</Code> + <CityName>Nørre Nebel (6830)</CityName> + <UTM_E>456800</UTM_E> + <UTM_N>6185600</UTM_N> + </PostalCode> + <PostalCode> + <Code>6840</Code> + <CityName>Oksbøl (6840)</CityName> + <UTM_E>450400</UTM_E> + <UTM_N>6166100</UTM_N> + </PostalCode> + <PostalCode> + <Code>6851</Code> + <CityName>Janderup Vestj (6851)</CityName> + <UTM_E>461300</UTM_E> + <UTM_N>6165400</UTM_N> + </PostalCode> + <PostalCode> + <Code>6852</Code> + <CityName>Billum (6852)</CityName> + <UTM_E>457000</UTM_E> + <UTM_N>6163600</UTM_N> + </PostalCode> + <PostalCode> + <Code>6853</Code> + <CityName>Vejers Strand (6853)</CityName> + <UTM_E>457000</UTM_E> + <UTM_N>6163600</UTM_N> + </PostalCode> + <PostalCode> + <Code>6854</Code> + <CityName>Henne (6854)</CityName> + <UTM_E>452100</UTM_E> + <UTM_N>6174800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6855</Code> + <CityName>Outrup (6855)</CityName> + <UTM_E>461600</UTM_E> + <UTM_N>6173900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6857</Code> + <CityName>Blåvand (6857)</CityName> + <UTM_E>448800</UTM_E> + <UTM_N>6154600</UTM_N> + </PostalCode> + <PostalCode> + <Code>6862</Code> + <CityName>Tistrup (6862)</CityName> + <UTM_E>476900</UTM_E> + <UTM_N>6174000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6870</Code> + <CityName>Ølgod (6870)</CityName> + <UTM_E>477000</UTM_E> + <UTM_N>6183700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6880</Code> + <CityName>Tarm (6880)</CityName> + <UTM_E>474300</UTM_E> + <UTM_N>6190000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6893</Code> + <CityName>Hemmet (6893)</CityName> + <UTM_E>460300</UTM_E> + <UTM_N>6188800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6900</Code> + <CityName>Skjern (6900)</CityName> + <UTM_E>470800</UTM_E> + <UTM_N>6203700</UTM_N> + </PostalCode> + <PostalCode> + <Code>6920</Code> + <CityName>Videbæk (6920)</CityName> + <UTM_E>480400</UTM_E> + <UTM_N>6212300</UTM_N> + </PostalCode> + <PostalCode> + <Code>6933</Code> + <CityName>Kibæk (6933)</CityName> + <UTM_E>492400</UTM_E> + <UTM_N>6204900</UTM_N> + </PostalCode> + <PostalCode> + <Code>6940</Code> + <CityName>Lem St (6940)</CityName> + <UTM_E>463300</UTM_E> + <UTM_N>6210500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6950</Code> + <CityName>Ringkøbing (6950)</CityName> + <UTM_E>455300</UTM_E> + <UTM_N>6216800</UTM_N> + </PostalCode> + <PostalCode> + <Code>6960</Code> + <CityName>Hvide Sande (6960)</CityName> + <UTM_E>446600</UTM_E> + <UTM_N>6201000</UTM_N> + </PostalCode> + <PostalCode> + <Code>6971</Code> + <CityName>Spjald (6971)</CityName> + <UTM_E>467500</UTM_E> + <UTM_N>6221200</UTM_N> + </PostalCode> + <PostalCode> + <Code>6973</Code> + <CityName>Ørnhøj (6973)</CityName> + <UTM_E>471500</UTM_E> + <UTM_N>6227500</UTM_N> + </PostalCode> + <PostalCode> + <Code>6980</Code> + <CityName>Tim (6980)</CityName> + <UTM_E>456700</UTM_E> + <UTM_N>6228100</UTM_N> + </PostalCode> + <PostalCode> + <Code>6990</Code> + <CityName>Ulfborg (6990)</CityName> + <UTM_E>457700</UTM_E> + <UTM_N>6236900</UTM_N> + </PostalCode> + <PostalCode> + <Code>7000</Code> + <CityName>Fredericia (7000)</CityName> + <UTM_E>543100</UTM_E> + <UTM_N>6159300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7007</Code> + <CityName>Fredericia (7007)</CityName> + <UTM_E>543100</UTM_E> + <UTM_N>6159300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7029</Code> + <CityName>Fredericia (7029)</CityName> + <UTM_E>543100</UTM_E> + <UTM_N>6159300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7080</Code> + <CityName>Børkop (7080)</CityName> + <UTM_E>541200</UTM_E> + <UTM_N>6167700</UTM_N> + </PostalCode> + <PostalCode> + <Code>7100</Code> + <CityName>Vejle (7100)</CityName> + <UTM_E>530200</UTM_E> + <UTM_N>6174500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7120</Code> + <CityName>Vejle Øst (7120)</CityName> + <UTM_E>538700</UTM_E> + <UTM_N>6176100</UTM_N> + </PostalCode> + <PostalCode> + <Code>7130</Code> + <CityName>Juelsminde (7130)</CityName> + <UTM_E>561700</UTM_E> + <UTM_N>6177600</UTM_N> + </PostalCode> + <PostalCode> + <Code>7140</Code> + <CityName>Stouby (7140)</CityName> + <UTM_E>549500</UTM_E> + <UTM_N>6173800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7150</Code> + <CityName>Barrit (7150)</CityName> + <UTM_E>556200</UTM_E> + <UTM_N>6174000</UTM_N> + </PostalCode> + <PostalCode> + <Code>7160</Code> + <CityName>Tørring (7160)</CityName> + <UTM_E>531200</UTM_E> + <UTM_N>6190600</UTM_N> + </PostalCode> + <PostalCode> + <Code>7171</Code> + <CityName>Uldum (7171)</CityName> + <UTM_E>536800</UTM_E> + <UTM_N>6188400</UTM_N> + </PostalCode> + <PostalCode> + <Code>7173</Code> + <CityName>Vonge (7173)</CityName> + <UTM_E>526000</UTM_E> + <UTM_N>6191000</UTM_N> + </PostalCode> + <PostalCode> + <Code>7182</Code> + <CityName>Bredsten (7182)</CityName> + <UTM_E>522300</UTM_E> + <UTM_N>6173000</UTM_N> + </PostalCode> + <PostalCode> + <Code>7183</Code> + <CityName>Randbøl (7183)</CityName> + <UTM_E>514800</UTM_E> + <UTM_N>6170800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7184</Code> + <CityName>Vandel (7184)</CityName> + <UTM_E>511300</UTM_E> + <UTM_N>6174000</UTM_N> + </PostalCode> + <PostalCode> + <Code>7190</Code> + <CityName>Billund (7190)</CityName> + <UTM_E>505600</UTM_E> + <UTM_N>6176700</UTM_N> + </PostalCode> + <PostalCode> + <Code>7200</Code> + <CityName>Grindsted (7200)</CityName> + <UTM_E>494900</UTM_E> + <UTM_N>6175500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7250</Code> + <CityName>Hejnsvig (7250)</CityName> + <UTM_E>499200</UTM_E> + <UTM_N>6169900</UTM_N> + </PostalCode> + <PostalCode> + <Code>7260</Code> + <CityName>Sønder Omme (7260)</CityName> + <UTM_E>493200</UTM_E> + <UTM_N>6188500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7270</Code> + <CityName>Stakroge (7270)</CityName> + <UTM_E>489700</UTM_E> + <UTM_N>6194200</UTM_N> + </PostalCode> + <PostalCode> + <Code>7280</Code> + <CityName>Sønder Felding (7280)</CityName> + <UTM_E>487700</UTM_E> + <UTM_N>6199200</UTM_N> + </PostalCode> + <PostalCode> + <Code>7300</Code> + <CityName>Jelling (7300)</CityName> + <UTM_E>526200</UTM_E> + <UTM_N>6181700</UTM_N> + </PostalCode> + <PostalCode> + <Code>7321</Code> + <CityName>Gadbjerg (7321)</CityName> + <UTM_E>517200</UTM_E> + <UTM_N>6179900</UTM_N> + </PostalCode> + <PostalCode> + <Code>7323</Code> + <CityName>Give (7323)</CityName> + <UTM_E>514200</UTM_E> + <UTM_N>6190000</UTM_N> + </PostalCode> + <PostalCode> + <Code>7330</Code> + <CityName>Brande (7330)</CityName> + <UTM_E>505500</UTM_E> + <UTM_N>6198300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7361</Code> + <CityName>Ejstrupholm (7361)</CityName> + <UTM_E>516900</UTM_E> + <UTM_N>6206100</UTM_N> + </PostalCode> + <PostalCode> + <Code>7362</Code> + <CityName>Hampen (7362)</CityName> + <UTM_E>523500</UTM_E> + <UTM_N>6211300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7400</Code> + <CityName>Herning (7400)</CityName> + <UTM_E>498500</UTM_E> + <UTM_N>6220800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7401</Code> + <CityName>Herning (7401)</CityName> + <UTM_E>498500</UTM_E> + <UTM_N>6220800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7429</Code> + <CityName>Herning (7429)</CityName> + <UTM_E>498500</UTM_E> + <UTM_N>6220800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7430</Code> + <CityName>Ikast (7430)</CityName> + <UTM_E>512300</UTM_E> + <UTM_N>6220600</UTM_N> + </PostalCode> + <PostalCode> + <Code>7441</Code> + <CityName>Bording (7441)</CityName> + <UTM_E>516900</UTM_E> + <UTM_N>6225500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7442</Code> + <CityName>Engesvang (7442)</CityName> + <UTM_E>518700</UTM_E> + <UTM_N>6227700</UTM_N> + </PostalCode> + <PostalCode> + <Code>7451</Code> + <CityName>Sunds (7451)</CityName> + <UTM_E>501800</UTM_E> + <UTM_N>6231300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7470</Code> + <CityName>Karup J (7470)</CityName> + <UTM_E>510200</UTM_E> + <UTM_N>6240800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7480</Code> + <CityName>Vildbjerg (7480)</CityName> + <UTM_E>484300</UTM_E> + <UTM_N>6225700</UTM_N> + </PostalCode> + <PostalCode> + <Code>7490</Code> + <CityName>Aulum (7490)</CityName> + <UTM_E>489100</UTM_E> + <UTM_N>6238300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7500</Code> + <CityName>Holstebro (7500)</CityName> + <UTM_E>479000</UTM_E> + <UTM_N>6243200</UTM_N> + </PostalCode> + <PostalCode> + <Code>7540</Code> + <CityName>Haderup (7540)</CityName> + <UTM_E>499300</UTM_E> + <UTM_N>6244100</UTM_N> + </PostalCode> + <PostalCode> + <Code>7550</Code> + <CityName>Sørvad (7550)</CityName> + <UTM_E>479200</UTM_E> + <UTM_N>6233800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7560</Code> + <CityName>Hjerm (7560)</CityName> + <UTM_E>478100</UTM_E> + <UTM_N>6254800</UTM_N> + </PostalCode> + <PostalCode> + <Code>7570</Code> + <CityName>Vemb (7570)</CityName> + <UTM_E>458300</UTM_E> + <UTM_N>6246300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7600</Code> + <CityName>Struer (7600)</CityName> + <UTM_E>471900</UTM_E> + <UTM_N>6261500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7620</Code> + <CityName>Lemvig (7620)</CityName> + <UTM_E>457300</UTM_E> + <UTM_N>6264900</UTM_N> + </PostalCode> + <PostalCode> + <Code>7650</Code> + <CityName>Bøvlingbjerg (7650)</CityName> + <UTM_E>450700</UTM_E> + <UTM_N>6253500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7660</Code> + <CityName>Bækmarksbro (7660)</CityName> + <UTM_E>458800</UTM_E> + <UTM_N>6253200</UTM_N> + </PostalCode> + <PostalCode> + <Code>7673</Code> + <CityName>Harboøre (7673)</CityName> + <UTM_E>449900</UTM_E> + <UTM_N>6274400</UTM_N> + </PostalCode> + <PostalCode> + <Code>7680</Code> + <CityName>Thyborøn (7680)</CityName> + <UTM_E>451700</UTM_E> + <UTM_N>6283200</UTM_N> + </PostalCode> + <PostalCode> + <Code>7700</Code> + <CityName>Thisted (7700)</CityName> + <UTM_E>479000</UTM_E> + <UTM_N>6314900</UTM_N> + </PostalCode> + <PostalCode> + <Code>7730</Code> + <CityName>Hanstholm (7730)</CityName> + <UTM_E>480600</UTM_E> + <UTM_N>6328000</UTM_N> + </PostalCode> + <PostalCode> + <Code>7741</Code> + <CityName>Frøstrup (7741)</CityName> + <UTM_E>496100</UTM_E> + <UTM_N>6328700</UTM_N> + </PostalCode> + <PostalCode> + <Code>7742</Code> + <CityName>Vesløs (7742)</CityName> + <UTM_E>499100</UTM_E> + <UTM_N>6319000</UTM_N> + </PostalCode> + <PostalCode> + <Code>7752</Code> + <CityName>Snedsted (7752)</CityName> + <UTM_E>468000</UTM_E> + <UTM_N>6303500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7755</Code> + <CityName>Bedsted Thy (7755)</CityName> + <UTM_E>463300</UTM_E> + <UTM_N>6299500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7760</Code> + <CityName>Hurup Thy (7760)</CityName> + <UTM_E>464500</UTM_E> + <UTM_N>6286900</UTM_N> + </PostalCode> + <PostalCode> + <Code>7770</Code> + <CityName>Vestervig (7770)</CityName> + <UTM_E>457300</UTM_E> + <UTM_N>6291600</UTM_N> + </PostalCode> + <PostalCode> + <Code>7790</Code> + <CityName>Thyholm (7790)</CityName> + <UTM_E>471000</UTM_E> + <UTM_N>6276400</UTM_N> + </PostalCode> + <PostalCode> + <Code>7800</Code> + <CityName>Skive (7800)</CityName> + <UTM_E>497600</UTM_E> + <UTM_N>6264500</UTM_N> + </PostalCode> + <PostalCode> + <Code>7830</Code> + <CityName>Vinderup (7830)</CityName> + <UTM_E>488900</UTM_E> + <UTM_N>6258100</UTM_N> + </PostalCode> + <PostalCode> + <Code>7840</Code> + <CityName>Højslev (7840)</CityName> + <UTM_E>511200</UTM_E> + <UTM_N>6270900</UTM_N> + </PostalCode> + <PostalCode> + <Code>7850</Code> + <CityName>Stoholm Jyll (7850)</CityName> + <UTM_E>507300</UTM_E> + <UTM_N>6259100</UTM_N> + </PostalCode> + <PostalCode> + <Code>7860</Code> + <CityName>Spøttrup (7860)</CityName> + <UTM_E>507300</UTM_E> + <UTM_N>6259100</UTM_N> + </PostalCode> + <PostalCode> + <Code>7870</Code> + <CityName>Roslev (7870)</CityName> + <UTM_E>500000</UTM_E> + <UTM_N>6285600</UTM_N> + </PostalCode> + <PostalCode> + <Code>7884</Code> + <CityName>Fur (7884)</CityName> + <UTM_E>501200</UTM_E> + <UTM_N>6297700</UTM_N> + </PostalCode> + <PostalCode> + <Code>7900</Code> + <CityName>Nykøbing M (7900)</CityName> + <UTM_E>486100</UTM_E> + <UTM_N>6300300</UTM_N> + </PostalCode> + <PostalCode> + <Code>7950</Code> + <CityName>Erslev (7950)</CityName> + <UTM_E>482200</UTM_E> + <UTM_N>6300400</UTM_N> + </PostalCode> + <PostalCode> + <Code>7960</Code> + <CityName>Karby (7960)</CityName> + <UTM_E>474600</UTM_E> + <UTM_N>6289200</UTM_N> + </PostalCode> + <PostalCode> + <Code>7970</Code> + <CityName>Redsted M (7970)</CityName> + <UTM_E>478600</UTM_E> + <UTM_N>6288400</UTM_N> + </PostalCode> + <PostalCode> + <Code>7980</Code> + <CityName>Vils (7980)</CityName> + <UTM_E>483400</UTM_E> + <UTM_N>6289600</UTM_N> + </PostalCode> + <PostalCode> + <Code>7990</Code> + <CityName>Øster Assels (7990)</CityName> + <UTM_E>482000</UTM_E> + <UTM_N>6284200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8000</Code> + <CityName>Århus C (8000)</CityName> + <UTM_E>574300</UTM_E> + <UTM_N>6223000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8100</Code> + <CityName>Århus C (8100)</CityName> + <UTM_E>574300</UTM_E> + <UTM_N>6223000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8200</Code> + <CityName>Århus N (8200)</CityName> + <UTM_E>572200</UTM_E> + <UTM_N>6228900</UTM_N> + </PostalCode> + <PostalCode> + <Code>8210</Code> + <CityName>Århus V (8210)</CityName> + <UTM_E>571200</UTM_E> + <UTM_N>6225300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8220</Code> + <CityName>Brabrand (8220)</CityName> + <UTM_E>567200</UTM_E> + <UTM_N>6223800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8229</Code> + <CityName>Risskov Ø (8229)</CityName> + <UTM_E>567200</UTM_E> + <UTM_N>6223800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8230</Code> + <CityName>Åbyhøj (8230)</CityName> + <UTM_E>571700</UTM_E> + <UTM_N>6223200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8240</Code> + <CityName>Risskov (8240)</CityName> + <UTM_E>576900</UTM_E> + <UTM_N>6228000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8245</Code> + <CityName>Risskov Ø (8245)</CityName> + <UTM_E>576900</UTM_E> + <UTM_N>6228000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8250</Code> + <CityName>Egå (8250)</CityName> + <UTM_E>580100</UTM_E> + <UTM_N>6231400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8260</Code> + <CityName>Viby J (8260)</CityName> + <UTM_E>568800</UTM_E> + <UTM_N>6220500</UTM_N> + </PostalCode> + <PostalCode> + <Code>8270</Code> + <CityName>Højbjerg (8270)</CityName> + <UTM_E>574500</UTM_E> + <UTM_N>6218300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8300</Code> + <CityName>Odder (8300)</CityName> + <UTM_E>571600</UTM_E> + <UTM_N>6199100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8305</Code> + <CityName>Samsø (8305)</CityName> + <UTM_E>599800</UTM_E> + <UTM_N>6190000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8310</Code> + <CityName>Tranbjerg J (8310)</CityName> + <UTM_E>570200</UTM_E> + <UTM_N>6215900</UTM_N> + </PostalCode> + <PostalCode> + <Code>8320</Code> + <CityName>Mårslet (8320)</CityName> + <UTM_E>572500</UTM_E> + <UTM_N>6214200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8330</Code> + <CityName>Beder (8330)</CityName> + <UTM_E>576400</UTM_E> + <UTM_N>6213400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8340</Code> + <CityName>Malling (8340)</CityName> + <UTM_E>574100</UTM_E> + <UTM_N>6209900</UTM_N> + </PostalCode> + <PostalCode> + <Code>8350</Code> + <CityName>Hundslund (8350)</CityName> + <UTM_E>566100</UTM_E> + <UTM_N>6197400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8355</Code> + <CityName>Solbjerg (8355)</CityName> + <UTM_E>567600</UTM_E> + <UTM_N>6209800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8361</Code> + <CityName>Hasselager (8361)</CityName> + <UTM_E>567500</UTM_E> + <UTM_N>6217300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8362</Code> + <CityName>Hørning (8362)</CityName> + <UTM_E>563100</UTM_E> + <UTM_N>6215700</UTM_N> + </PostalCode> + <PostalCode> + <Code>8370</Code> + <CityName>Hadsten (8370)</CityName> + <UTM_E>566500</UTM_E> + <UTM_N>6243400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8380</Code> + <CityName>Trige (8380)</CityName> + <UTM_E>571200</UTM_E> + <UTM_N>6235400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8381</Code> + <CityName>Tilst (8381)</CityName> + <UTM_E>567200</UTM_E> + <UTM_N>6228100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8382</Code> + <CityName>Hinnerup (8382)</CityName> + <UTM_E>564200</UTM_E> + <UTM_N>6234600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8400</Code> + <CityName>Ebeltoft (8400)</CityName> + <UTM_E>603700</UTM_E> + <UTM_N>6233100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8410</Code> + <CityName>Rønde (8410)</CityName> + <UTM_E>593600</UTM_E> + <UTM_N>6242100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8420</Code> + <CityName>Knebel (8420)</CityName> + <UTM_E>590200</UTM_E> + <UTM_N>6226400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8444</Code> + <CityName>Balle (8444)</CityName> + <UTM_E>610500</UTM_E> + <UTM_N>6242600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8450</Code> + <CityName>Hammel (8450)</CityName> + <UTM_E>553900</UTM_E> + <UTM_N>6235700</UTM_N> + </PostalCode> + <PostalCode> + <Code>8462</Code> + <CityName>Harlev J (8462)</CityName> + <UTM_E>561600</UTM_E> + <UTM_N>6222300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8464</Code> + <CityName>Galten (8464)</CityName> + <UTM_E>557100</UTM_E> + <UTM_N>6223800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8471</Code> + <CityName>Sabro (8471)</CityName> + <UTM_E>560800</UTM_E> + <UTM_N>6229700</UTM_N> + </PostalCode> + <PostalCode> + <Code>8472</Code> + <CityName>Sporup (8472)</CityName> + <UTM_E>551500</UTM_E> + <UTM_N>6229200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8500</Code> + <CityName>Grenaa (8500)</CityName> + <UTM_E>613000</UTM_E> + <UTM_N>6255300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8520</Code> + <CityName>Lystrup (8520)</CityName> + <UTM_E>575300</UTM_E> + <UTM_N>6232800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8530</Code> + <CityName>Hjortshøj (8530)</CityName> + <UTM_E>576100</UTM_E> + <UTM_N>6237700</UTM_N> + </PostalCode> + <PostalCode> + <Code>8541</Code> + <CityName>Skødstrup (8541)</CityName> + <UTM_E>581200</UTM_E> + <UTM_N>6236700</UTM_N> + </PostalCode> + <PostalCode> + <Code>8543</Code> + <CityName>Hornslet (8543)</CityName> + <UTM_E>578000</UTM_E> + <UTM_N>6243000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8544</Code> + <CityName>Mørke (8544)</CityName> + <UTM_E>580900</UTM_E> + <UTM_N>6246000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8550</Code> + <CityName>Ryomgård (8550)</CityName> + <UTM_E>590500</UTM_E> + <UTM_N>6248700</UTM_N> + </PostalCode> + <PostalCode> + <Code>8560</Code> + <CityName>Kolind (8560)</CityName> + <UTM_E>600600</UTM_E> + <UTM_N>6246300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8570</Code> + <CityName>Trustrup (8570)</CityName> + <UTM_E>608600</UTM_E> + <UTM_N>6247200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8581</Code> + <CityName>Nimtofte (8581)</CityName> + <UTM_E>597400</UTM_E> + <UTM_N>6254600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8585</Code> + <CityName>Glesborg (8585)</CityName> + <UTM_E>602900</UTM_E> + <UTM_N>6262100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8586</Code> + <CityName>Ørum Djurs (8586)</CityName> + <UTM_E>602000</UTM_E> + <UTM_N>6256200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8592</Code> + <CityName>Anholt (8592)</CityName> + <UTM_E>658500</UTM_E> + <UTM_N>6288200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8600</Code> + <CityName>Silkeborg (8600)</CityName> + <UTM_E>535100</UTM_E> + <UTM_N>6226400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8620</Code> + <CityName>Kjellerup (8620)</CityName> + <UTM_E>525500</UTM_E> + <UTM_N>6237300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8632</Code> + <CityName>Lemming (8632)</CityName> + <UTM_E>533000</UTM_E> + <UTM_N>6232200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8641</Code> + <CityName>Sorring (8641)</CityName> + <UTM_E>549500</UTM_E> + <UTM_N>6226000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8643</Code> + <CityName>Ans By (8643)</CityName> + <UTM_E>537700</UTM_E> + <UTM_N>6238300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8653</Code> + <CityName>Them (8653)</CityName> + <UTM_E>532300</UTM_E> + <UTM_N>6215000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8654</Code> + <CityName>Bryrup (8654)</CityName> + <UTM_E>531600</UTM_E> + <UTM_N>6207900</UTM_N> + </PostalCode> + <PostalCode> + <Code>8660</Code> + <CityName>Skanderborg (8660)</CityName> + <UTM_E>553800</UTM_E> + <UTM_N>6211400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8670</Code> + <CityName>Låsby (8670)</CityName> + <UTM_E>550100</UTM_E> + <UTM_N>6222600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8680</Code> + <CityName>Ry (8680)</CityName> + <UTM_E>546100</UTM_E> + <UTM_N>6216100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8700</Code> + <CityName>Horsens (8700)</CityName> + <UTM_E>554100</UTM_E> + <UTM_N>6191200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8721</Code> + <CityName>Daugård (8721)</CityName> + <UTM_E>544300</UTM_E> + <UTM_N>6175700</UTM_N> + </PostalCode> + <PostalCode> + <Code>8722</Code> + <CityName>Hedensted (8722)</CityName> + <UTM_E>543600</UTM_E> + <UTM_N>6180300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8723</Code> + <CityName>Løsning (8723)</CityName> + <UTM_E>543100</UTM_E> + <UTM_N>6185300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8732</Code> + <CityName>Hovedgård (8732)</CityName> + <UTM_E>559700</UTM_E> + <UTM_N>6201500</UTM_N> + </PostalCode> + <PostalCode> + <Code>8740</Code> + <CityName>Brædstrup (8740)</CityName> + <UTM_E>537300</UTM_E> + <UTM_N>6204900</UTM_N> + </PostalCode> + <PostalCode> + <Code>8751</Code> + <CityName>Gedved (8751)</CityName> + <UTM_E>553800</UTM_E> + <UTM_N>6200300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8752</Code> + <CityName>Østbirk (8752)</CityName> + <UTM_E>546700</UTM_E> + <UTM_N>6203500</UTM_N> + </PostalCode> + <PostalCode> + <Code>8762</Code> + <CityName>Flemming (8762)</CityName> + <UTM_E>542900</UTM_E> + <UTM_N>6191600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8763</Code> + <CityName>Rask Mølle (8763)</CityName> + <UTM_E>537900</UTM_E> + <UTM_N>6193800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8765</Code> + <CityName>Klovborg (8765)</CityName> + <UTM_E>531900</UTM_E> + <UTM_N>6198600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8766</Code> + <CityName>Nørre Snede (8766)</CityName> + <UTM_E>525900</UTM_E> + <UTM_N>6202200</UTM_N> + </PostalCode> + <PostalCode> + <Code>8781</Code> + <CityName>Stenderup (8781)</CityName> + <UTM_E>550800</UTM_E> + <UTM_N>6183600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8783</Code> + <CityName>Hornsyld (8783)</CityName> + <UTM_E>552500</UTM_E> + <UTM_N>6180400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8800</Code> + <CityName>Viborg (8800)</CityName> + <UTM_E>522900</UTM_E> + <UTM_N>6256000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8830</Code> + <CityName>Tjele (8830)</CityName> + <UTM_E>541500</UTM_E> + <UTM_N>6262400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8831</Code> + <CityName>Løgstrup (8831)</CityName> + <UTM_E>541500</UTM_E> + <UTM_N>6262400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8832</Code> + <CityName>Skals (8832)</CityName> + <UTM_E>523700</UTM_E> + <UTM_N>6273100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8840</Code> + <CityName>Rødkærsbro (8840)</CityName> + <UTM_E>531200</UTM_E> + <UTM_N>6244100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8850</Code> + <CityName>Bjerringbro (8850)</CityName> + <UTM_E>539800</UTM_E> + <UTM_N>6248800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8860</Code> + <CityName>Ulstrup (8860)</CityName> + <UTM_E>548500</UTM_E> + <UTM_N>6249300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8870</Code> + <CityName>Langå (8870)</CityName> + <UTM_E>555900</UTM_E> + <UTM_N>6248000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8881</Code> + <CityName>Thorsø (8881)</CityName> + <UTM_E>547900</UTM_E> + <UTM_N>6240400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8882</Code> + <CityName>Fårvang (8882)</CityName> + <UTM_E>544400</UTM_E> + <UTM_N>6236600</UTM_N> + </PostalCode> + <PostalCode> + <Code>8883</Code> + <CityName>Gjern (8883)</CityName> + <UTM_E>545700</UTM_E> + <UTM_N>6231000</UTM_N> + </PostalCode> + <PostalCode> + <Code>8900</Code> + <CityName>Randers (8900)</CityName> + <UTM_E>561500</UTM_E> + <UTM_N>6258100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8920</Code> + <CityName>Randers NV (8920)</CityName> + <UTM_E>561500</UTM_E> + <UTM_N>6258100</UTM_N> + </PostalCode> + <PostalCode> + <Code>8950</Code> + <CityName>Ørsted (8950)</CityName> + <UTM_E>581900</UTM_E> + <UTM_N>6266800</UTM_N> + </PostalCode> + <PostalCode> + <Code>8961</Code> + <CityName>Allingåbro (8961)</CityName> + <UTM_E>587700</UTM_E> + <UTM_N>6259400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8963</Code> + <CityName>Auning (8963)</CityName> + <UTM_E>585500</UTM_E> + <UTM_N>6254400</UTM_N> + </PostalCode> + <PostalCode> + <Code>8970</Code> + <CityName>Havndal (8970)</CityName> + <UTM_E>575400</UTM_E> + <UTM_N>6277300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8981</Code> + <CityName>Spentrup (8981)</CityName> + <UTM_E>564200</UTM_E> + <UTM_N>6267500</UTM_N> + </PostalCode> + <PostalCode> + <Code>8983</Code> + <CityName>Gjerlev J (8983)</CityName> + <UTM_E>569400</UTM_E> + <UTM_N>6271300</UTM_N> + </PostalCode> + <PostalCode> + <Code>8990</Code> + <CityName>Fårup (8990)</CityName> + <UTM_E>553000</UTM_E> + <UTM_N>6267700</UTM_N> + </PostalCode> + <PostalCode> + <Code>9000</Code> + <CityName>Aalborg (9000)</CityName> + <UTM_E>552700</UTM_E> + <UTM_N>6322400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9200</Code> + <CityName>Aalborg SV (9200)</CityName> + <UTM_E>552100</UTM_E> + <UTM_N>6318400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9210</Code> + <CityName>Aalborg SØ (9210)</CityName> + <UTM_E>556700</UTM_E> + <UTM_N>6317900</UTM_N> + </PostalCode> + <PostalCode> + <Code>9220</Code> + <CityName>Aalborg Øst (9220)</CityName> + <UTM_E>561900</UTM_E> + <UTM_N>6322000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9230</Code> + <CityName>Svenstrup J (9230)</CityName> + <UTM_E>552600</UTM_E> + <UTM_N>6312200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9240</Code> + <CityName>Nibe (9240)</CityName> + <UTM_E>536300</UTM_E> + <UTM_N>6310700</UTM_N> + </PostalCode> + <PostalCode> + <Code>9260</Code> + <CityName>Gistrup (9260)</CityName> + <UTM_E>561300</UTM_E> + <UTM_N>6311500</UTM_N> + </PostalCode> + <PostalCode> + <Code>9270</Code> + <CityName>Klarup (9270)</CityName> + <UTM_E>564700</UTM_E> + <UTM_N>6319500</UTM_N> + </PostalCode> + <PostalCode> + <Code>9280</Code> + <CityName>Storvorde (9280)</CityName> + <UTM_E>571200</UTM_E> + <UTM_N>6310700</UTM_N> + </PostalCode> + <PostalCode> + <Code>9293</Code> + <CityName>Kongerslev (9293)</CityName> + <UTM_E>567700</UTM_E> + <UTM_N>6305400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9300</Code> + <CityName>Sæby (9300)</CityName> + <UTM_E>587500</UTM_E> + <UTM_N>6349300</UTM_N> + </PostalCode> + <PostalCode> + <Code>9310</Code> + <CityName>Vodskov (9310)</CityName> + <UTM_E>567100</UTM_E> + <UTM_N>6329300</UTM_N> + </PostalCode> + <PostalCode> + <Code>9320</Code> + <CityName>Hjallerup (9320)</CityName> + <UTM_E>569400</UTM_E> + <UTM_N>6337800</UTM_N> + </PostalCode> + <PostalCode> + <Code>9330</Code> + <CityName>Dronninglund (9330)</CityName> + <UTM_E>580600</UTM_E> + <UTM_N>6338100</UTM_N> + </PostalCode> + <PostalCode> + <Code>9340</Code> + <CityName>Asaa (9340)</CityName> + <UTM_E>584500</UTM_E> + <UTM_N>6333700</UTM_N> + </PostalCode> + <PostalCode> + <Code>9352</Code> + <CityName>Dybvad (9352)</CityName> + <UTM_E>580300</UTM_E> + <UTM_N>6348200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9362</Code> + <CityName>Gandrup (9362)</CityName> + <UTM_E>572700</UTM_E> + <UTM_N>6324000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9370</Code> + <CityName>Hals (9370)</CityName> + <UTM_E>579200</UTM_E> + <UTM_N>6323200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9380</Code> + <CityName>Vestbjerg (9380)</CityName> + <UTM_E>558900</UTM_E> + <UTM_N>6336400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9381</Code> + <CityName>Sulsted (9381)</CityName> + <UTM_E>558900</UTM_E> + <UTM_N>6336400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9382</Code> + <CityName>Tylstrup (9382)</CityName> + <UTM_E>553100</UTM_E> + <UTM_N>6340200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9400</Code> + <CityName>Nørresundby (9400)</CityName> + <UTM_E>556200</UTM_E> + <UTM_N>6328000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9430</Code> + <CityName>Vadum (9430)</CityName> + <UTM_E>552000</UTM_E> + <UTM_N>6333200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9440</Code> + <CityName>Aabybro (9440)</CityName> + <UTM_E>544100</UTM_E> + <UTM_N>6334600</UTM_N> + </PostalCode> + <PostalCode> + <Code>9460</Code> + <CityName>Brovst (9460)</CityName> + <UTM_E>531800</UTM_E> + <UTM_N>6330900</UTM_N> + </PostalCode> + <PostalCode> + <Code>9480</Code> + <CityName>Løkken (9480)</CityName> + <UTM_E>546400</UTM_E> + <UTM_N>6358600</UTM_N> + </PostalCode> + <PostalCode> + <Code>9490</Code> + <CityName>Pandrup (9490)</CityName> + <UTM_E>537300</UTM_E> + <UTM_N>6341100</UTM_N> + </PostalCode> + <PostalCode> + <Code>9492</Code> + <CityName>Blokhus (9492)</CityName> + <UTM_E>536200</UTM_E> + <UTM_N>6345700</UTM_N> + </PostalCode> + <PostalCode> + <Code>9493</Code> + <CityName>Saltum (9493)</CityName> + <UTM_E>541500</UTM_E> + <UTM_N>6347000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9500</Code> + <CityName>Hobro (9500)</CityName> + <UTM_E>547300</UTM_E> + <UTM_N>6276000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9510</Code> + <CityName>Arden (9510)</CityName> + <UTM_E>551400</UTM_E> + <UTM_N>6291700</UTM_N> + </PostalCode> + <PostalCode> + <Code>9520</Code> + <CityName>Skørping (9520)</CityName> + <UTM_E>555000</UTM_E> + <UTM_N>6300400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9530</Code> + <CityName>Støvring (9530)</CityName> + <UTM_E>550700</UTM_E> + <UTM_N>6305800</UTM_N> + </PostalCode> + <PostalCode> + <Code>9541</Code> + <CityName>Suldrup (9541)</CityName> + <UTM_E>541800</UTM_E> + <UTM_N>6300400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9550</Code> + <CityName>Mariager (9550)</CityName> + <UTM_E>560700</UTM_E> + <UTM_N>6276500</UTM_N> + </PostalCode> + <PostalCode> + <Code>9560</Code> + <CityName>Hadsund (9560)</CityName> + <UTM_E>570300</UTM_E> + <UTM_N>6291700</UTM_N> + </PostalCode> + <PostalCode> + <Code>9574</Code> + <CityName>Bælum (9574)</CityName> + <UTM_E>569300</UTM_E> + <UTM_N>6298400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9575</Code> + <CityName>Terndrup (9575)</CityName> + <UTM_E>564200</UTM_E> + <UTM_N>6295100</UTM_N> + </PostalCode> + <PostalCode> + <Code>9600</Code> + <CityName>Aars (9600)</CityName> + <UTM_E>529200</UTM_E> + <UTM_N>6297100</UTM_N> + </PostalCode> + <PostalCode> + <Code>9610</Code> + <CityName>Nørager (9610)</CityName> + <UTM_E>539200</UTM_E> + <UTM_N>6286500</UTM_N> + </PostalCode> + <PostalCode> + <Code>9620</Code> + <CityName>Aalestrup (9620)</CityName> + <UTM_E>530400</UTM_E> + <UTM_N>6282300</UTM_N> + </PostalCode> + <PostalCode> + <Code>9631</Code> + <CityName>Gedsted (9631)</CityName> + <UTM_E>522400</UTM_E> + <UTM_N>6283200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9632</Code> + <CityName>Møldrup (9632)</CityName> + <UTM_E>531000</UTM_E> + <UTM_N>6272600</UTM_N> + </PostalCode> + <PostalCode> + <Code>9640</Code> + <CityName>Farsø (9640)</CityName> + <UTM_E>517800</UTM_E> + <UTM_N>6292900</UTM_N> + </PostalCode> + <PostalCode> + <Code>9670</Code> + <CityName>Løgstør (9670)</CityName> + <UTM_E>518900</UTM_E> + <UTM_N>6310200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9681</Code> + <CityName>Ranum (9681)</CityName> + <UTM_E>510400</UTM_E> + <UTM_N>6305600</UTM_N> + </PostalCode> + <PostalCode> + <Code>9690</Code> + <CityName>Fjerritslev (9690)</CityName> + <UTM_E>514500</UTM_E> + <UTM_N>6327500</UTM_N> + </PostalCode> + <PostalCode> + <Code>9700</Code> + <CityName>Brønderslev (9700)</CityName> + <UTM_E>556000</UTM_E> + <UTM_N>6347400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9740</Code> + <CityName>Jerslev J (9740)</CityName> + <UTM_E>568300</UTM_E> + <UTM_N>6350000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9750</Code> + <CityName>Østervrå (9750)</CityName> + <UTM_E>576500</UTM_E> + <UTM_N>6355100</UTM_N> + </PostalCode> + <PostalCode> + <Code>9760</Code> + <CityName>Vrå (9760)</CityName> + <UTM_E>557500</UTM_E> + <UTM_N>6357400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9800</Code> + <CityName>Hjørring (9800)</CityName> + <UTM_E>558300</UTM_E> + <UTM_N>6372200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9830</Code> + <CityName>Tårs (9830)</CityName> + <UTM_E>569500</UTM_E> + <UTM_N>6359000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9850</Code> + <CityName>Hirtshals (9850)</CityName> + <UTM_E>558100</UTM_E> + <UTM_N>6379000</UTM_N> + </PostalCode> + <PostalCode> + <Code>9870</Code> + <CityName>Sindal (9870)</CityName> + <UTM_E>575900</UTM_E> + <UTM_N>6369400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9881</Code> + <CityName>Bindslev (9881)</CityName> + <UTM_E>574400</UTM_E> + <UTM_N>6380300</UTM_N> + </PostalCode> + <PostalCode> + <Code>9900</Code> + <CityName>Frederikshavn (9900)</CityName> + <UTM_E>588500</UTM_E> + <UTM_N>6366400</UTM_N> + </PostalCode> + <PostalCode> + <Code>9940</Code> + <CityName>Læsø (9940)</CityName> + <UTM_E>622000</UTM_E> + <UTM_N>6347900</UTM_N> + </PostalCode> + <PostalCode> + <Code>9970</Code> + <CityName>Strandby (9970)</CityName> + <UTM_E>589000</UTM_E> + <UTM_N>6373200</UTM_N> + </PostalCode> + <PostalCode> + <Code>9981</Code> + <CityName>Jerup (9981)</CityName> + <UTM_E>585700</UTM_E> + <UTM_N>6376900</UTM_N> + </PostalCode> + <PostalCode> + <Code>9982</Code> + <CityName>Ålbæk (9982)</CityName> + <UTM_E>582400</UTM_E> + <UTM_N>6384600</UTM_N> + </PostalCode> + <PostalCode> + <Code>9990</Code> + <CityName>Skagen (9990)</CityName> + <UTM_E>589800</UTM_E> + <UTM_N>6395800</UTM_N> + </PostalCode> +</PostalCodes> \ No newline at end of file diff --git a/cerealblotchmodels/templates/cerealblotchmodels/septoriahumiditymodelform.html b/cerealblotchmodels/templates/cerealblotchmodels/septoriahumiditymodelform.html new file mode 100644 index 0000000000000000000000000000000000000000..40618e9dd12bec3f3af72e51240db903284012d7 --- /dev/null +++ b/cerealblotchmodels/templates/cerealblotchmodels/septoriahumiditymodelform.html @@ -0,0 +1,378 @@ +{% extends "base_with_date_picker.html" %} +{% load staticfiles %} +{% comment %} + +# +# Copyright (c) 2018 NIBIO <http://www.nibio.no/>. +# +# This file is part of VIPSWeb. +# VIPSWeb is free software: you can redistribute it and/or modify +# it under the terms of the NIBIO Open Source License as published by +# NIBIO, either version 1 of the License, or (at your option) any +# later version. +# +# VIPSWeb 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 +# NIBIO Open Source License for more details. +# +# You should have received a copy of the NIBIO Open Source License +# along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. +# + +{% endcomment %} +{% load i18n %} +{% block title %}{% trans "Septoria humidity model" %}{% endblock %} +{% block content %} +<div class="singleBlockContainer"> + <h1>{% trans "Septoria humidity model" %}</h1> + <form role="form" id="{{ form_id }}"> + <div class="row"> + <div class="col-md-12"> + <h2>{% trans "Background data" %}</h2> + </div> + </div> + <div class="row"> + <div class="col-md-3"> + <div class="form-group"> + <label for="organizationId_countryCode">{% trans "Country" %}</label> + <select name="organizationId_countryCode" id="organizationId_countryCode" class="form-control" onchange="updateWeatherDataSources(this.options[this.options.selectedIndex].value);"> + <option value="None">{% trans "Please select" %}</option> + </select> + <span class="help-block" id="{{ form_id }}_organizationId_countryCode_validation"></span> + </div> + <div class="form-group"> + <label for="weatherStationId">{% trans "WeatherStation" %}</label> + <select name="weatherStationId" id="weatherStationId" class="form-control"> + <option value="">{% trans "Please select" %}</option> + <option value="test">TEST</option> + </select> + <span class="help-block" id="{{ form_id }}_weatherStationId_validation"></span> + </div> + <fieldset> + <legend>{% trans "Sprayings" %}</legend> + <div class="form-group"> + <label for="dateSpraying1">{% trans "Spraying 1" %}</label> + <input type="date" name="dateSpraying1" class="form-control"/> + <span class="help-block" id="{{ form_id }}_dateSpraying1_validation"></span> + </div> + <div class="form-group"> + <label for="dateSpraying2">{% trans "Spraying 1" %}</label> + <input type="date" name="dateSpraying2" class="form-control"/> + <span class="help-block" id="{{ form_id }}_dateSpraying2_validation"></span> + </div> + </fieldset> + + + </div> + <div class="col-md-3"> + <fieldset> + <legend>{% trans "Phenology" %}</legend> + <div class="form-group"> + <label for="dateGs31">{% trans "Growth stage 31" %}</label> + <input type="date" name="dateGs31" id="dateGs31" class="form-control" value="{% now "Y-m-d" %}" onchange="updateGSDates();"/> + <span class="help-block" id="{{ form_id }}_dateGs31_validation"></span> + </div> + <div class="form-group"> + <label for="date3rdUpperLeafEmerging">{% trans "3rd upper leaf (gs 32)" %}</label> + <input type="date" name="date3rdUpperLeafEmerging" id="date3rdUpperLeafEmerging" class="form-control"/> + <span class="help-block" id="{{ form_id }}_date3rdUpperLeafEmerging_validation"></span> + </div> + <div class="form-group"> + <label for="date2ndUpperLeafEmerging">{% trans "2nd upper leaf (gs 33)" %}</label> + <input type="date" name="date2ndUpperLeafEmerging" id="date2ndUpperLeafEmerging" class="form-control"/> + <span class="help-block" id="{{ form_id }}_date2ndUpperLeafEmerging_validation"></span> + </div> + <div class="form-group"> + <label for="dateUpperLeafEmerging">{% trans "Upper leaf (gs 37-39)" %}</label> + <input type="date" name="dateUpperLeafEmerging" id="dateUpperLeafEmerging" class="form-control"/> + <span class="help-block" id="{{ form_id }}_dateUpperLeafEmerging_validation"></span> + </div> + <div class="form-group"> + <label for="dateGs75">{% trans "All kernels fully developed (gs 75)" %}</label> + <input type="date" name="dateGs75" id="dateGs75" class="form-control"/> + <span class="help-block" id="{{ form_id }}_dateGs75_validation"></span> + </div> + </fieldset> + </div> + <div class="col-md-3"> + <fieldset> + <legend>{% trans "Threshold values for 'humid hour'" %}</legend> + <div class="form-group"> + <label for="thresholdRelativeHumidity">{% trans "Relative humidity" %} (%)</label> + <input type="number" name="thresholdRelativeHumidity" class="form-control" value="85"/> + <span class="help-block" id="{{ form_id }}_thresholdRelativeHumidity_validation"></span> + </div> + <div class="form-group"> + <label for="thresholdLeafWetness">{% trans "Leaf wetness (min/hour)" %}</label> + <input type="number" name="thresholdLeafWetness" class="form-control" value="30"/> + <span class="help-block" id="{{ form_id }}_thresholdLeafWetness_validation"></span> + </div> + <div class="form-group"> + <label for="thresholdPrecipitation">{% trans "Precipitation" %} (mm)</label> + <input type="number" name="thresholdPrecipitation" class="form-control" value="0.2"/> + <span class="help-block" id="{{ form_id }}_thresholdPrecipitation_validation"></span> + </div> + <div class="form-group"> + <label for="slidingHoursPast">{% trans "Sliding hours past (hours)" %} (mm)</label> + <input type="number" name="slidingHoursPast" class="form-control" value="36"/> + <span class="help-block" id="{{ form_id }}_slidingHoursPast_validation"></span> + </div> + <div class="form-group"> + <label for="slidingHoursAhead">{% trans "Sliding hours ahead (hours)" %} (mm)</label> + <input type="number" name="slidingHoursAhead" class="form-control" value="36"/> + <span class="help-block" id="{{ form_id }}_slidingHoursAhead_validation"></span> + </div> + </fieldset> + </div> + <div class="col-md-3"> + + <fieldset> + <legend>{% trans "Other threshold values" %}</legend> + <div class="form-group"> + <label for="thresholdHumidPeriodHours">{% trans "Number of consecutive 'humid hours'" %}</label> + <input type="number" name="thresholdHumidPeriodHours" class="form-control" value="19"/> + <span class="help-block" id="{{ form_id }}_thresholdHumidPeriodHours_validation"></span> + </div> + <div class="form-group"> + <label for="sprayingProtectionDays">{% trans "Spraying protection period" %}</label> + <input type="number" name="sprayingProtectionDays" class="form-control" value="10"/> + <span class="help-block" id="{{ form_id }}_sprayingProtectionDays_validation"></span> + </div> + <div class="form-group"> + <label for="leafLifeTime">{% trans "Leaf life time (days)" %}</label> + <input type="number" name="leafLifeTime" class="form-control" value="75"/> + <span class="help-block" id="{{ form_id }}_leafLifeTime_validation"></span> + </div> + </fieldset> + </div> + </div> + <div class="row"> + <div class="col-md-12 form-group"> + <button type="button" class="btn btn-primary" onclick="if(validateForm(document.getElementById('{{ form_id }}'))){runModel();}">{% trans "Run model" %}</button> + </div> + </div> + </form> + <div class="row"> + <div class="col-md-12"> + <div class="table-responsive"> + <table id="resultsTable" class="table table-striped"></table> + </div> + </div> + </div> +</div> +{% endblock %} +{% block customJS %} +<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script> +<script type="text/javascript" src="{% url "views.settings_js" %}"></script> +<script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script> +<script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script> +<script type="text/javascript" src="{% static "js/util.js" %}"></script> +<script type="text/javascript" src="{% static "js/validateForm.js" %}"></script> +<script type="text/javascript"> + var danishPostCodesUTM; + var organizations; + var allowedCountryCodes = ["NO","DK","SE","FI","LT"]; + $(document).ready(function() { + initOrganizations(); + //initWeatherStations(); + // Init form validation + loadFormDefinition("{{ form_id }}","/static/cerealblotchmodels/formdefinitions/"); + initDanishPostCodesUTM(); + updateGSDates(); + }); + var initDanishPostCodesUTM = function(){ + $.ajax({ + type:"GET", + url: "{% static "cerealblotchmodels/weatherDataInfo/PostalCodesUTM.xml" %}", + statusCode:{ + 200: function(data,textStatus, jqXHR){ + danishPostCodesUTM = Array.prototype.slice.call(data.getElementsByTagName("PostalCode"),0).sort(function(a,b){ + return a.getElementsByTagName("CityName")[0].firstChild.nodeValue < b.getElementsByTagName("CityName")[0].firstChild.nodeValue ? -1 : 1; + }); + }, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + }; + + var initOrganizations = function(){ + $.ajax({ + type:"GET", + url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/organization", + statusCode:{ + 200: function(data,textStatus, jqXHR){ + organizations = data; + var orgSelect = document.getElementById("organizationId_countryCode") + { + orgSelect.options.length = 1; + for(var i=0;i<organizations.length;i++) + { + if(allowedCountryCodes.indexOf(organizations[i].countryCode.countryCode) >= 0) + { + var opt = new Option(organizations[i].organizationName + " (" + organizations[i].countryCode.countryCode + ")", + organizations[i].organizationId + "_" + organizations[i].countryCode.countryCode); + orgSelect.options[orgSelect.options.length] = opt; + } + } + } + }, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + }; + + var updateWeatherDataSources = function(organizationId_countryCode){ + var selectList = document.getElementById("weatherStationId"); + selectList.options.length = 1; // Erase all former options + + if(organizationId_countryCode === "None") + { + return; + } + + var organizationId = organizationId_countryCode.split("_")[0]; + var countryCode = organizationId_countryCode.split("_")[1]; + if(countryCode.toLowerCase() == "dk") + { + //console.info("Making Danish pastry"); + for(var i=0; i<danishPostCodesUTM.length; i++){ + var postCodeEl = danishPostCodesUTM[i]; + var UTM32v = "E" + postCodeEl.getElementsByTagName("UTM_E")[0].firstChild.nodeValue + + "N" + postCodeEl.getElementsByTagName("UTM_N")[0].firstChild.nodeValue; + var city = postCodeEl.getElementsByTagName("CityName")[0].firstChild.nodeValue; + var opt = new Option(city,UTM32v); + //console.info(opt); + selectList.options[selectList.options.length] = opt; + } + } + else + { + $.ajax({ + type:"GET", + url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/poi/organization/" + organizationId, + statusCode:{ + 200: function(data,textStatus, jqXHR){ + // Building result HTML + var wsHTML=["<option value=\"-1\">-- {% trans "Select weather station" %} --</option>"]; + data.sort(compareWeatherStations); + for(var i in data) + { + var ws = data[i]; + wsHTML.push("<option value=\"" + ws["pointOfInterestId"] + "\">" + ws["name"] + "</option>"); + } + document.getElementById("weatherStationId").innerHTML = wsHTML.join(""); + }, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + } + }; + + var updateGSDates = function(){ + var dateGs31 = document.getElementById("dateGs31"); + var date3rdUpperLeafEmergingdateGs31 = document.getElementById("date3rdUpperLeafEmerging"); + var date2ndUpperLeafEmerging = document.getElementById("date2ndUpperLeafEmerging"); + var dateUpperLeafEmerging = document.getElementById("dateUpperLeafEmerging"); + var dateGs75 = document.getElementById("dateGs75"); + + var currentDate = moment(dateGs31.value); + //console.info(currentDate); + currentDate.add(10,"days"); + date3rdUpperLeafEmergingdateGs31.value = currentDate.format("YYYY-MM-DD"); + currentDate.add(10,"days"); + date2ndUpperLeafEmerging.value = currentDate.format("YYYY-MM-DD"); + currentDate.add(10,"days"); + dateUpperLeafEmerging.value = currentDate.format("YYYY-MM-DD"); + currentDate.date(30); + currentDate.month(5); // Zero based, 0 = Jan + dateGs75.value = currentDate.format("YYYY-MM-DD"); + } + + var runModel = function(){ + // Insert please wait message + document.getElementById("resultsTable").innerHTML='<div class="alert alert-info" role="alert">{% trans "The model is running, please wait" %}</div>'; + var formStr = $("#{{ form_id }}").serialize(); + var request = $.ajax({ + type:"GET", + url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/modelform/SEPTORIAHU/runmodel/?" + formStr, + statusCode:{ + 200: renderResults, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + //console.log(formStr); + } + + var paramDict = { + "WEATHER.TM": "{% trans "Temperature, hourly mean" %}", + "WEATHER.RR" : "{% trans "Rain, hourly" %}", + "WEATHER.UM": "{% trans "Relative humidity, hourly mean" %}", + "WEATHER.BT" : "{% trans "Leaf wetness, hourly" %}", + "SEPTORIAHU.HPH" : "{% trans "Humid period hour" %}", + "SEPTORIAHU.HH" : "{% trans "Humid hour (yes/no)" %}", + "SEPTORIAHU.HPHPP" : "{% trans "Humid period hour outside protection period" %}" + }; + + var renderResults = function(data,textStatus, jqXHR) + { + data.sort(compareForecastResults).reverse(); + // First attempt: A table! + var headingLine = "<tr><td style=\"font-weight: bold;\">{% trans "Time" %}</td>"; + if(data.length > 0) + { + var allKeys = JSON.parse(data[0].keys); + for(var i=0;i<allKeys.length;i++) + { + headingLine +="<td style=\"font-weight: bold;\">" + paramDict[allKeys[i]] + "</td>"; + } + headingLine +="<td style=\"font-weight: bold;\">{% trans "Warning status" %}</td>"; + headingLine += "</tr>"; + + var table = ["<table border=\"1\">",headingLine]; + for(var row in data) + { + if(data[row]["validTimeStart"] == null) + { + continue; + } + var resultLine = "<tr><td>" + moment(data[row]["validTimeStart"]).format("YYYY-MM-DD HH:mm") + "</td>"; + var allValues = JSON.parse(data[row].allValues); + for(var i in allKeys) + { + var value = allValues[allKeys[i]]; + if(value != null && $.isNumeric(value)) + { + value = parseFloat(value).toFixed(2); + } + resultLine +="<td>" + value + "</td>"; + } + resultLine +="<td style=\"background-color:"; + var st = data[row]["warningStatus"]; + resultLine += st===0 ? "gray" : st===1 ? "blue" : st===2 ? "green" : st===3 ? "yellow" : "red"; + resultLine +=";\">" + st + "</td>"; + resultLine += "</tr>"; + table.push(resultLine); + } + table.push("</table>"); + document.getElementById("resultsTable").innerHTML=table.join(""); + } + } + + var handleAjaxError = function(jqXHR,textStatus,errorThrown){ + alert(textStatus); + }; +</script> +{% endblock %} \ No newline at end of file diff --git a/cerealblotchmodels/templates/cerealblotchmodels/wheatleafblotchform.html b/cerealblotchmodels/templates/cerealblotchmodels/wheatleafblotchform.html new file mode 100755 index 0000000000000000000000000000000000000000..37fe186d31fcc39126e8e97494fc17090141d8d8 --- /dev/null +++ b/cerealblotchmodels/templates/cerealblotchmodels/wheatleafblotchform.html @@ -0,0 +1,369 @@ +{% extends "base_with_date_picker.html" %} +{% load staticfiles %} +{% comment %} + +# +# Copyright (c) 2015 NIBIO <http://www.nibio.no/>. +# +# This file is part of VIPSWeb. +# VIPSWeb is free software: you can redistribute it and/or modify +# it under the terms of the NIBIO Open Source License as published by +# NIBIO, either version 1 of the License, or (at your option) any +# later version. +# +# VIPSWeb 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 +# NIBIO Open Source License for more details. +# +# You should have received a copy of the NIBIO Open Source License +# along with VIPSWeb. If not, see <http://www.nibio.no/licenses/>. +# + +{% endcomment %} +{% load i18n %} +{% block title %}{% trans "Wheat leaf blotch" %}{% endblock %} +{% block customCSS %} +<!--[if lte IE 9]> + <style type="text/css">#oldIEWarning{display: block !important;}</style> +<![endif]--> + +{% endblock %} +{% block content %} +<div class="singleBlockContainer"> + <h1>{% trans "Wheat leaf blotch" %}</h1> + <div class="alert alert-danger" role="alert" id="oldIEWarning" style="display:none;"> + Du bruker en gammel versjon av Internet Explorer. Den nye bladflekksjukdomsmodellen fungerer med + de fleste moderne nettlesere, som Chrome, Firefox og Internet Explorer versjon 10 og nyere. + </div> + <form role="form" id="{{ form_id }}"> + <div class="row"> + <div class="col-md-12"> + <h2>{% trans "Background data for the wheat leaf blotch model" %}</h2> + </div> + </div> + <div class="row"> + <div class="col-md-6"> + <input type="hidden" name="timeZone" value="Europe/Oslo"/> + <div class="form-group"> + <label for="weatherStationId">{% trans "Weather station" %}</label> + <select name="weatherStationId" id="weatherStationId" class="form-control" onblur="validateField(this);"> + </select> + <span class="help-block" id="{{ form_id }}_weatherStationId_validation"></span> + </div> + <div class="form-group"> + <label for="sowingDate">{% trans "Sowing date" %}</label> + <input type="date" name="sowingDate" class="form-control" max="" onblur="validateField(this);"/> + <span class="help-block" id="{{ form_id }}_sowingDate_validation"></span> + </div> + <div class="form-group"> + <label for="cropOrganismId">{% trans "Crop" %}</label> + <select name="cropOrganismId" id="cropOrganismId" class="form-control" onblur="validateField(this);"> + </select> + <span class="help-block" id="{{ form_id }}_cropOrganismId_validation"></span> + </div> + <div class="form-group"> + <input type="checkbox" name="sameCropAsLastSeason"/> + <label for="sameCropAsLastSeason">{% trans "Same crop as last season" %}</label><br/> + <span class="help-block" id="{{ form_id }}_sameCropAsLastSeason_validation"></span> + </div> + <div class="form-group"> + <input type="checkbox" name="plowed"/> + <label for="plowed"><span>{% trans "Plowed" %}</span></label><br/> + <span class="help-block" id="{{ form_id }}_plowed_validation"></span> + </div> + </div> + <div class="col-md-6 form-group"> + <div class="form-group"> + <label for="observationDate">{% trans "Observation date" %}</label> + <input type="date" name="observationDate" class="form-control"/> + <span class="help-block" id="{{ form_id }}_observationDate_validation"></span> + </div> + <div class="form-group"> + + <label for ="observationValue">{% trans "% Infected leaves" %}</label> + <span>(Tell opp antall blad med bladflekksjukdommer på de 4 øverste fullt utviklede blad på hver av 25 planter (4 * 25 = til sammen 100 blader.)</span> + <input type="number" name="observationValue" class="form-control" min="0" max="100"/> + <span class="help-block" id="{{ form_id }}_observationValue_validation"></span> + </div> + <div class="form-group"> + <label for="sprayingDate">{% trans "Spraying date" %}</label> + <input type="date" name="sprayingDate" class="form-control"/> + <span class="help-block" id="{{ form_id }}_sprayingDate_validation"></span> + </div> + <div class="form-group"> + <label for="preparationId">{% trans "Preparation" %}</label> + <select name="preparationId" id="preparationId" class="form-control"> + </select> + <span class="help-block" id="{{ form_id }}_preparationId_validation"></span> + </div> + <div class="form-group"> + <label for="preparationDose">{% trans "Preparation dose" %} (ml/daa)</label> + <input type="number" name="preparationDose" class="form-control"/> + <span class="help-block" id="{{ form_id }}_preparationDose_validation"></span> + </div> + + </div> + </div> + <div class="row"> + <div class="col-md-6 form-group"> + <button type="button" class="btn btn-primary" onclick="if(validateForm(document.getElementById('{{ form_id }}')) & validateFormExtra()){runModel();}">{% trans "Run model" %}</button> + </div> + </div> + + </form> + <div class="row" id="runningModelMessage" style="display:none"> + <div class="col-md-12"> + <div class="alert alert-info" role="alert">{% trans "Model is running, please wait" %}</div> + </div> + </div> + <div class="row" id="errorMessageContainer" style="display:none"> + <div class="col-md-12"> + <div class="alert alert-danger" role="alert" id="errorMessage"></div> + </div> + </div> + + <div id="results" style="display:none;"> + <div class="alert alert-info" role="info" id="scrollHelp" style="display:none;"> + {% trans "Scroll past chart by swiping the dotted line on the right" %} + </div> + <div id="chartContainer" style="width: 100%; height:400px;"></div> + <div class="table-responsive"> + <table id="resultsTable" class="table table-striped"></table> + </div> + </div> +</div> +{% endblock %} +{% block customJS %} +<script type="text/javascript" src="{% url "django.views.i18n.javascript_catalog" %}"></script> +<script type="text/javascript" src="{% url "views.settings_js" %}"></script> +<script type="text/javascript" src="{% static "js/3rdparty/moment.min.js" %}"></script> +<script type="text/javascript" src="{% static "js/3rdparty/highcharts.js" %}"></script> +<script type="text/javascript" src="{% static "js/util.js" %}"></script> +<script type="text/javascript" src="{% static "js/validateForm.js" %}"></script> +<script type="text/javascript" src="{% static "organisms/organismsUtil.js" %}"></script> +<script type="text/javascript" src="{% static "forecasts/js/forecasts.js" %}"></script> +<script type="text/javascript"> + + function validateFormExtra() + { + var theForm = document.getElementById("{{ form_id }}"); + // Observation: Either no fields or all fields must be set + if(theForm["observationDate"].value.trim() == "" ^ theForm["observationValue"].value.trim() == "") + { + alert("{% trans "Missing observation information" %}"); + return false; + } + // Spraying: Either no fields or all fields must be set + var truthies = (theForm["sprayingDate"].value.trim() == "" ? 1 : 0) + + (theForm["preparationId"].options[theForm["preparationId"].selectedIndex].value == "-1" ? 1 : 0) + + (theForm["preparationDose"].value.trim() == "" ? 1 : 0); + if(truthies != 0 && truthies != 3) + { + alert("{% trans "Missing spraying information" %}"); + return false; + } + return true; + } + + + + var VIPSOrganizationId = {{vips_organization_id}}; + function runModel() + { + document.getElementById("results").style.display="none"; + document.getElementById("errorMessageContainer").style.display="none"; + document.getElementById("runningModelMessage").style.display="block"; + // TODO: Validate form + // + var formStr = $("#{{ form_id }}").serialize(); + var request = $.ajax({ + type:"GET", + url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/barleynetblotchmodel/runmodel/" + VIPSOrganizationId + "?" + formStr, + statusCode:{ + 200: renderResults, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + //console.log(formStr); + } + + var paramDict = { + "BARLEYNETB.DG2410" : "DG2410", + "WEATHER.TMD": "{% trans "Temperature, daily mean" %}", + "WEATHER.RR28" : "{% trans "Rain last 28 days" %}", + "WEATHER.RRD" : "{% trans "Rain, daily" %}", + "WEATHER.TMDD0C" :"{% trans "Day degrees since sowing" %}", + "BARLEYNETB.Y" : "{% trans "Threshold" %}", + "BARLEYNETB.X_ADJUSTED" : "{% trans "Disease" %}", + }; + + var renderResults = function(data,textStatus, jqXHR) + { + data.sort(compareForecastResults).reverse(); + // First attempt: A table! + var headingLine = "<tr><td style=\"font-weight: bold;\">{% trans "Time" %}</td>"; + if(data.length > 0) + { + var allKeys = data[0].keys; + for(var i in allKeys) + { + headingLine +="<td style=\"font-weight: bold;\">" + paramDict[allKeys[i]] + "</td>"; + } + headingLine +="<td style=\"font-weight: bold;\">{% trans "Warning status" %}</td>"; + headingLine += "</tr>"; + + var table = ["<table border=\"1\">",headingLine]; + for(var row in data) + { + if(data[row]["validTimeStart"] == null) + { + continue; + } + var resultLine = "<tr><td>" + moment(data[row]["validTimeStart"]).format() + "</td>"; + for(var i in allKeys) + { + var value = data[row].allValues[allKeys[i]]; + if(value != null && $.isNumeric(value)) + { + value = parseFloat(value).toFixed(2); + } + resultLine +="<td>" + value + "</td>"; + } + resultLine +="<td style=\"background-color:"; + var st = data[row]["warningStatus"]; + resultLine += st===0 ? "gray" : st===1 ? "blue" : st===2 ? "green" : st===3 ? "yellow" : "red"; + resultLine +=";\">" + st + "</td>"; + resultLine += "</tr>"; + table.push(resultLine); + } + table.push("</table>"); + document.getElementById("resultsTable").innerHTML=table.join(""); + + } + else + { + document.getElementById("resultsTable").innerHTML="<h2>{% trans "No data returned" %}</h2>"; + } + document.getElementById("runningModelMessage").style.display="none"; + document.getElementById("errorMessageContainer").style.display="none"; + document.getElementById("results").style.display="block"; + // Then: The chart + // We must sort data ascending again + data.reverse(); + var warningStatusPlotBandData = getWarningStatusPlotBandData(data); + //console.log(warningStatusPlotBandData); + var data = getHighChartsSeries( + data, + [ + {"color": "#6600FF", "opposite": false, "abbr": " ", "title": "{% trans "Disease value" %}"} + ], + [ + {key: "BARLEYNETB.Y", type: "spline", color: "red", name: "{% trans "Threshold" %}", yAxis: 0}, + {key: "BARLEYNETB.X_ADJUSTED", type: "spline", color: "black", name: "{% trans "Disease" %}", yAxis: 0} + ] + ); + renderForecastChart("chartContainer", "{% trans "Barley net blotch development" %}", warningStatusPlotBandData, data); + }; + + + function initWeatherStations(){ + // Fetching information asynchronously from server + var request = $.ajax({ + type:"GET", + url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/poi/organization/" + VIPSOrganizationId, + statusCode:{ + 200: function(data,textStatus, jqXHR){ + // Building result HTML + var wsHTML=["<option value=\"-1\">-- {% trans "Select weather station" %} --</option>"]; + data.sort(compareWeatherStations); + for(var i in data) + { + var ws = data[i]; + wsHTML.push("<option value=\"" + ws["pointOfInterestId"] + "\">" + ws["name"] + "</option>"); + } + document.getElementById("weatherStationId").innerHTML = wsHTML.join(""); + }, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + } + + function initCrops() + { + // Fetching information asynchronously from server + var request = $.ajax({ + type:"GET", + url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/barleynetblotchmodel/barleyvarieties/" + VIPSOrganizationId, + statusCode:{ + 200: function(data,textStatus, jqXHR){ + // Building result HTML + var cropHTML=["<option value=\"-1\">-- {% trans "Select crop" %} --</option>"]; + data.sort(compareOrganisms); + for(var i in data) + { + var crop = data[i]; + + //console.log(ws); + cropHTML.push("<option value=\"" + crop["organismId"] + "\">" + getOrganismLocalNameWithFallback(crop,settings.currentLanguage,settings.defaultLanguage) + "</option>"); + } + document.getElementById("cropOrganismId").innerHTML = cropHTML.join(""); + }, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + } + + function initPreparations() + { + // Fetching information asynchronously from server + var request = $.ajax({ + type:"GET", + url: settings.vipslogicProtocol + "://" + settings.vipslogicServerName + "/rest/barleynetblotchmodel/preparations/" + VIPSOrganizationId, + statusCode:{ + 200: function(data,textStatus, jqXHR){ + // Building result HTML + var preparationHTML=["<option value=\"-1\">-- {% trans "Select preparation" %} --</option>"]; + data.sort(comparePreparations); + for(var i in data) + { + var preparation = data[i]; + //console.log(ws); + preparationHTML.push("<option value=\"" + preparation["preparationId"] + "\">" + preparation["preparationName"] + "</option>"); + } + document.getElementById("preparationId").innerHTML = preparationHTML.join(""); + }, + 400: handleAjaxError, + 401: handleAjaxError, + 404: handleAjaxError, + 500: handleAjaxError + } + }); + } + + // Error handling when collecting forecast information from server fails + var handleAjaxError = function(jqXHR,textStatus,errorThrown){ + var message = jqXHR.responseJSON !== undefined ? jqXHR.responseJSON.message : jqXHR.responseText; + document.getElementById("runningModelMessage").style.display="none"; + document.getElementById("errorMessage").innerHTML = "<h1>Error</h1><pre>" + message + "</pre>"; + document.getElementById("errorMessageContainer").style.display="block"; + }; + + $(document).ready(function() { + initWeatherStations(); + initCrops(); + initPreparations(); + // Init form validation + loadFormDefinition("{{ form_id }}","/static/cerealblotchmodels/formdefinitions/"); + }); +</script> +{% endblock %} \ No newline at end of file diff --git a/cerealblotchmodels/urls.py b/cerealblotchmodels/urls.py index 874644ce522862a2a67a9791d8a243a5e08a49d5..5fb2b028ebe60c7c1190db2e90bc115929abd573 100755 --- a/cerealblotchmodels/urls.py +++ b/cerealblotchmodels/urls.py @@ -21,5 +21,7 @@ from cerealblotchmodels import views urlpatterns = patterns('cerealblotchmodels.views', # ex: /forecasts/ url(r'^$', views.index, name='index'), - url(r'barleynetblotch/', views.barleynetblotchform, name='barleynetblotchform') + url(r'barleynetblotch/', views.barleynetblotchform, name='barleynetblotchform'), + url(r'wheatleafblotch/', views.wheatleafblotchform, name='wheatleafblotchform'), + url(r'septoriahumidity/', views.septoriahumidityform, name='septoriahumidityform') ) \ No newline at end of file diff --git a/cerealblotchmodels/views.py b/cerealblotchmodels/views.py index 860f06bad785260ce16cfa38e5f32e99380e15cd..f7fc75b051abb39a185adb014d945ee4ddac0682 100755 --- a/cerealblotchmodels/views.py +++ b/cerealblotchmodels/views.py @@ -27,4 +27,28 @@ def barleynetblotchform(request): "form_id" : "barleyNetBlotchForm", "max_sowing_date" : max_sowing_date } - return render(request, 'cerealblotchmodels/barleynetblotchform.html', context) \ No newline at end of file + return render(request, 'cerealblotchmodels/barleynetblotchform.html', context) + +def wheatleafblotchform(request): + + # We must calculate the maximum sowing date, which is 14 days before + # system date + #max_sowing_date = datetime.now() + relativedelta(months = settings.SYSTEM_TIME_OFFSET_MONTHS) - relativedelta(days = 14) + vips_organization_id = settings.VIPS_ORGANIZATION_ID + if request.GET.get("organizationId") != None: + vips_organization_id = request.GET.get("organizationId") + + wheat_type = request.GET.get("wheat_type", "spring") + context = { + "vips_organization_id": vips_organization_id, + "form_id" : "wheatLeafBlotchForm", + "wheat_type" : wheat_type + #"max_sowing_date" : max_sowing_date + } + return render(request, 'cerealblotchmodels/wheatleafblotchform.html', context) + +def septoriahumidityform(request): + context = { + "form_id" : "septoriaHumidityForm" + } + return render(request, 'cerealblotchmodels/septoriahumiditymodelform.html', context) \ No newline at end of file