diff --git a/doc/AUTHORS b/doc/AUTHORS index 9faa7a7908f7..4836f99087b9 100644 --- a/doc/AUTHORS +++ b/doc/AUTHORS @@ -53,3 +53,4 @@ Dave DeHaan Matthias Kuhn Salvatore Larosa Nyall Dawson +Vinayan Parameswaran diff --git a/doc/TRANSLATORS b/doc/TRANSLATORS index 2c151debeec8..477cd7ee1c75 100755 --- a/doc/TRANSLATORS +++ b/doc/TRANSLATORS @@ -1,40 +1,40 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + - + diff --git a/i18n/qgis_sv.ts b/i18n/qgis_sv.ts index 07745d5eaf7c..881f2eadc6c9 100644 --- a/i18n/qgis_sv.ts +++ b/i18n/qgis_sv.ts @@ -2246,7 +2246,7 @@ This may cause unexpected results. History and log - + Historik och logg @@ -2862,6 +2862,14 @@ Do you want terminate it anyway? Select the file to analyse + + Output size or resolution required + + + + The output file doesn't exist. You must set up the output size or resolution to create it. + + Select the input directory with files to Assign projection @@ -2986,14 +2994,6 @@ Do you want terminate it anyway? Select the files to analyse - - Output size required - - - - The output file doesn't exist. You must set up the output size to create it. - - Convert paletted image to RGB @@ -3501,14 +3501,14 @@ when pressing on the tool dialog's Help button. - + Width Bredd - + Height Höjd @@ -3984,8 +3984,28 @@ suitable for direct use with Imagine,ArcGIS, GDAL. - New size (required if output file doens't exist) - + Keep existing raster size and resolution + + + + + Raster size in pixels + + + + + Raster resolution in map units per pixel + + + + + Horizontal + Horisontell + + + + Vertical + Vertikal @@ -4701,22 +4721,22 @@ GEOS geoprocessing error: One or more input features have invalid geometry. - + Invalid output filename - + Please enter a valid output file path and name. - + Layer not found - + Layer %1 not found. @@ -4746,7 +4766,7 @@ GEOS geoprocessing error: One or more input features have invalid geometry. Output format - + Utdataformat @@ -4915,14 +4935,12 @@ GEOS geoprocessing error: One or more input features have invalid geometry.R&edigera - &File - &Arkiv + &Arkiv - &Open Recent Projects - &Öppna senaste projekt + &Öppna senaste projekt @@ -4980,9 +4998,8 @@ GEOS geoprocessing error: One or more input features have invalid geometry.&Hjälp - New Project From Template - Nytt projekt från mall + Nytt projekt från mall @@ -5060,9 +5077,8 @@ GEOS geoprocessing error: One or more input features have invalid geometry.Web - &New Project - &Nytt projekt + &Nytt projekt @@ -5070,9 +5086,8 @@ GEOS geoprocessing error: One or more input features have invalid geometry.Ctrl+N - &Open Project... - &Öppna projekt... + &Öppna projekt... @@ -5080,9 +5095,8 @@ GEOS geoprocessing error: One or more input features have invalid geometry.Ctrl+O - &Save Project - &Spara projekt + &Spara projekt @@ -5090,9 +5104,8 @@ GEOS geoprocessing error: One or more input features have invalid geometry.Ctrl+S - Save Project &As... - Sp&ara projekt som... + Sp&ara projekt som... @@ -5136,9 +5149,8 @@ GEOS geoprocessing error: One or more input features have invalid geometry.Offsetkurva - Exit - Avsluta + Avsluta @@ -5704,12 +5716,12 @@ Fungear på aktuellt redigerbart lager Select By Expression - + Välj med uttryck Select features using an expression - + Välj objekt med ett uttryck Add PostGIS Layer... @@ -5876,11 +5888,51 @@ Fungear på aktuellt redigerbart lager Properties... Egenskaper... + + + P&roject + + + + + &Open Recent + + + + + New From Template + + + + + &New + &Ny + + + + &Open... + + + + + &Save + + + + + Save &As... + + Composer Manager... Komponeringshanterare... + + + Exit QGIS + Avsluta QGIS + Add Feature @@ -6606,27 +6658,27 @@ Wrong line: %1 Python Python - Python + Python An error has occured while executing Python code: - Ett fel har inträffat vid Pythonexekvering: + Ett fel har inträffat vid Pythonexekvering: Python version: - Python version: + Python version: QGIS version: - QGIS version: + QGIS version: Python path: - Python sökväg: + Python sökväg: Python error - Pythonfel + Pythonfel Couldn't load plugin '%1' from ['%2'] @@ -6634,70 +6686,114 @@ Wrong line: %1 Couldn't load plugin %1 - Kunde inte läsa in insticksprogram %1 + Kunde inte läsa in insticksprogram %1 %1 due an error when calling its classFactory() method - %1 på grund av fel med classFactory() metoden + %1 på grund av fel med classFactory() metoden %1 due an error when calling its initGui() method - %1 på grund av fel med initGui() metoden + %1 på grund av fel med initGui() metoden Error while unloading plugin %1 - Fel med att ladda ur insticksprogram %1 + Fel med att ladda ur insticksprogram %1 PythonConsole - Clear console + Open file + Öppna fil + + + Save + Spara + + + Save As.. + + + + Cut + + + + Copy + + + + Paste + + + + Run script + + Comment code + + + + Uncomment code + + + + Object browser + + + + Show editor + + + + Clear console + Rensa konsol + Settings - Inställningar + Inställningar Import Class - + Importera klass Manage Script - + Hantera skript Import Sextante class - + Importera Sextante-klass Import PyQt.QtCore class - + Importera PyQt.QtCore-klass Import PyQt.QtGui class - + Importera PyQt.QtGui-klass Open script file - + Öppna skriptfil Save to script file - + Spara till skriptfil Run command - + Kör kommando Help - Hjälp + Hjälp Python Console - Python konsol + Python konsol @@ -7437,10 +7533,10 @@ Vill du specificera sökväg (GISBASE) till installationen av GRASS? - - - - + + + + @@ -8091,161 +8187,161 @@ Error(%2): %3 - + OGR driver for '%1' not found (OGR error: %2) - + trimming attribute name '%1' to ten significant characters produces duplicate column name. - + creation of data source failed (OGR error:%1) - + creation of layer failed (OGR error:%1) - - + + unsupported type for field %1 - + creation of field %1 failed (OGR error: %2) - + created field %1 not found (OGR error: %2) - + Invalid variant type for field %1[%2]: received %3 with type %4 - - - + + + Feature geometry not imported (OGR error: %1) - + Feature creation error (OGR error: %1) - + Feature write errors: - + Stopping after %1 errors - - + + Only %1 of %2 features written. - - + + Arc/Info ASCII Coverage Arc/Info ASCII Coverage - - + + Atlas BNA Atlas BNA - - + + Comma Separated Value Kommaseparerade värden - + ESRI Shapefile ESRI Shapefil - - - + + + FMEObjects Gateway FMEObjects Gateway - - + + GeoJSON GeoJSON - - + + GeoRSS GeoRSS - - + + Geography Markup Language [GML] Geography Markup Language [GML] - - + + Generic Mapping Tools [GMT] Generic Mapping Tools [GMT] - - + + GPS eXchange Format [GPX] GPS eXchange Format [GPX] - - + + Keyhole Markup Language [KML] Keyhole Markup Language [KML] - + Mapinfo TAB - + Mapinfo MIF - - + + Spatial Data Transfer Standard [SDTS] Spatial Data Transfer Standard [SDTS] - + @@ -8253,66 +8349,66 @@ Only %1 of %2 features written. SpatiaLite - - + + ESRI FileGDB ESRI FileGDB - + Failed to transform, writing stopped. (Exception: %1) - - + + INTERLIS 1 INTERLIS 1 - + Failed to transform a point while drawing a feature with ID '%1'. Writing stopped. (Exception: %2) - - + + INTERLIS 2 INTERLIS 2 - + Mapinfo File Mapinfo File - - + + Microstation DGN Microstation DGN - - + + S-57 Base file S-57 Base file - - + + SQLite SQLite - - + + AutoCAD DXF AutoCAD DXF - - + + Geoconcept Geoconcept @@ -8338,12 +8434,12 @@ Only %1 of %2 features written. Referenskoordinatsystem odefinierad - sätter standardreferenskoordinatsystem: %1 - + Reading raster Läser in raster - + To select features, choose a vector layer in the legend @@ -8424,7 +8520,27 @@ Only %1 of %2 features written. - + + minidump written to %1 + + + + + writing of minidump to %1 failed (%2) + + + + + creation of minidump to %1 failed (%2) + + + + + Crash dumped + + + + QGIS starting in non-interactive mode not supported. You are seeing this message most likely because you have no DISPLAY environment variable set. @@ -8496,7 +8612,7 @@ You are seeing this message most likely because you have no DISPLAY environment - + No active vector layer @@ -8518,17 +8634,17 @@ You are seeing this message most likely because you have no DISPLAY environment Valt område sträcker sig utanför lagrets koordinatsystem. - + Raster Histogram - + Pixel Value - + Frequency @@ -8567,476 +8683,546 @@ You are seeing this message most likely because you have no DISPLAY environment Spara vektorlager i en SQL Anywhere-databas - + OGR[%1] error %2: %3 - - - - - + + + + + - - - - - - - + + + + + + + OGR - + Unable to create the datasource. %1 exists and overwrite flag is false. - + Unable to get driver %1 - + Arc/Info Binary Coverage - + DODS - - + + ESRI Personal GeoDatabase - + ESRI ArcSDE - + ESRI Shapefiles - + Grass Vector - + Informix DataBlade - + Ingres - + MySQL - + MSSQL - + Oracle Spatial - + ODBC - + OGDI Vectors - + PostgreSQL PostgreSQL - + UK. NTF2 - + U.S. Census TIGER/Line - + VRT - Virtual Datasource - + X-Plane/Flightgear - + All files Alla filer - + Duplicate field (10 significant characters): %1 - + Creating the data source %1 failed: %2 - + Unknown vector type of %1 - + Creation of OGR data source %1 failed: %2 - + creation of field %1 failed - + Couldn't create file %1.qpj - + Cannot get GDAL raster band: %1 - + Cannot open GDAL MEM dataset %1: %2 - + Cannot GDALCreateGenImgProjTransformer: - + Cannot inittialize GDALWarpOperation : - + Cannot ChunkAndWarpImage: %1 - + [GDAL] All files (*) - - + + GDAL/OGR VSIFileHandler - + This raster file has no bands and is invalid as a raster layer. - + + Nearest Neighbour + + + + + Average + + + + + Gauss + Gauss + + + + Cubic + Kubisk + + + + Mode + Läge + + + + None + Ingen + + + day Note: Word is part matched in code - + days Note: Word is part matched in code - + week Note: Word is part matched in code - + weeks Note: Word is part matched in code - + month Note: Word is part matched in code - + months Note: Word is part matched in code - + year Note: Word is part matched in code - + years Note: Word is part matched in code - + second Note: Word is part matched in code - + seconds Note: Word is part matched in code - + minute Note: Word is part matched in code - + minutes Note: Word is part matched in code - + hour Note: Word is part matched in code - + hours Note: Word is part matched in code - + Cannot convert '%1' to double - + Cannot convert '%1' to int - + Cannot convert '%1' to DateTime - + Cannot convert '%1' to Date - + Cannot convert '%1' to Time - + Cannot convert '%1' to Interval - + Cannot convert '%1' to boolean - + + Invalid regular expression '%1': %2 - + Index is out of range - - - - - - - - - - - + - - + + Cannot convert '%1:%2:%3' to color + + + + + + + + Cannot convert '%1:%2:%3:%4' to color + + + + + "%1" is not a valid color ramp + + + + + Cannot convert '%1:%2:%3:%4:%5' to color + + + + + + + + + + + + + + + + + Math - - - - - - - + + + + + + + Conversions - + + Conditionals Villkor - - - - - - - - - + + + + + + + + + Date and Time - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + String - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + Color + Färg + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Geometry - - - - + + + + Record - + Special - - + + No root node! Parsing failed? - + (no root) - + Unary minus only for numeric values. - + Can't preform /, *, or % on DateTime and Interval - + [unsupported type;%1; value:%2] - + Column '%1' not found @@ -9102,127 +9288,127 @@ You are seeing this message most likely because you have no DISPLAY environment - - - - - - + + + + + + Connection to database failed - + No owner name found - - + + Creation of data source %1 failed: %2 - - + + Loading of the layer %1 failed - + Field name clash found (%1 not remappable) - + %1 not owner of the table %2. - + Unable determine number of geometry columns of layer %1.%2: %3 - + Unable to delete layer %1.%2: %3 - + Unable to clean metadata %1.%2: %3 - - + + Unable to delete layer %1: %2 - + Loading of the MSSQL provider failed - - - + + + Unsupported type for field %1 - - - + + + Creation of fields failed - + creation of data source %1 failed. %2 - + loading of the layer %1 failed - + creation of fields failed - + Unable to initialize SpatialMetadata: - + Could not create a new database - + Unable to activate FOREIGN_KEY constraints [%1] - + Unable to delete table %1 - + Unable to delete table %1: @@ -9316,49 +9502,49 @@ You are seeing this message most likely because you have no DISPLAY environment - - - - + + + + Reading raster part %1 of %2 - + Building Pyramids... - + Building pyramids failed - write access denied - + Write access denied. Adjust the file permissions and try again. Skrivåtkomst nekad. Justera filrättigheterna och försök igen. + + - - - + Building pyramids failed. Kunde ej skapa pyramider. - + The file was not writable. Some formats do not support pyramid overviews. Consult the GDAL documentation if in doubt. Filen var inte skrivbar. Vissa format stödjer inte pyramider. Kontrollera med GDAL-dokumentation om du är osäker. - - + + Building pyramid overviews is not supported on this type of raster. Denna typ av raster stödjer ej att bygga pyramider. - + Building internal pyramid overviews is not supported on raster layers with JPEG compression and your current libtiff library. Nuvarande libtiff-bibliotek stödjer inte att bygga pyramider från lager med JPEG-kompression. @@ -9786,7 +9972,7 @@ SQL: %1 QgisApp - + Layers Lager @@ -9795,108 +9981,108 @@ SQL: %1 Version - - + + Invalid Data Source Ogiltig datakälla - - - - - + + + + + No Layer Selected Inget Lager Markerat - + There is a new version of QGIS available Det finns en ny version av QGIS tillgänglig - + You are running a development version of QGIS Du använder en utvecklingsversion av QGIS - + You are running the current version of QGIS Du använder den senaste versionen av QGIS - + Would you like more information? Vill du ha mer information? - - - - + + + + QGIS Version Information Versionsinformation för QGIS - + Unable to get current version information from server Kan inte hämta senaste versionen från servern - + Connection refused - server may be down Anslutning nekad - servern kanske är nere - + QGIS server was not found QGIS-servern hittades inte - - - - + + + + Invalid Layer Ogiltigt Lager - + %1 is an invalid layer and cannot be loaded. %1 är ett ogiltigt lager och kan inte laddas. - + Problem deleting features Problem med att ta bort objekt - + A problem occured during deletion of features Ett problem uppstod under radering av objekt - + No Vector Layer Selected Inget Vektorlager Markerat - + Deleting features only works on vector layers Radering av objekt fungerar bara på vektorlager - + To delete features, you must select a vector layer in the legend För att ta bort ett objekt så måste du markera ett vektorlager i teckenförklaringen - + Map legend that displays all the layers currently on the map canvas. Click on the check box to turn a layer on or off. Double click on a layer in the legend to customize its appearance and set other properties. Teckenförklaring som visar alla lager i kartvyn. Klicka på en checkbox för att aktivera eller inaktivera ett lager. Dubbelklicka på ett lager i teckenförklaringen för att ställa in dess utseende och ändra andra inställningar. - + Map overview canvas. This canvas can be used to display a locator map that shows the current extent of the map canvas. The current extent is shown as a red rectangle. Any layer on the map can be added to the overview canvas. Översiktskarta. Denna kartvy kan användas för att visa en översikt där den nuvarande kartvyn syns som en röd rektangel. Alla lager i kartan kan läggas till i översiktskartan. @@ -9908,35 +10094,35 @@ SQL: %1 Browser - Bläddrare + Bläddrare Browser (2) - + Bläddrare (2) - + Current Edits - + Progress bar that displays the status of rendering layers and other time-intensive operations Förloppsindikator som visar statusen för rendering av lager och andra tidsintensiva operationer - + Displays the current map scale Visar den nuvarande kartskalan - + Render Rendera - + When checked, the map layers are rendered in response to map navigation commands and other events. When not checked, no rendering is done. This allows you to add a large number of layers and symbolize them before rendering. När den här rutan är markerad så renderas kartlagren vid navigationskommandon och andra händelser com kräver en uppdatering av kartan. När den inte är markerad så renderas ingenting. Detta låter dig addera ett stort antal lager och ställa in deras symbologi innan du renderar dem. @@ -9945,7 +10131,7 @@ SQL: %1 QGis-filer (*.qgs) - + Choose a QGIS project file Välj en QGIS-projektfil @@ -10383,12 +10569,12 @@ SQL: %1 Insticksprogram - + Toggle map rendering Toggla kartritande - + Ready Klar @@ -10397,18 +10583,18 @@ SQL: %1 Spara som - + Calculating... Beräknar... - - + + Abort... Avbryt... - + Choose a QGIS project file to open Välj en QGIS-projektfil att öppna @@ -10417,13 +10603,13 @@ SQL: %1 QGIS-projekt läsfel - + Unable to open project Kan inte öppna projekt - - + + To perform a full histogram stretch, you need to have a raster layer selected. För att sträcka ut histogrammet måste du ha valt ett lager. @@ -10432,28 +10618,28 @@ SQL: %1 Inget rasterlager valt - - + + Layer is not valid Lager är ej giltigt - + The layer is not a valid layer and can not be added to the map Lagret är inte ett giltigt lager och kan inte läggas till kartan - + Save? Spara? - + Open a GDAL Supported Raster Data Source Öppna ett rasterlager som GDAL stöder - + Unsupported Data Source Datakälla som ej stöds @@ -10462,17 +10648,17 @@ SQL: %1 Skriv in ett namn för det nya bokmärket: - - - - - - - - - - - + + + + + + + + + + + Error Fel @@ -10528,24 +10714,24 @@ SQL: %1 Startar Python - + Provider does not support deletion Datapluginet stödjer inte radering - + Data provider does not support deleting features Datapluginet stödjer inte radering av objekt - - - + + + Layer not editable Lagret kan inte redigeras - + The current layer is not editable. Choose 'Start editing' in the digitizing toolbar. Nuvarande lager är ej redigerbart. Välj 'Tillåt redigering' i verktygsraden för digitalisering. @@ -10562,17 +10748,17 @@ SQL: %1 Lägg till ring - + Scale Skala - + Current map scale (formatted as x:y) Aktuell kartskala (i format x:y) - + Map coordinates at mouse cursor position Kartkoordinater vid musens läge @@ -10589,7 +10775,7 @@ SQL: %1 Dela objekt - + Current map scale Nuvarande kartskala @@ -10599,23 +10785,23 @@ SQL: %1 GPS Information - + Extents: Utsträckning: - + Project file is older Projektiflen är föråldrad - + <tt>Settings:Options:General</tt> Menu path to setting options <tt>Inställningar : Alternativ : Allmänt</tt> - + Warn me when opening a project file saved with an older version of QGIS Varna mig när jag öppnar en projektifl som sparades med en äldre version av QGIS @@ -10798,43 +10984,43 @@ Kontakta utvecklarna. Hantera anpassade Coordinate Reference Systems - + Minimize Minimera - + Ctrl+M Minimize Window Ctrl+M - + Minimizes the active window to the dock Minimera aktivt fönster till dockan - + Zoom Zooma - + Toggles between a predefined size and the window size set by the user Togglar mellan fördefinerad storlek och användarvald storlek på fönstret - + Bring All to Front Flytta allt överst - + Bring forward all open windows Flytta alla öppna fönster framåt - + Failed to open Python console: Kunde inte öppna python-konsolen: @@ -10843,12 +11029,12 @@ Kontakta utvecklarna. Redigera - + Panels Paneler - + Toolbars Verktygsrader @@ -10861,12 +11047,12 @@ Kontakta utvecklarna. Fönster - + Toggle extents and mouse position display Toggla visning av utsträckning och pekarposition - + Stop map rendering Stanna kartrendering @@ -10883,22 +11069,22 @@ Kontakta utvecklarna. Avslutar... - + This icon shows whether on the fly coordinate reference system transformation is enabled or not. Click the icon to bring up the project properties dialog to alter this behaviour. Denna ikon visar om transformation mellan koordinatsystem är påslagen eller ej. Klicka ikonen föra att öppna projekegenskaper och ändra beteendet. - + CRS status - Click to open coordinate reference system dialog CRS status - Klicka för att öppna dialog för koordinatsystem - + Overview Översikt - + Always ignore these errors? @@ -10907,7 +11093,7 @@ Always ignore these errors? Ignorera alltid dessa fel? - + %n SSL errors occured number of errors @@ -10916,7 +11102,7 @@ Ignorera alltid dessa fel? - + Select raster layers to add... Välj rasterlager att lägga till... @@ -10943,7 +11129,7 @@ Ignorera alltid dessa fel? QGIS startar... - + Window Fönster @@ -10952,282 +11138,282 @@ Ignorera alltid dessa fel? Vekt&or - + &Web &Web - + Shows the map coordinates at the current cursor position. The display is continuously updated as the mouse is moved. It also allows editing to set the canvas center to a given position. The format is lat,lon or east,north Visar kartans koordinater vid markörens position. Positionen ändras när musen flyttas. Du kan också redigera positionen, för att sätta kartans centrum vid en specifik position. Formatet är lat,lon eller öst,norr - + Current map coordinate (lat,lon or east,north) Aktuell koordinat (lat/lon eller nord/ost) - + Control rendering order Styr renderingsordning - + Map layer list that displays all layers in drawing order. Lista över kartlager som visar alla lager i den ordning de ritas. - + Layer order Lagerordning - + [ERROR] Can not make qgis.db private copy [FEL] Kan inte skapa en privata kopia av qgis.db - + Update of view in private qgis.db failed. %1 Kunde inte uppdatera vyn i den privata qgis.db. %1 - - + + < Blank > < Blank > - + QGIS version QGIS-version - + QGIS code revision QGIS kodrevision - + Compiled against Qt Kompilerad för Qt - + Running against Qt Kör med Qt - + GEOS Version GEOS-version - + PostgreSQL Client Version PostgreSQL-klientversion - + No support. Inget stöd. - + SpatiaLite Version SpatiaLite-version - + QWT Version QWT-version - + PROJ.4 Version PROJ.4 Version - + QScintilla2 Version - + This copy of QGIS writes debugging output. Den här kopian av Qgis skriver ut felsökningsinformation. - + Select zip layers to add... Välj ziplager att lägga till... - + Vector Vektor - + Raster Raster - + Select vector layers to add... Välj vektorlager att lägga till... - + PostgreSQL PostgreSQL - + Cannot get PostgreSQL select dialog from provider. Kan inte hämta PostgreSQL-dialog från datakällan. - + %1 is an invalid layer - not loaded %1 är ett ogiltigt lager - läses inte in - + SpatiaLite - + Cannot get SpatiaLite select dialog from provider. Kan inte hämta SpatiaLite-dialog från datakällan. - + MSSQL - + Oracle - + Cannot get Oracle select dialog from provider. - + Kan inte få Oracle-dialogen från datakällan. - + WMS - + Cannot get WMS select dialog from provider. Kan inte få WMS-dialogen från datakällan. - + WCS - + Cannot get WCS select dialog from provider. Kan inte få WCS-dialogen från datakällan. - + WFS - + Cannot get WFS select dialog from provider. Kan inte få WFS-dialogen från datakällan. - + Default failed to open: %1 - + Default not found: %1 - + Open Template Project - + Auto-open Project - + Auto-öppna projekt - + Failed to open: %1 - + Not valid project file: %1 - + Project failed to open: %1 - + Default template has been reopened: %1 - + File not found: %1 - - - + + + QGis files QGis-filer - + Loading project: %1 - + Security warning - + project macros have been disabled. - + Enable macros Aktivera makron - + Project loaded - + Unable to load %1 Kan inte läsa in %1 @@ -11236,24 +11422,24 @@ Ignorera alltid dessa fel? Välj ett vektorlager först. - + Layer labeling settings Lagrets etikettinställningar - - - + + + Not enough features selected Inte tillräckligt med objekt valda - + Union operation canceled Unionsoperation avbruten - + Could not %1 changes to layer %2 Errors: %3 @@ -11261,164 +11447,164 @@ Errors: %3 - + rollback - + cancel - + avbryt - + Save Spara - - - + + + all - + alla - + Rollback - + Cancel - Avbryt + Avbryt - + Current edits - + %1 current changes for %2 layer(s)? - + copy - + kopiera - + Plugin layer - + Memory layer - - + + Duplicate layer: - + %1 (duplication resulted in invalid layer) - + %1 (%2type unsupported) - + Couldn't load Python support library: %1 Kunde inte läsa in Python-bibliotek: %1 - + Couldn't resolve python support library's instance() symbol. Kunde inte lösa ut python-bibliotekets instance()-symbol. - + Python support ENABLED :-) Pythonstöd på - + QGIS - Changes since last release QGIS - Ändringar förra utgåvan - + Unknown network socket error: %1 Okänt nätverksfel: %1 - - + + To change brightness or contrast, you need to have a raster layer selected. - + Project has layer(s) in edit mode with unsaved edits, which will NOT be saved! - + Do you want to save the current project?%1 - + Current CRS: %1 (OTFR enabled) Nuvarande referenskoordinatsystem: %1 (transformering är på) - + Current CRS: %1 (OTFR disabled) Nuvarande referenskoordinatsystem: %1 (transformering är av) - - + + Error adding valid layer to map canvas - - - + + + Raster layer - + This project file was saved by an older version of QGIS Den här projektfilen sparades med en äldre version av QGIS - + Warning Varning - + This layer doesn't have a properties dialog. det här lagret har inte en egenskaps-dialog. - + Authentication required Autenticering krävs - + Proxy authentication required Mellanvärdsautentisering krävs @@ -11433,37 +11619,37 @@ This binary was compiled against Qt %1,and is currently running against Qt %2 - + Choose a file name to save the QGIS project file as Välj ett namn för att spara QGIS projektfil - + Choose a file name to save the map image as Välj ett filnamn att spara kartbilden som - + Start editing failed Misslyckades att påbörja redigering - + Provider cannot be opened for editing Källan kan inte öppnas för redigering - + Stop editing Sluta redigera - + Do you want to save the changes to layer %1? Vill du spara ändringarna till lager %1? - + Problems during roll back Problem vid återgång @@ -11472,12 +11658,12 @@ Denna binärfil kompilerades mot Qt %1 och kärs just nu mot Qt %2 Python konsol - + Map coordinates for the current view extents Kartkoordinater för aktuell vys utsträckning - + Maptips require an active layer Karttips kräver ett aktivt lager @@ -11575,7 +11761,7 @@ Denna binärfil kompilerades mot Qt %1 och kärs just nu mot Qt %2 Ny - + &Database &Databas @@ -11584,258 +11770,258 @@ Denna binärfil kompilerades mot Qt %1 och kärs just nu mot Qt %2 Etikett - - + + Coordinate: Koordinat: - + Current map coordinate Nuvarande kartkoordinat - - - + + + Private qgis.db Privat qgis.db - + Could not open qgis.db Kunde inte öppna qgis.db - + Migration of private qgis.db failed. %1 Överföring av privat qgis.db misslyckades. %1 - + Compiled against GDAL/OGR Kompilerad mot GDAL/OGR - + Running against GDAL/OGR Körs mot GDAL/OGR - + %1 doesn't have any layers %1 har inga lager - + %1 is not a valid or recognized data source %1 är inte en giltig eller känd datakälla - + Cannot get MSSQL select dialog from provider. Kan inte få MSSQL-dialogen från datakällan. - - + + Saved project to: %1 Sparade projekt i: %1 - - + + Unable to save project %1 Kunde inte spara projekt %1 - + Saved map image to %1 Sparade kartbild till %1 - + Labeling Options - + Please select a vector layer first - + Cannot write raster error code: %1 - + Kan inte skriva till raster felkod: %1 - + Saving done Spara klart - + Export to vector file has been completed Export till verktorlager fullföljdes - + Save error Kunde inte spara - + Export to vector file failed. Error: %1 Export till verktorlager misslyckades. Fel: %1 - + Features deleted Objekt borttagna - + Merging features... Slår ihop objekt... - + Abort Avbryt - + Create unique print composer title - + Skapa en unik titel på komponeraren - + (title generated if left empty) - + Composer title - + Komponerartitel - + Title can not be empty! - + Title already exists! - - + + Composer %1 Komponerare %1 - + copy - + kopiera - - + + No active layer Inget aktivt lager - - + + No active layer found. Please select a layer in the layer list Inget aktivt lager hittades. Välj ett lager i listan - - + + Active layer is not vector Aktivt lager är inte ett vektorlager - - + + The merge features tool only works on vector layers. Please select a vector layer from the layer list Verktyget för att slå ihop objekt fungerar endast på vektorlager. Välj ett vektorlager från listan - - + + Merging features can only be done for layers in editing mode. To use the merge tool, go to Layer->Toggle editing Verktyget för att slå ihop objekt fungerar endast på lager i redigeringsläge. För att använda verktyget gå till Lager->Toggla redigering - - - + + + The merge tool requires at least two selected features Verktyget för att slå ihop objekt kräver minst två valda objekt - + Merged feature attributes Ihopslagna objektattribut - - + + Merge failed Ihopslagning misslyckades - - + + An error occured during the merge operation Ett fel upstod under ihopslagningen - - + + The union operation would result in a geometry type that is not compatible with the current layer and therefore is canceled Unionen skulle resultera i en geometri som inte stödjs av nuvarande lager, och avbröts därför - + Merged features Ihopslagna objekt - + Features cut Objekt utklippta - + Features pasted Objekt inklistrade - + Cannot copy style: %1 Kan inte kopiera stil: %1 - + Cannot parse style: %1:%2:%3 Kan inte tolka stil: %1:%2:%3 - + Cannot read style: %1 Kan inte läsa stil: %1 - - + + Could not commit changes to layer %1 Errors: %2 @@ -11850,19 +12036,19 @@ Fel: %2 QGIS - Ändringar i SVN sedan förra utgåvan - + Unable to communicate with QGIS Version server %1 Kan inte skapa en uppkopling mot QGIS versionsserver %1 - + The layer %1 is not a valid layer and can not be added to the map Lagret %1 är inte ett giltigt lager och kan inte läggas till kartan - + %n feature(s) selected on layer %1. number of selected features @@ -11875,27 +12061,27 @@ Fel: %2 %1 är inte en giltig eller igenkänd källa till rasterdata - + %1 is not a supported raster data source %1 är inte en rasterkälla som stöds - + <p>This project file was saved by an older version of QGIS. When saving this project file, QGIS will update it to the latest version, possibly rendering it useless for older versions of QGIS.<p>Even though QGIS developers try to maintain backwards compatibility, some of the information from the old project file might be lost. To improve the quality of QGIS, we appreciate if you file a bug report at %3. Be sure to include the old project file, and state the version of QGIS you used to discover the error.<p>To remove this warning when opening an older project file, uncheck the box '%5' in the %4 menu.<p>Version of the project file: %1<br>Current version of QGIS: %2 <p>Denna projektfil sparades av en äldre version av QGIS. När du sparar denna projektifl, kommer QGIS att skriva den med senaste versionen, vilket kan göra den oanvändbar för äldre versioner av QGIS. Även om QGIS utvecklare försöker bibehålla bakåtkompabilitet, så kan en del av information i den gamla projektfilen eventuellt försvinna. För att förbättra kvaliteten på QGIS, uppskattar vi om du skapar en felrapport på %3. Inkludera den gamla projektiflen, och tala om vilken version av QGIS du använde när du upptäckte felet.<p>För att ta bort denna varning när du öppnar gamla projekfiler, avmarkera rutan '%5' i meny %4.<p>Projektfilens version: %1<br>QGIS nuvarande version: %2 - + SSL errors occured accessing URL %1: SSL-fel inträffade vid åtkomst av URL %1: - + Delete features Borttagna objekt - + Delete %n feature(s)? number of features to delete @@ -11965,7 +12151,7 @@ Denna QGIS har inte byggts med SpatiaLite-stöd. QgisAppInterface - + Attributes changed Attribut ändrades @@ -11986,7 +12172,7 @@ Denna QGIS har inte byggts med SpatiaLite-stöd. Essen (Germany), Developer meeting 2012 - + Essen (Tyskland), utvecklarmöte 2012 @@ -12202,7 +12388,7 @@ p, li { white-space: pre-wrap; } Add tab or group for %1 - + Lägg till flik eller grupp för %1 @@ -12210,27 +12396,27 @@ p, li { white-space: pre-wrap; } Dialog - Dialog + Dialog Create category - + Skapa kategori as - + som a tab - + en flik a group in container - + en grupp i en behållare @@ -12243,7 +12429,7 @@ p, li { white-space: pre-wrap; } Select background color - Välj bakgrundsfärg + Välj bakgrundsfärg @@ -12261,7 +12447,7 @@ p, li { white-space: pre-wrap; } Background color - Bakgrundsfärg + Bakgrundsfärg @@ -12375,22 +12561,22 @@ Användaredatabas-sökväg: %8 QgsAtlasComposition - + Filename parsing error: %1 - + Feature filter parser error: %1 - + Feature filter eval error: %1 - + Filename eval error: %1 @@ -12398,20 +12584,20 @@ Användaredatabas-sökväg: %8 QgsAtlasCompositionWidget - - + + Map %1 Karta %1 - + Expression based filename Filnamn baserat på uttryck - + Expression based filter - + Uttrycksbaserat filter @@ -12593,14 +12779,14 @@ Användaredatabas-sökväg: %8 QgsAttributeActionDialogBase - - + + Name Namn - - + + Action Kommando @@ -12609,22 +12795,20 @@ Användaredatabas-sökväg: %8 Denna lista innehåller alla kommandon som har definierats för det aktiva lagret. Lägg till kommandon genom att ange detaljerna i fälten nedan och sedan trycka på knappen Lägg till kommando. Kommandon kan redigeras genom att dubbelklicka på dem i listan. - Move up - Flytta upp + Flytta upp - + Move the selected action up Flytta det markerade kommandot uppåt - Move down - Flytta ner + Flytta ner - + Move the selected action down Flytta det markerade kommandot neråt @@ -12633,23 +12817,23 @@ Användaredatabas-sökväg: %8 Ta bort - + Remove the selected action Ta bort det markerade kommandot - - + + Enter the name of an action here. The name should be unique (qgis will make it unique if necessary). Ange namnet för ett kommando här. Namnet bör vara unikt (QGIS kommer att göra det unikt om det behövs). - + Enter the action name here Ange kommandonamnet här - + Enter the action command here Ange kommandot här @@ -12658,7 +12842,7 @@ Användaredatabas-sökväg: %8 Lägg till kommando - + Inserts the action into the list above Lägg till kommandot i listan ovan @@ -12667,12 +12851,12 @@ Användaredatabas-sökväg: %8 Uppdatera kommando - + Update the selected action Uppdatera det markerade kommandot - + Insert field Lägg till fält @@ -12681,22 +12865,22 @@ Användaredatabas-sökväg: %8 Lägger till det markerade fältet i kommandot - + The valid attribute names for this layer Giltiga attributnamn för det här lagret - + Captures any output from the action Sparar all utskrift från kommandot - + Captures the standard output or error generated by the action and displays it in a dialog box Sparar standard ut eller fel från kommandot och visar det i en dialogruta - + Capture output Spara utskrift @@ -12706,124 +12890,122 @@ Användaredatabas-sökväg: %8 Attributkommando - + Action list Kommandolista - + This list contains all actions that have been defined for the current layer. Add actions by entering the details in the controls below and then pressing the Add to action list button. Actions can be edited here by double clicking on the item. Denna lista innehåller alla kommandon som har definierats för det aktiva lagret. Lägg till kommandon genom att ange detaljerna i fälten nedan och sedan trycka på knappen Lägg till kommando. Kommandon kan redigeras genom att dubbelklicka på dem i listan. - - - + + Type Typ - Remove action - Ta bort kommando + Ta bort kommando - + Add default actions Lägg till standardkommando - + Action properties Kommandoegenskaper - + Open Öppna - + Enter the action here. This can be any program, script or command that is available on your system. When the action is invoked any set of characters that start with a % and then have the name of a field will be replaced by the value of that field. The special characters %% will be replaced by the value of the field that was selected. Double quote marks group text into single arguments to the program, script or command. Double quotes will be ignored if prefixed with a backslash Ange kommandot här. Det kan vara ett godtyckligt program eller script som är tillgängligt på ditt system. När kommandot körs så kommer alla ord som börjar med % och namnet för ett attributfält att ersättas med värdet för det fältet. Specialtecknen %% kommer att ersättas med värdet för det markerade fältet. Dubbla citationstecken grupperar text till en enda parameter till programmet eller scriptet. Dubbla citationstecken ignoreras om de föregås av en backslash - + Enter the action here. This can be any program, script or command that is available on your system. When the action is invoked any set of characters within [% and %] will be evaluated as expression and replaced by its result. Double quote marks group text into single arguments to the program, script or command. Double quotes will be ignored if prefixed with a backslash Ange kommandot här. Det kan vara ett godtyckligt program eller script som är tillgängligt på ditt system. När kommandot körs så kommer alla tecken mellan [% och %] tolkas som ett uttryck och ersättas med dess resultat Dubbla citationstecken grupperar text till en enda parameter till programmet eller scriptet. Dubbla citationstecken ignoreras om de föregås av en backslash - + Browse for action Bläddra efter kommandon - + Click to browse for an action Klicka för att bläddra efter kommandon - + Clicking the button will let you select an application to use as the action Klicka på knappen för att välja applikation som kommandot skall köra - + ... ... - + Inserts an expression into the action Sätter in ett uttryck i kommandot - + Insert expression... Sätt in uttryck... - + Inserts the selected field into the action Sätter in valt fält i kommandot - + Add to action list Lägg till kommandolista - + Update selected action Uppdatera det markerade kommandot - + Generic Generisk - + Python Python - + Windows Windows - + Mac Mac - + Unix Unix - + Capture Skapa @@ -12883,7 +13065,7 @@ Användaredatabas-sökväg: %8 < - < + < @@ -12998,7 +13180,7 @@ Användaredatabas-sökväg: %8 QgsAttributeTableDelegate - + Attribute changed Attribut ändrades @@ -13039,12 +13221,12 @@ Användaredatabas-sökväg: %8 - + Parsing error Tolkningsfel - + Evaluation error Beräkningsfel @@ -13064,50 +13246,50 @@ Användaredatabas-sökväg: %8 Attribute table - %1 :: Features total: %2, filtered: %3, selected: %4 - + Attributtabell - %1 :: Totalt antal objekt: %2, filtrerade: %3, valda: %4 - + Expression based filter - + Uttrycksbaserat filter - + Attribute added La till attribut - + Attribute Error Attributfel - + The attribute could not be added to the layer Attributet kunde inte läggas till lagret - + Deleted attribute Tog bort attribut - + The attribute(s) could not be deleted Attributet/-en kunde inte tas bort - + Attribute error - + Attributfel - + Error filtering - + Fel vid filtrering - + Geometryless feature added Objekt utan geometri lades till @@ -13226,7 +13408,7 @@ Användaredatabas-sökväg: %8 Select features using an expression - + Välj objekt med ett uttryck @@ -13241,78 +13423,90 @@ Användaredatabas-sökväg: %8 The filter defines, which features are currently shown in the list or on the table - + Filtret definerar vilka objekt som för tillfället visas i listan eller i tabellen Filter - Filter + Filter Filters the visible features according to the current filter selection and filter string. - + Filtrera de synliga objekten enligt nuvarande filterurval och filtersträng. Apply - + Applicera Attribute View - + Attributvy Table View - + Tabellvy Advanced Filter (Expression) - + Avancerat filter (Uttryck) Use the Expression Builder to define the filter - + Använd uttrycksbyggaren för att definera filtret Ctrl+F - Ctrl+F + Ctrl+F - Show All + Show All Features - Show Selected + Show Selected Features + + + + + Show Edited and New Features + + Show All + Visa alla + + + Show Selected + Visa endast valda + Show Features Visible On Map - + Visa endast objekt synliga i kartfönstret Column Filter - + Kolumnfilter - Filter Edited - + Filtrera redigerade Filter all the features which have been edited but not yet saved - + Filtrera alla objekt som har blivit redigerade men ännu ej sparade @@ -13451,9 +13645,9 @@ Användaredatabas-sökväg: %8 Kör kommando - + Select All - Välj alla + Välj alla @@ -13461,7 +13655,7 @@ Användaredatabas-sökväg: %8 Edit filter expression - + Redigera filteruttryck @@ -13584,17 +13778,17 @@ felet var: %2 Photo - + Foto Webview - + Webvy Color - Färg + Färg @@ -13629,7 +13823,7 @@ felet var: %2 Date format - + Datumformat @@ -13654,37 +13848,37 @@ felet var: %2 Filter expression - + Filteruttryck ... - ... + ... Height - Höjd + Höjd Width - Bredd + Bredd Field contains a filename for a picture - + Fältet innehåller ett filnamn för en bild Fields contains an URL - + Fältet innehåller en URL Field contains a color - + Fältet innehåller en färg @@ -14130,12 +14324,12 @@ Databas: %2 Dialog - Dialog + Dialog Path - Sökväg + Sökväg @@ -14185,22 +14379,22 @@ Databas: %2 Filter Pattern Syntax - + Filtrera filnamnssyntax Wildcard(s) - + Jokertecken Regular Expression - + Reguljärt uttryck Fast scan this dir. - + Snabbskanna denna katalog. @@ -14210,7 +14404,7 @@ Databas: %2 Add directory to favourites - Lägg till kaltalog till favoriter + Lägg till katalog till favoriter @@ -14225,7 +14419,7 @@ Databas: %2 Directory Properties - + Kataloginställningar @@ -14233,49 +14427,49 @@ Databas: %2 Browser - Bläddrare + Bläddrare Refresh - Uppdatera + Uppdatera Add Selected Layers - Lägg till valda lager + Lägg till valda lager Add - Lägg till + Lägg till Filter Files - + Filtrera filer ... - ... + ... Collapse All - Slå ihop alla + Kollapsa alla Options - Inställningar + Inställningar Filter files - + Filtrera filer @@ -14311,7 +14505,7 @@ Databas: %2 Project home - + Projekthem @@ -14407,7 +14601,7 @@ Databas: %2 QGIS - QGIS + QGIS @@ -14415,17 +14609,17 @@ Databas: %2 Symbol - Symbol + Symbol Value - Värde + Värde Label - Etikett + Etikett @@ -14446,7 +14640,7 @@ Databas: %2 High number of classes! - + Stort antal klasser! @@ -14498,7 +14692,7 @@ Skall existerande klasser tas bort före klassificering? Change... - Ändra... + Ändra... @@ -14557,14 +14751,14 @@ Skall existerande klasser tas bort före klassificering? QgsCollapsibleGroupBoxBasic - + Ctrl(or Alt)-click to toggle all - + Ctrl(eller Alt)-klick för att toggla alla - + Shift-click to expand, then collapse others - + Shift-klick för att expandera, samt kollapsa resten @@ -14572,7 +14766,7 @@ Skall existerande klasser tas bort före klassificering? Select Color - + Välj färg @@ -14580,7 +14774,7 @@ Skall existerande klasser tas bort före klassificering? Select Color - + Välj färg @@ -14684,12 +14878,12 @@ Skall existerande klasser tas bort före klassificering? Window - Fönster + Fönster Help - Hjälp + Hjälp @@ -14780,12 +14974,12 @@ Skall existerande klasser tas bort före klassificering? Close - Stäng + Stäng Print Composers - Utskriftskomponerare + Utskriftskomponerare @@ -14830,22 +15024,22 @@ Skall existerande klasser tas bort före klassificering? copy - + kopiera Duplicating composer... - + Duplicerar komponerare... Duplicate Composer - + Duplicera komponerare Composer duplication failed. - + Duplication av komponeraren misslyckades. @@ -14866,17 +15060,17 @@ Skall existerande klasser tas bort före klassificering? Composer error - + Fel i komponerare Error, could not create new composer - + Fel, kunde inte skapa komponerare Loading template into composer... - + Laddar in mall till komponerare... @@ -14968,7 +15162,7 @@ Skall existerande klasser tas bort före klassificering? Select arrow color - + Välj pilens färg @@ -15044,43 +15238,43 @@ Skall existerande klasser tas bort före klassificering? Main properties - + Allmänna inställningar Line width - Linjebredd + Linjebredd mm - mm + mm Arrow head width - + Pilhuvudets bredd Color... - Färg... + Färg... Default - Standard + Standard None - Ingen + Ingen SVG - + SVG @@ -15193,42 +15387,42 @@ Skall existerande klasser tas bort före klassificering? Composer - Komponerare + Komponerare Paper Navigation - + Komponeringsnavigering Composer Item Actions - + Komponerarelementsfunktioner Composer Items - + Komponerarelement Ctrl+P - Ctrl+P + Ctrl+P Zoom full - + Zooma hela Zoom in - Zooma in + Zooma in Zoom out - Zooma ut + Zooma ut @@ -15253,7 +15447,7 @@ Skall existerande klasser tas bort före klassificering? Export as image - + Exportera som bild @@ -15278,7 +15472,7 @@ Skall existerande klasser tas bort före klassificering? Add image - + Lägg till bild @@ -15353,112 +15547,112 @@ Skall existerande klasser tas bort före klassificering? Load from Template - + Läs in mall Load from template - + Läs in mall Save as Template - + Spara som mall Align Left - + Justera vänster Align Center - + Justera mitten Align Right - + Justera höger Align Top - + Justera upp Align Bottom - + Justera ned Add ellipse - + Lägg till ellips Add HTML - + Lägg till HTML Composer Manager - + Komponeringshanterare Composer manager - Komponeringshanterare + Komponeringshanterare &New Composer - + &Ny komponerare New composer - + Ny komponerare Ctrl+N - Ctrl+N + Ctrl+N &Save Project - &Spara projekt + &Spara projekt Save project - + Spara projekt Ctrl+S - Ctrl+S + Ctrl+S &Duplicate Composer - + &Duplicera komponerare Duplicate composer - + Duplicera komponerare New from Template - + Ny från mall New from template - + Ny från mall Load From template @@ -15467,7 +15661,7 @@ Skall existerande klasser tas bort före klassificering? Save as template - Spara mall + Spara som mall Align left @@ -15508,7 +15702,7 @@ Skall existerande klasser tas bort före klassificering? Align Center Vertical - + Justera mitten vertikalt @@ -15542,27 +15736,27 @@ Skall existerande klasser tas bort före klassificering? Add Arrow - + Lägg till pil Add Table - + Lägg till tabell Add attribute table - + Lägg till attributtabell Page setup - + Sidinställning Ctrl+Shift+P - Ctrl+Shift+P + Ctrl+Shift+P @@ -15572,7 +15766,7 @@ Skall existerande klasser tas bort före klassificering? Add rectangle - + Lägg till rektangel @@ -15582,7 +15776,7 @@ Skall existerande klasser tas bort före klassificering? Add triangle - + Lägg till triangel @@ -15712,17 +15906,17 @@ Skall existerande klasser tas bort före klassificering? HTML Frame - + HTML-ram HTML frame - + HTML-ram Main properties - + Allmänna inställningar @@ -15733,7 +15927,7 @@ Skall existerande klasser tas bort före klassificering? QgsComposerItem - + Change item position Ändra elementets position @@ -15741,12 +15935,12 @@ Skall existerande klasser tas bort före klassificering? QgsComposerItemWidget - + Frame color changed Ramfärg ändrad - + Background color changed Bakgrundsfärg ändrad @@ -15755,37 +15949,37 @@ Skall existerande klasser tas bort före klassificering? Elementets ogenomskinlighet ändrad - + Item outline width Elementets kant ändrad - + Item frame toggled Elementets ram togglad - + Item position changed Elementets position ändrad - + Item background toggled - + Elementets bakgrund togglad - + Select background color - Välj bakgrundsfärg + Välj bakgrundsfärg - + Select frame color - Välj ramfärg + Välj ramfärg - + Item id changed Elementets ID ändrad @@ -15823,53 +16017,53 @@ Skall existerande klasser tas bort före klassificering? Global Options - + Globala alternativ Position and size - + Position och storlek Reference point - + Referenspunkt X - X + X Y - Y + Y Width - Bredd + Bredd Height - Höjd + Höjd Frame - + Ram Thickness - + Bredd Color... - Färg... + Färg... @@ -15884,27 +16078,27 @@ Skall existerande klasser tas bort före klassificering? Uuid (read-only) - + Uuid (skrivskyddad) Id - ID + ID Rendering - Rendering + Rendering - + Blending mode - + Transparency - Genomskinlighet + Genomskinlighet Position... @@ -15920,7 +16114,7 @@ Skall existerande klasser tas bort före klassificering? Label text HTML state changed - + Etikettext HTML status ändrad @@ -15979,42 +16173,42 @@ Skall existerande klasser tas bort före klassificering? Main properties - + Allmänna inställningar Render as HTML - + Rendera som HTML Alignment - Justering + Justering Vertical - Vertikal + Vertikal Horizontal - Horisontell + Horisontell Display - Visa + Visning Margin - Marginal + Marginal mm - mm + mm @@ -16024,7 +16218,7 @@ Skall existerande klasser tas bort före klassificering? ° - + ° @@ -16126,12 +16320,12 @@ Skall existerande klasser tas bort före klassificering? Item - Sak + Sak Title style - + Titelstil @@ -16146,17 +16340,17 @@ Skall existerande klasser tas bort före klassificering? Legend column count - + Innehållsförteckning kolumnantal Legend split layers - + Innehållsförteckning dela lager Legend equal column width - + Innehållsförteckning samma kolumnbredd @@ -16211,7 +16405,7 @@ Skall existerande klasser tas bort före klassificering? Legend font color changed - + Innehållsförteckning typsnittsfärg ändrad @@ -16270,12 +16464,12 @@ Skall existerande klasser tas bort före klassificering? Show feature count for each class of vector layer. - + Visa objektantal för varje klass i vektorlager. Fonts - + Typsnitt @@ -16285,7 +16479,7 @@ Skall existerande klasser tas bort före klassificering? Subgroup Font... - + Undergrupptypsnitt... @@ -16295,102 +16489,102 @@ Skall existerande klasser tas bort före klassificering? Font color... - Typsnittsfärg... + Typsnittsfärg... Columns - Kolumner + Kolumner Count - + Antal Equal column widths - + Samma kolumnbredd Allow to split layer items into multiple columns. - + Tillåt lager att delas på flera kolumner. Split layers - + Dela lager Symbol - Symbol + Symbol Symbol width - Symbolbredd + Symbolbredd Symbol height - Symbolhöjd + Symbolhöjd Spacing - + Seperation Space above text using group style. - + Avstånd ovanför text som använder gruppstil. Group Space - + Gruppseparation Space above text using subgroup style. - + Avstånd ovanför text som använder undergruppstil. Subgroup space - + Undergruppseparation Space above symbol and symbol label. - + Avstånd ovanför symbol och symboltext. Symbol space - + Symbolseparation Space between symbol icon and symbol label (symbol label left margin). - + Avstånd mellan symbolikon och symboltext (vänster marginal på symboltext). Icon label space - + Ikonetikettseparation Box space - + Lådseparation Column space - + Kolumnseparation Layer Font... @@ -16477,17 +16671,17 @@ Skall existerande klasser tas bort före klassificering? Legend Options - + Inställningar teckenförklaring Legend - Teckenförklaring + Teckenförklaring Main properties - + Allmänna inställningar @@ -16510,7 +16704,7 @@ Skall existerande klasser tas bort före klassificering? &Duplicate - + &Duplikera @@ -16530,69 +16724,69 @@ Skall existerande klasser tas bort före klassificering? Specific - + Specifik Template error - + Fel i mall Error, template file not found - + Fel, mall hittades inte Error, could not read file - Kunde inte läsa filen + Fel, kunde inte läsa filen Composer error - + Fel i komponerare Error, could not create composer - + Fel, kunde inte skapa komponerare Loading template into composer... - + Laddar in mall till komponerare... Error, could not load template file - + Fel, kunde inte ladda mall Choose template - + Välj mall Composer templates - Komponeringsmall + Komponeringsmallar File system error - + Filsystemfel Error, could not open or create local directory - + Fel, kunde inte öppna eller skapa lokal katalog Remove composer - Ta bort komponerare + Radera komponerare @@ -16602,22 +16796,22 @@ Skall existerande klasser tas bort före klassificering? copy - + kopiera Duplicating composer... - + Duplicerar komponerare... Duplicate Composer - + Duplicera komponerare Composer duplication failed. - + Duplikation av komponerare misslyckades. Change title @@ -16638,7 +16832,7 @@ Skall existerande klasser tas bort före klassificering? New from template - + Ny från mall @@ -16648,22 +16842,22 @@ Skall existerande klasser tas bort före klassificering? ... - ... + ... Open template directory - + Öppna mapp med mallar user - + Användare default - Standard + Standard @@ -16675,7 +16869,7 @@ Skall existerande klasser tas bort före klassificering? Karta %1 - + Map will be printed here Kartan skrivs ut här @@ -17097,7 +17291,7 @@ Skall existerande klasser tas bort före klassificering? Main properties - + Allmänna inställningar @@ -17278,7 +17472,7 @@ Skall existerande klasser tas bort före klassificering? Main properties - + Allmänna inställningar @@ -17303,7 +17497,7 @@ Skall existerande klasser tas bort före klassificering? ° - + ° @@ -17676,7 +17870,7 @@ Skall existerande klasser tas bort före klassificering? Main properties - + Allmänna inställningar @@ -17774,7 +17968,7 @@ Skall existerande klasser tas bort före klassificering? Main properties - + Allmänna inställningar @@ -17784,7 +17978,7 @@ Skall existerande klasser tas bort före klassificering? ° - + ° Shape outline color... @@ -17929,7 +18123,7 @@ Skall existerande klasser tas bort före klassificering? Main properties - + Allmänna inställningar @@ -17959,7 +18153,7 @@ Skall existerande klasser tas bort före klassificering? Fonts - + Typsnitt Grid stroke width @@ -18500,7 +18694,7 @@ Skall existerande klasser tas bort före klassificering? Spacing - + Seperation @@ -18907,12 +19101,12 @@ Fel: %5 QgsCptCityBrowserModel - + Name Namn - + Info Info @@ -18920,27 +19114,27 @@ Fel: %5 QgsCptCityColorRampItem - + colors färger - + continuous kontinuerlig - + continuous (multi) kontinuerlig (multipel - + discrete diskret - + variants varianter @@ -18948,17 +19142,17 @@ Fel: %5 QgsCptCityColorRampV2Dialog - + %1 directory details %1 katalogdetaljer - + %1 gradient details %1 gradientdetaljer - + Error - cpt-city gradient files not found. You have two means of installing them: @@ -18966,31 +19160,31 @@ You have two means of installing them: 1) Install the "Color Ramp Manager" python plugin (you must enable Experimental plugins in the plugin manager) and use it to download latest cpt-city package. You can install the entire cpt-city archive or a selection for QGIS. -2) Download the complete archive (in svg format) and unzip it to your QGis settings directory [%1] . +2) Download the complete archive (in svg format) and unzip it to your QGIS settings directory [%1] . This file can be found at [%2] and current file is [%3] - + - + Selections by theme Välj efter tema - + All by author Alla av författare - + You can download a more complete set of cpt-city gradients by installing the "Color Ramp Manager" plugin (you must enable Experimental plugins in the plugin manager). - + All Ramps (%1) @@ -19021,7 +19215,7 @@ and current file is [%3] Sökväg - + Save as standard gradient @@ -19617,7 +19811,7 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Lucida Grande'; font-size:13pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Verdana'; font-size:10pt;">© QGIS 2013</span></p></body></html> - + @@ -19662,7 +19856,7 @@ p, li { white-space: pre-wrap; } Color - Färg + Färg &Color @@ -20310,46 +20504,186 @@ p, li { white-space: pre-wrap; } - Error - Fel + Fel - Note: the following lines were not loaded because QGIS was unable to determine values for the x and y coordinates: - OBS: Följande rad(er) laddades inte, eftersom Qgis inte kunde bestämma värde för x och y-koordinaterna: + OBS: Följande rad(er) laddades inte, eftersom Qgis inte kunde bestämma värde för x och y-koordinaterna: + + + + Invalid record format at line %1 + + + + + Invalid WKT at line %1 + + + + + Invalid X or Y fields at line %1 + + + + + %1 records discarded due to invalid format + + + + + %1 records discarded due to missing geometry definitions + + + + + %1 records discarded due to invalid geometry definitions + + + + + %1 records discarded due to incompatible geometry types + + + + + + Errors in file %1 + + + + + + The following lines were not loaded into QGIS due to errors: + + + + + + There are %1 additional errors in the file + + + + + Delimited text file errors + QgsDelimitedTextSourceSelect - + No layer name Inget lagernamn - + Please enter a layer name before adding the layer to the map Ange ett lagernamn innan du lägger till lagret i kartan - + + No delimiters set + + + + + Please one or more characters to use as the delimiter, or choose a different delimiter type + + + + + Invalid regular expression + + + + + Please enter a valid regular expression as the delimiter, or choose a different delimiter type + + + + + Invalid delimited text file + + + + + Please enter a valid file and delimiter + + + + Choose a delimited text file to open Välj en separerad textfil att öppna - + Text files Textfiler - + + Please select an input file + + + + + File %1 does not exist + + + + + Please enter a layer name + + + + + At least one delimiter character must be specified + + + + + Regular expression is not valid + + + + + ^.. expression needs capture groups + + + + + Definition of filename and delimiters is not valid + + + + + No data found in file + + + + + X and Y field names must be selected + + + + + X and Y field names cannot be the same + + + + + The WKT field name must be selected + + + Well Known Text files - WKT-filer + WKT-filer - + All files Alla filer @@ -20362,178 +20696,456 @@ p, li { white-space: pre-wrap; } Skapa ett Lager från en Separerad textfil - + + + + Each line in the file is split using a regular expression to define the end of each field + + + + + + + Fields are defined by the specified delimiter, quote, and escape characters + + + + + + + The file a comma separated value file, fields delimited by commas and quoted by " + + + + + CSV (comma separated values) format + + + + + + + Comma character is one of the delimiters + + + + + + + Tab character is one of the delimiters + + + + + + + Space character is one of the delimiters + + + + + + + Colon character is one of the delimiters + + + + + + + Semicolon character is one of the delimiters + + + + + Other delimiters + + + + + + + Delimiters to use when splitting fields in the text file. The delimiter can be more than one character. These characters are used in addition to the comma, tab, space, colon, and semicolon options. + + + + + Quote + + + + + + + The quote character(s) enclose fields which may include delimiters and new lines + + + + + + " + + + + + Escape + + + + + + + The escape character(s) force the next character to be treated as a normal character (that is not a delimiter, quote, or new line character). If the escape character is the same as a quote character, it only escapes itself and only within quotes. + + + + + + + Regular expression used to split each line into fields + + + + + File format + + + + + Geometry definition + + + + + + + Geometry is a point defined by X and Y coordinate fields + + + + + Point coordinates + + + + + + + X and Y coordinates are expressed in degrees/minutes/seconds + + + + + DMS coordinates + + + + + + + Geometry is read as a well known text string from the selected fields + + + + + Well known text (WKT) + + + + + Geometry field + + + + + + + Name of the field containing well known text value + + + + + Geometry type + Geometrityp + + + + Detect + + + + + Point + Punkt + + + + Line + Linje + + + + Polygon + Polygon + + + + + + The file contains only attribute information - it will not be displayed on the map + + + + + No geometry (attribute only table) + + + + File Name Filnamn - + Full path to the delimited text file Hela sökvägen till den separerade textfilen - + Full path to the delimited text file. In order to properly parse the fields in the file, the delimiter must be defined prior to entering the file name. Use the Browse button to the right of this field to choose the input file. Hela sökvägen till den separerade textfilen. För att kunna läsa fälten i filen så måste separeraren anges innan filnamnet. Använd knappen till höger om detta fält för att välja indatafil. - + Layer name Lagernamn - + Name to display in the map legend Namn som kommer att visas i teckenförklaringen - + Name displayed in the map legend Namn som kommer att visas i teckenförklaringen - + + Encoding + Kodning + + + + + + Select the file encoding + + + + + Sample data + + + + + Record options + + + + + Number of header lines to discard + + + + + + + The number of lines to discard from the beginning of the file + + + + + + + Field names are read from the first record. If not selected then fields are numbered + + + + + First record has field names + + + + + Field options + + + + + + + Trim leading and trailing spaces from fields + + + + + Trim fields + + + + + + + Discard empty fields in each record + + + + + Discard empty fields + + + + + + + Number fields use comma for a decimal separator + + + + + Decimal separator is comma + + + + Browse to find the delimited text file to be processed Leta efter den separerade textfilen som ska användas - + Use this button to browse to the location of the delimited text file. This button will not be enabled until a delimiter has been entered in the <i>Delimiter</i> box. Once a file is chosen, the X and Y field drop-down boxes will be populated with the fields from the delimited text file. Använd den har knappen för att leta efter den separerade textfilen. Denna knapp kommer inte att aktiveras förrän en separerare har skrivits in i <i>Separerare</i>-rutan. När en fil har valts så kommer X- och Y-menyerna att fyllas med fält från den separerade textfilen. - + Browse... Bläddra... - + Selected delimiters Valda separerare - - The delimiter is a regular expression - Separeraren är ett reguljäruttryck + Separeraren är ett reguljäruttryck - + Regular expression Reguljäruttryck - - The delimiter is taken as is - Separeraren används rakt av + Separeraren används rakt av - Plain characters - Vanliga tecken + Vanliga tecken - + Tab Tab - + Space Mellanslag - + Comma Komma - + Semicolon Semikolon - + Colon Kolon - Delimiter to use when splitting fields in the text file. The delimiter can be more than one character. - Separerare som ska användas för att dela upp textfilen i fält. Separeraren kan vara ett eller flera tecken. + Separerare som ska användas för att dela upp textfilen i fält. Separeraren kan vara ett eller flera tecken. - Delimiter to use when splitting fields in the delimited text file. The delimiter can be 1 or more characters in length. - Separerare som ska användas för att dela upp textfilen i fält. Separeraren kan vara ett eller flera tecken. + Separerare som ska användas för att dela upp textfilen i fält. Separeraren kan vara ett eller flera tecken. - Start import at row - Läs in från rad + Läs in från rad - The file contains X and Y coordinate columns - Filen innehåller kolumner med X- och Y-koordinater + Filen innehåller kolumner med X- och Y-koordinater - X Y fields - X/Y-fält + X/Y-fält - + <p align="right">X field</p> <p align="right">X-fält</p> - + + + Name of the field containing x values Namn på fältet som innehåller x-värden - Name of the field containing x values. Choose a field from the list. The list is generated by parsing the header row of the delimited text file. - Namn på fältet som innehåller x-värden. Välj ett fält från listan. Listan genereras genom att läsa rubrikraden i den separerade textfilen. + Namn på fältet som innehåller x-värden. Välj ett fält från listan. Listan genereras genom att läsa rubrikraden i den separerade textfilen. - + <p align="right">Y field</p> <p align="right">Y-fält</p> - - + + + Name of the field containing y values Namn på fältet som innehåller y-värden - - Name of the field containing y values. Choose a field from the list. The list is generated by parsing the header row of the delimited text file. - Namn på fältet som innehåller y-värden. Välj ett fält från listan. Listan genereras genom att läsa rubrikraden i den separerade textfilen. + Namn på fältet som innehåller y-värden. Välj ett fält från listan. Listan genereras genom att läsa rubrikraden i den separerade textfilen. - The file contains a well known text geometry field - Filen innehåller ett fält med WKT-geometri + Filen innehåller ett fält med WKT-geometri - WKT field - WKT-fält + WKT-fält - Decimal point - Decimalpunkt + Decimalpunkt - Sample text - Exempeltext + Exempeltext @@ -21144,57 +21756,59 @@ p, li { white-space: pre-wrap; } QgsDualView - + Attributes changed - Attribut ändrades + Attribut ändrades - + Expression based preview - + Uttrycksbaserad förhandsvisning - + Could not set preview column - + Kunde inte välja förhandsvisningskolumn - + Could not set column '%1' as preview column. Parser error: %2 - + Kunde inte sätta kolumn '%1' som förhandsvisningskolumn. +Parserfel: +%2 - + Run action - Kör kommando + Kör kommando - - + + Open form - Öppna formulär + Öppna formulär - + Loading features... - + Läser in objekt... - + Abort - Avbryt + Avbryt - + Attribute table - Attributtabell + Attributtabell - + %1 features loaded. - %1 objekt lästes in. + %1 objekt lästes in. @@ -21202,56 +21816,61 @@ Parser error: ... - ... + ... Expression - Uttryck + Uttryck Column Preview - + Förhandsvisningskolumn QgsEllipseSymbolLayerV2Widget - + Symbol width Symbolbredd - + Symbol height Symbolhöjd - + Rotation Rotation - + Outline width - + Fill color Fyllnadsfärg - + Border color Kantfärg - + Symbol name + + + Offset + Offset + QgsEmbedLayerDialog @@ -21297,7 +21916,7 @@ Parser error: Cancel &All - Abryt &alla + Avbryt &alla @@ -21358,22 +21977,27 @@ Parser error: Polygon - + Show all labels and features for all layers Visa alla etiketter och objekt för lagret - + Show candidates (for debugging) Visa kandidater (för felsökning) - + + Show shadow rectangles (for debugging) + + + + Save settings with project - + (i.e. including colliding objects) (dvs inklusive kolliderande objekt) @@ -21391,7 +22015,7 @@ Parser error: Error - Fel + Fel @@ -21399,7 +22023,7 @@ Parser error: Dialog - Dialog + Dialog @@ -21408,7 +22032,7 @@ Parser error: p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Summary</p></body></html> - + @@ -21417,17 +22041,17 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Detailed report.</p></body></html> - + Always show details - + Visa alltid detaljer Details >> - + Detaljer >> @@ -21666,37 +22290,37 @@ p, li { white-space: pre-wrap; } Select By Expression - + Välj med uttryck Close - Stäng + Stäng ... - ... + ... Select - Välj + Välj Add to selection - + Lägg till i urval Remove from selection - + Ta bort från urval Select within selection - + Välj inom urval @@ -21852,180 +22476,180 @@ Uttrycket är ogiltigt, se (mer information) för detaljer Label - Etikett + Etikett - + Id - ID + ID - + Name - Namn + Namn - + Type - Typ + Typ - + Length - Längd + Längd - + Precision - Precision + Precision - + Comment - Kommentar + Kommentar - + Edit widget - Redigeringssymbol + Redigeringstyp - + Alias - Alias + Alias - - + + Name conflict - Namnkonflikt + Namnkonflikt - - + + The attribute could not be inserted. The name already exists in the table. - Attributet kunde inte föras in. Namnet finns redan i tabellen. + Attributet kunde inte föras in. Namnet finns redan i tabellen. - + Added attribute - La till attribut + La till attribut - - + + Deleted attribute - Tog bort attribut + Tog bort attribut - + Line edit - Linjeredigering + Linjeredigering - + Unique values - Unika värden + Unika värden - + Unique values editable - Unika värden (redigerbara) + Unika värden (redigerbara) - + Classification - Klassificering + Klassificering - + Value map - Värdekarta + Värdekarta - + Edit range - Editera intervall + Editera intervall - + Slider range - Dragväljare intervall + Dragväljare intervall - + Dial range - Snurrans intervall + Snurrintervall - + File name - Filnamn + Filnamn - + Enumeration - Uppräkning + Uppräkning - + Immutable - Oförstörbara + Skrivskyddad - + Hidden - Gömd + Dold - + Checkbox - Kryssruta + Kryssruta - + Text edit - Textredigering + Textredigering - + Calendar - Kalender + Kalender - + Value relation - Värderelation + Värderelation - + UUID generator - UUID-generator + UUID-generator - + Photo - + Foto - + Web view - + Webvy - + Color - Färg + Färg - + Select edit form - Välj redigeringsformulär + Välj redigeringsformulär - + UI file - UI-fil + UI-fil @@ -22033,93 +22657,93 @@ Uttrycket är ogiltigt, se (mer information) för detaljer Field calculator - Fältkalkylator + Fältkalkylator Click to toggle table editing - Klicka för att toggla tabellredigering + Klicka för att toggla tabellredigering Toggle editing mode - Toggla redigeringsläge + Toggla redigeringsläge New column - Ny kolumn + Ny kolumn Ctrl+N - Ctrl+N + Ctrl+N Delete column - Ta bort kolumn + Ta bort kolumn Ctrl+X - Ctrl+X + Ctrl+X ... - ... + ... Edit UI - Redigera UI + Redigera UI + - + + + - - - + - > - > + > ^ - ^ + ^ v - + v Autogenerate - + Automatisk generering Drag and drop designer - + 'Drag och släpp'-designare Provide ui-file - + Använd ui-fil Attribute editor layout: - + Attributredigerarlayout: @@ -22135,12 +22759,23 @@ An example is (in module MyForms.py): Reference in Python Init Function like so: MyForms.open MyForms.py must live on PYTHONPATH, .qgis/python, or inside the project folder. - + QGIS formulär kan ha en python-funktion som kallas när formuläret öppnas. +Använd denna funktion för att skapa extra logik till dina formulär. + +Ett exempel är (i modulen MyForms.py): + + def open(dialog, layer, feature): + geom = feature.geometry() + control = dialog.findChild(QWidget,"MyLineEdit") + +Referera så här till python-initieringsfunktionen: MyForms.open + +MyForms.py måste finnas med i PYTHONPATH, qgis/python eller i projektets mapp. Python Init function - + Python-initieringsfunktion @@ -23411,9 +24046,8 @@ Please reselect a valid file. Band %1 - Dimensions: - Dimensioner: + Dimensioner: @@ -23421,27 +24055,40 @@ Please reselect a valid file. X: %1 Y: %2 Band: %3 - Origin: - Origo: + Origo: - Pixel Size: - Pixelstorlek: + Pixelstorlek: - - Format not supported + + Dimensions + Dimensioner + + + + Origin + + + + + Pixel Size - + + Format not supported + Formatet stödjs inte + + + Cannot read data - + Cannot get GDAL raster band: %1 @@ -24832,7 +25479,7 @@ p, li { white-space: pre-wrap; } Information - Information + Information @@ -27001,12 +27648,12 @@ p, li { white-space: pre-wrap; } Grupper stöds ännu inte - + Format not supported - + Formatet stödjs inte - + Cannot read data @@ -27605,7 +28252,7 @@ at line %2 column %3 about:blank - about:blank + about:blank @@ -27749,12 +28396,12 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Identify Results - Identifiera Resultat + Identifieringsresultat Expand tree. - + Expandera träd. @@ -27763,27 +28410,27 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. ... - ... + ... Collapse tree. - + Kollapsa träd. New results will be expanded by default. - + Nya resultat ska vara expanderade som standard. Copy selected feature to clipboard. - + Kopiera valda objekt till klippbordet. Print selected HTML response. - + Skriv ut valda HTML svar. @@ -27791,132 +28438,140 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Identify Results - Identifiera Resultat + Identifieringsresultat Feature - Objekt + Objekt Value - Värde + Värde (Derived) - (Härledd) + (Härledd) (Actions) - + (Kommandon) Edit feature form - + Redigera objektformulär View feature form - + Visa objektformulär Format - Format + Format Zoom to feature - Zooma till objekt + Zooma till objekt Copy feature - + Kopiera objekt Copy attribute value - Kopiera attributvärde + Kopiera attributvärde Copy feature attributes - Kopiera attribut + Kopiera attribut Copy GetFeatureInfo request URL - + Kopiera url till GetFeatureInfo-förfrågan Clear results - + Rensa resultat Clear highlights - + Rensa markerade Highlight all - + Markera alla Highlight layer - + Markera lager Layer properties... - + Lageregenskaper... Expand all - + Expandera alla Collapse all - + Kollapsa alla Attribute changes - + Attribut ändras Could not open url - + Kunde inte öppna url Could not open URL '%1' - + Kunde inte öppna URL '%1' Cannot not print - + Kan inte skriva ut Cannot print this item - + Kan inte skriva ut det här objektet + + + + QgsIdentifyResultsWebView + + + Print + Skriv ut @@ -27924,7 +28579,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Loading... - + Laddar... @@ -28482,22 +29137,22 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Label font - + Typsnitt etikett Font color - + Typsnittsfärg Expression result - + Uttrycksresultat Buffer color - + Bufferfärg @@ -28611,7 +29266,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.Exempel @ %1 pkter (satt i kartenheter) - + (not found!) (ej funnen!) @@ -28628,54 +29283,54 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.Exempel (BUFFER VISAS INTE, är satt i kartenheter) - + Text/Buffer sample - + Text/buffer exempel - + @ %1 pts (using map units) - + @ %1 pkter (satt i kartenheter) - + @ %1 pts (using map units, BUFFER IN MILLIMETERS) - + @ %1 pkter (satt i kartenheter, BUFFER ÄR SATT I MILLIMETER ) - + (BUFFER NOT SHOWN, in map units) - + (BUFFER VISAS INTE, är satt i kartenheter) - + Expression based label Uttrycksbaserad textsättning - + Mixed Case Blandat versaler/gemener - + All Uppercase Allt till versaler - + All Lowercase Allt till gemener - + Title Case Versal som första bokstav - + Select SVG symbol - + Välj SVG-symbol @@ -28683,7 +29338,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Layer labeling settings - Lagrets etikettinställningar + Lagrets etikettinställningar @@ -28723,7 +29378,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Alignment - Justering + Justering @@ -28791,40 +29446,43 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. - - - - - - - + + + + + + + map units - kartenheter + kartenheter Color area inside of pen stroke - + Färglägg ytan på insidan av linjen - - + + + Transparency - Genomskinlighet + Genomskinlighet - + + + % % Sample text - Exempeltext + Exempeltext @@ -28832,25 +29490,25 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.Återställ exempeltext - + Multi-line align - + Word spacing Ordavstånd - + Letter spacing Teckenavstånd - + Line height Radavstånd @@ -28861,20 +29519,20 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. - + Left - Vänster + Vänster Center - Mitten + Mitten - + Right - Höger + Höger @@ -28884,7 +29542,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. S - S + S @@ -28894,25 +29552,25 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Style - Stil + Stil - + Advanced - Avancerad + Avancerat - + Options - Inställningar + Inställningar - + Label every part of multi-part features Textsätt varje del av en flerdelad geometri - + Merge connected lines to avoid duplicate labels Slå ihop linjer med kontakt för att undvika duplicering av texter @@ -28921,63 +29579,63 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.Lägg till symbol i texten som visar linjens riktning - + Features don't act as obstacles for labels Geometriobjekt räknas inte som hinder för texten - + Placement - Placering + Placering - - - + + + Label distance - + Capitalization Versalisering - + Add label columns to attribute table Lägg till textkolumner i attributtabellen - + About data defined values Om datadefinerad textsättning - - - - - - - + + + + + + + mm - mm + mm - - - - + + + + Rotation - Rotation + Rotation - - + + degrees - grader + grader Orientation @@ -28991,12 +29649,12 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Font - Typsnitt + Typsnitt TextLabel - TextEtikett + Textetikett @@ -29005,33 +29663,34 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. ... - ... + ... - - + + Color - Färg + Färg - + + Buffer - Buffert + Buffer - + Size - Storlek + Storlek - + mm - mm + mm Sample @@ -29048,25 +29707,25 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.Typsnittsstorlek - - + + In map units - + Priority Prioritet - + Low - Låg + Låg - + High - Hög + Hög @@ -29086,214 +29745,213 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.Maximum - + Suppress labeling of features smaller than Visa inte texter på objekt mindre än - - + + In mm I mm - + Line orientation dependent position Position baserat på linjens riktning - + Data defined settings - Datadefinierade inställningar + Datadefinierade inställningar - + Buffer transparency Genomskinlighet på buffer - + Uncheck to write labeling engine derived rotation on pin and NULL on unpin - + Preserve existing rotation values during label pin/unpin operations Bevara nuvarande rotationsvärden när text sätts fast / tas loss - + Display properties Inställningar för synlighet - + Minimum scale Minimumskala - + Show label - + Maximum scale Maximumskala - + Font properties Inställningar för tecken - + Bold Fet - + Italic Kursiv - + Underline Understruken - + Font family - Typsnittsfamilj + Typsnittsfamilj - + Position - Position + Position - + Automated placement settings - Automatiserad placering + Automatiserad placering Show all labels for this layer (i.e. including colliding labels) Visa all text för detta lager (exempelvis så inkluderas kolliderande text) - + Around point Runt punkten - + Offset from point Exakt position från punkten - + Parallel Parallelt - + Curved Böjt - + Horizontal - Horisontell + Horisontell - + Offset from centroid Exakt position från centroiden - + Around centroid Runt centroiden - + Horizontal (slow) Horisontellt (långsam) - + Free (slow) Fritt (långsamt) - + Using perimeter Längs kantlinje - + Centroid of Centroiden på - + visible polygon synlig polygon - + whole polygon hel polygon - + Above line - Ovanför linje + Ovanför linje - + On line - På linje + På linje - + Below line Under linje - - + X X Text/Buffer sample - + Text/buffer exempel - + Pen join style - + Linjeihopslagningstyp - - + + Blending mode Line direction symbols - + Riktningssymboler Symbol(s) - + Symbol(er) @@ -29302,314 +29960,352 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. < - < + < Label - + Etikett > - > + > left/right - + vänster/höger above - + ovanför below - + nedanför Reverse direction - + Motsatt riktning Pixel size-based visibility - + Pixelbaserad synlighet Labels will not show if larger than this on screen - + Etiketter kommer inte visas om de är större än detta på skärmen px - + px Labels will not show if smaller than this on screen - + Etiketter kommer inte visas om de är mindre än detta på skärmen Label in Map Units - + Etikett i kartenheter Drop shadow - + Skugga - + Offset - Offset + Offset - - + Y Y - Radius blur (rasterizes shadow) - + Radie på blurrning (rastrerar skuggan) - % - % + % - + Scale - Skala + Skala - + + Background - Bakgrund + Bakgrund - - Select SVG symbol + + Draw under + + + + + Lowest label component + + + + + Text + Text + + + + ˚ + + + + + @ + @ + + + + Global - + + Blur radius + + + + + Blur only alpha pixels + + + + + Select SVG symbol + Välj SVG-symbol + + + Fill - Ytsymbol + Ytsymbol - + Size X,Y - + Storlek X,Y - + Load symbol parameters - + Ladda symbolegenskaper - + % of length - + % av längd - - + + Fixed - + Fixerad - + Offset X,Y - Offset X,Y + Offset X,Y - + Rectangle - Rektangel + Rektangel - + Square - + Kvadrat - + Ellipse - Ellips + Ellips - + Circle - + Cirkel - + SVG - + SVG - + Shape - Form + Form - + Sync with label - + Synkronisera med etikett - + Offset of label - + Offset från etikett - + Radius X,Y - + Radie X,Y - + Border width - Kantbredd + Kantbredd - + symbol units - + symbolenheter - + Border - + Kant - + outside - + inside - + Maximum angle between curved characters - + Maxvinkel mellan vridna bokstäver - + Above Right Ovanför Höger - + Above Left Ovanför Vänster - + Over Över - + Above Ovanför - + Below Left Nedanför Vänster - + Below Nedanför - + Below Right Nedanför Höger - + Show all labels for this layer (including colliding labels) - + Visa alla etiketter (dvs även kolliderande etiketter) - + Show upside-down labels - + never - aldrig + aldrig - + when rotation defined - + always - alltid + alltid - + Limit number of features to be labeled to - + Number of features sent to labeling engine, though not all may be labeled - + Use label background size in collision calculations - + X Coordinate - X-koordinat + X-koordinat - + Y Coordinate - Y-koordinat + Y-koordinat - + Horizontal alignment - + Vertical alignment - + Always show - + Visa alltid - + Strikeout @@ -29619,17 +30315,17 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.Textsätt lagret från - + Buffer properties Inställningar för buffer - + Buffer size - Buffertstorlek + Buffertstorlek - + Buffer color @@ -29646,20 +30342,20 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern.QgsLegend - + sub-group undergrupp - + group grupp &Properties - &Egenskaper + &Egenskaper @@ -29689,12 +30385,12 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Copy Style - Kopiera utseende + Kopiera stil Paste Style - Klistra in utseende + Klistra in stil @@ -29760,7 +30456,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. &Remove - &Radera + &Ta bort &Open attribute table @@ -29793,7 +30489,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. &Duplicate - + &Duplicera @@ -29814,7 +30510,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. Save As... - Spara som... + Spara som... @@ -29824,7 +30520,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. &Filter... - + &Filter... @@ -29983,16 +30679,16 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. - - - - - - - - - - + + + + + + + + + + Loading connections @@ -30019,7 +30715,7 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. - + The file is not an WFS connections exchange file. @@ -30030,33 +30726,33 @@ Detta kan vara ett problem med din nätverksanslutning eller WMS-servern. - + The file is not an PostGIS connections exchange file. - + The file is not an MSSQL connections exchange file. - + The file is not an Oracle connections exchange file. - + The file is not an %1 connections exchange file. - - - - - + + + + + Connection with name '%1' already exists. Overwrite? @@ -30257,14 +30953,14 @@ Y: QgsMapRenderer - - + + Transform error caught: %1 Koordinattransformeringsfel fångades: %1 - - + + CRS Referenskoordinatsystem @@ -30448,12 +31144,12 @@ Y: Coordinate transform error - Koordinattransformeringsfel + Koordinattransformeringsfel Cannot transform the point to the layers coordinate system - Kan inte transformera punkten till lagrets koordinatsystem + Kan inte transformera punkten till lagrets koordinatsystem @@ -30577,7 +31273,7 @@ Y: Changed properties for label - + Ändrade egenskaper för etikett @@ -30625,22 +31321,22 @@ Y: No active vector layer - + Inget aktivt vektorlager Choose a vector layer in the legend - + Välj ett vektorlager i lagerhanteraren Layer not editable - Lagret kan inte redigeras + Lagret kan inte redigeras Use 'Toggle Editing' to make it editable - + Använd 'Toggla redigering' för att göra det redigeringsbart @@ -30732,27 +31428,27 @@ Y: Perimeter - + Omkrets no data - + ingen data Error - Fel + Fel feature id - objekt-id + objekt-id No active layer. To identify features, you must choose an active layer. - + Inget aktivt lager. För att identifiera objekt så måste du välja ett aktivt lager. @@ -30769,7 +31465,7 @@ Y: No features at this position found. - + Inga objekt hittades på denna position. @@ -30793,7 +31489,7 @@ Y: Moved label - + Flyttad etikett @@ -30826,22 +31522,22 @@ Y: Offset curve - + Offsetkurva Offset: - + Offset: Geometry error - + Geometrifel Creating offset geometry failed - + Skapandet av offset-geometri misslyckades @@ -30857,12 +31553,12 @@ Y: Pinned label - + Fäste etikett Unpinned label - + Lösgjorde etikett @@ -30882,12 +31578,12 @@ Y: Coordinate transform error - Koordinattransformeringsfel + Koordinattransformeringsfel Cannot transform the point to the layers coordinate system - Kan inte transformera punkten till lagrets koordinatsystem + Kan inte transformera punkten till lagrets koordinatsystem @@ -30900,7 +31596,7 @@ Y: Features Rotated - + Objekt roterat @@ -30912,7 +31608,7 @@ Y: Rotated label - + Etikett roterad @@ -30975,12 +31671,12 @@ Y: Hid labels - + Gömde etiketter Showed labels - + Visade etiketter @@ -31414,7 +32110,7 @@ http://my.host.com/cgi-bin/mapserv.exe Finally, the value is converted from %1 to %2. - Slutligen konverteras värdet från %2 till %3. {1 ?} {2.?} + Slutligen konverteras värdet från %1 till %2. Finally, the value is converted from %2 to %3. @@ -31469,7 +32165,7 @@ http://my.host.com/cgi-bin/mapserv.exe Whole number (integer) - Heltal (integer) + Heltal (integer) @@ -31509,7 +32205,7 @@ http://my.host.com/cgi-bin/mapserv.exe Feature %1 - + Objekt %1 @@ -31527,7 +32223,7 @@ http://my.host.com/cgi-bin/mapserv.exe Sum - Summa + Summa @@ -31578,22 +32274,22 @@ http://my.host.com/cgi-bin/mapserv.exe Remaining messages - + Återstående meddelanden Close all - + Stäng alla Close - Stäng + Stäng more - + fler @@ -31617,7 +32313,7 @@ http://my.host.com/cgi-bin/mapserv.exe General - Allmänt + Allmänt @@ -31653,7 +32349,7 @@ http://my.host.com/cgi-bin/mapserv.exe Edit... - Redigera... + Redigera... @@ -31719,7 +32415,7 @@ http://my.host.com/cgi-bin/mapserv.exe Test connection - Testa anslutning + Testa anslutning @@ -31738,7 +32434,7 @@ http://my.host.com/cgi-bin/mapserv.exe Connection to %1 was successful - Uppkoplingen till %1 lyckades + Uppkoplingen till %1 lyckades @@ -31751,12 +32447,12 @@ http://my.host.com/cgi-bin/mapserv.exe Connection Information - Anslutningsinformation + Anslutningsinformation Name - Namn + Namn @@ -31766,22 +32462,22 @@ http://my.host.com/cgi-bin/mapserv.exe Host - Dator + Dator Database - Databas + Databas Username - Användarnamn + Användarnamn Password - Lösenord + Lösenord @@ -31806,17 +32502,17 @@ http://my.host.com/cgi-bin/mapserv.exe Save Password - Spara lösenord + Spara lösenord Only look in the geometry_columns metadata table - + Leta bara i tabellen 'geometry_columns' Also list tables with no geometry - + Lista även tabeller utan geometri @@ -31864,7 +32560,7 @@ http://my.host.com/cgi-bin/mapserv.exe Decimal number (double) - Decimaltal (double) + Decimaltal (double) @@ -31902,7 +32598,7 @@ http://my.host.com/cgi-bin/mapserv.exe New Connection... - Ny uppkoppling... + Ny uppkoppling... @@ -32289,32 +32985,32 @@ enhancement - + Ignore GetCoverage URI reported in capabilities - + Ignore axis orientation - + Save connection Spara anslutning - + Should the existing connection %1 be overwritten? Vill du att existerande anslutning '%1' ska skrivas över? - + Saving passwords - + WARNING: You have entered a password. It will be stored in plain text in your project files and in your home directory on Unix-like systems, or in your user profile on Windows. If you do not want this to happen, please press the Cancel button. Note: giving the password is optional. It will be requested interactivly, when needed. @@ -32368,7 +33064,12 @@ Note: giving the password is optional. It will be requested interactivly, when n - + + Smooth pixmap transform + + + + Referer @@ -32775,12 +33476,12 @@ Detaljerad felinformation: ESRI Shapefile - ESRI Shapefil + ESRI Shapefil Save As - Spara som + Spara som @@ -32788,57 +33489,57 @@ Detaljerad felinformation: New Vector Layer - Nytt vektorlager + Nytt vektorlager File format - Filformat + Filformat Type - Typ + Typ Point - Punkt + Punkt Line - Linje + Linje Polygon - Polygon + Polygon New attribute - Nytt attribut + Nytt attribut Name - Namn + Namn Width - Bredd + Bredd Precision - Precision + Precision @@ -32859,12 +33560,12 @@ Detaljerad felinformation: Specify the coordinate reference system of the layer's geometry. - Specificera koordinatsystemet för lagrets geometrier. + Specificera referenskoordinatsystem för lagrets geometrier. Specify CRS - Specificera CRS + Specificera CRS @@ -32874,7 +33575,7 @@ Detaljerad felinformation: Delete selected attribute - Ta bort valda attribut + Ta bort valda attribut @@ -32976,7 +33677,7 @@ Detaljerad felinformation: Layer name - Lagernamn + Lagernamn @@ -32986,7 +33687,7 @@ Detaljerad felinformation: Geometry type - Geometrityp + Geometrityp @@ -32999,7 +33700,7 @@ Detaljerad felinformation: 1 - 1 + 1 @@ -33007,17 +33708,17 @@ Detaljerad felinformation: No query has been specified. - + Ingen fråga har specificerats. There is already a pending request for data. - + Det finns redan en pågående förfrågan om data. Cannot open output file: %1 - + Kan inte öppna utdatafil: %1 @@ -33025,70 +33726,71 @@ Detaljerad felinformation: Download OpenStreetMap data - + Ladda ner OpenStreetMap-data Extent - Utsträckning + Utsträckning From map canvas - Från kartbladet + Från kartbladet From layer - + Från lager Manual - Manuell + Manuell Output file - Utdatafil + Utdatafil ... - ... + ... OpenStreetMap files (*.osm) - + OpenStreetMap-filer (*.osm) Download error - + Fel i nedladdning OpenStreetMap download - + OpenStreetMap-nedladdning Would you like to abort download? - + Vill du avbryta nedladdning? Download failed. %1 - + Nedladdning misslyckades. +%1 Download has been successful. - + Nedladdningen lyckades. @@ -33156,7 +33858,7 @@ Detaljerad felinformation: Count - + Antal @@ -33227,7 +33929,7 @@ Detaljerad felinformation: OpenStreetMap files (*.osm) - + OpenStreetMap-filer (*.osm) @@ -33851,148 +34553,148 @@ Always network: always load from network and do not check if the cache has a val QgsOgrProvider - + Data source is invalid (%1) - - - - + + + + OGR - + Data source is invalid, no layer found (%1) - + Whole number (integer) Heltal (integer) - + Decimal number (real) Decimaltal (real) - + Text (string) Text (string) - + Date Datum - + Date & Time - + OGR[%1] error %2: %3 - + Unknown - + OGR error creating wkb for feature %1: %2 - + type %1 for attribute %2 not found - + OGR error creating feature %1: %2 - + type %1 for field %2 not found - + OGR error creating field %1: %2 - + OGR error deleting field %1: %2 - + Deleting fields is not supported prior to GDAL 1.9.0 - - - + + + OGR error on feature %1: id too large - + Feature %1 for attribute update not found. - + Field %1 of feature %2 doesn't exist. - + Type %1 of attribute %2 of feature %3 unknown. - - + + OGR error setting feature %1: %2 - + OGR error changing geometry: feature %1 not found - + OGR error creating geometry for feature %1: %2 - + OGR error in feature %1: geometry is null - + OGR error setting geometry of feature %1: %2 - + OGR error deleting feature %1: %2 - + Shapefiles without attribute are considered read-only. @@ -34299,7 +35001,7 @@ Always network: always load from network and do not check if the cache has a val No - Nej + Nej @@ -34418,7 +35120,7 @@ Always network: always load from network and do not check if the cache has a val QGIS - QGIS + QGIS @@ -34470,17 +35172,17 @@ Always network: always load from network and do not check if the cache has a val Selection color - Färg för valda + Färg för valda Choose project file to open at launch - + Välj en QGIS-projektfil att öppna vid start QGis files - QGis-filer + QGis-filer @@ -34495,7 +35197,7 @@ Always network: always load from network and do not check if the cache has a val Overwrite - Skriv över + Skriv över @@ -34522,7 +35224,7 @@ Always network: always load from network and do not check if the cache has a val Choose a directory - Välj en katalog + Välj en katalog @@ -34570,33 +35272,33 @@ Always network: always load from network and do not check if the cache has a val Göm splashfönstret vid start - + Map display will be updated (drawn) after this many features have been read from the data source Kartbilden kommer att uppdateras efter att såhär många objekt har lästs från datakällan - - - - - - + + + + + + ... ... - + Make lines appear less jagged at the expense of some drawing performance Får linjer att se mindre hackiga ut, men utritningen går något långsammare - + By default new la&yers added to the map should be displayed N&ya lager som läggs till kartan skall normalt visas - + Measure tool Mätverktyg @@ -34605,33 +35307,33 @@ Always network: always load from network and do not check if the cache has a val Välj globala standardinställningar... - + Fix problems with incorrectly filled polygons Fixa problem med polygoner som fylls på ett felaktigt sätt - - + + % % - + Panning and zooming Flyttning och zoomning - + Zoom Zooma - + Zoom and recenter Zooma och centrera - + Nothing Ingenting @@ -34639,99 +35341,124 @@ Always network: always load from network and do not check if the cache has a val - + General Allmänt - + Locale Lokalisering - + + Add predefined scale + + + + + Remove selected + + + + + Insert default scales + + + + + Import from file + Importera från fil + + + + Export to file + Exportera till fil + + + Curve offset tool - + Miter limit - + Join style Ihopslagningsstil - + Quadrant segments - + GDAL driver options - + GDAL drivers - + Coordinate Reference System (CRS) Koordinaternas referenssystem (CRS) - + CRS for new layers - + When a new layer is created, or when a layer is loaded that has no CRS - + Default CRS for new projects - + Automatically enable 'on the fly' reprojection if layers have different CRS - + Locale to use instead Lokalisering att användas istället - + Additional Info Mer information - + Detected active locale on your system: Hittade aktiv lokalisering för ditt system: - + Rubberband Gummiband - + Line width in pixels Linjebredd i pixlar - + Snapping Fästning @@ -34742,7 +35469,7 @@ Always network: always load from network and do not check if the cache has a val - + Digitizing Digitalisering @@ -34765,12 +35492,12 @@ Always network: always load from network and do not check if the cache has a val Standard kartutseende (projektinställningar har större vikt) - + Selection color Färg för valda - + Background color Bakgrundsfärg @@ -34792,7 +35519,7 @@ Always network: always load from network and do not check if the cache has a val Visa klassificeringsattribut i översikten - + Open identify results in a dock window (QGIS restart required) @@ -34801,7 +35528,7 @@ Always network: always load from network and do not check if the cache has a val Öppna attributtabell i dockat fönster - + Add PostGIS layers with double click and select in extended mode Lägg till PostGIS-lager med dubbelklick och välj i utökad mod @@ -34811,27 +35538,27 @@ Always network: always load from network and do not check if the cache has a val Attributtabellens beteende - + Rendering behavior Renderingsuppträdande - + Number of features to draw before updating the display Antal objekt som ritas innan skärmen ritas om - + <b>Note:</b> Use zero to prevent display updates until all features have been rendered <b>Not</b> Sätt till 0 för att inte uppdatera förrän alla objekt har lästs - + Use render caching where possible to speed up redraws - + Rendering quality Renderingskvalitet @@ -34846,17 +35573,17 @@ Always network: always load from network and do not check if the cache has a val Sökväg(ar) där sökning sker efter 'Scalable Vector Graphic (SVG)'-symboler - + Decimal places Antal decimaler - + Keep base unit Ändra inte mätenhet - + Timeout for network requests (ms) @@ -35020,7 +35747,7 @@ Always network: always load from network and do not check if the cache has a val Specific - + Specifik @@ -35040,7 +35767,7 @@ Always network: always load from network and do not check if the cache has a val Apply - + Applicera @@ -35085,57 +35812,67 @@ Always network: always load from network and do not check if the cache has a val - - Better graphics performance at the cost of loosing the possibility to cancel rendering and incremental feature drawing + + Ignore shapefile encoding declaration + + + + + Disable OGR on-the-fly conversion from declared encoding to UTF-8 + Better graphics performance at the cost of loosing the possibility to cancel rendering and incremental feature drawing + + + + Enable back buffer - + Debugging - + Show these events in the Log Message panel (under Rendering tab) - + Map canvas refresh - + Map canvas & legend - + Default map appearance (overridden by project properties) - + Layer legend - + Double click action in legend - + Open layer properties - + Open attribute table @@ -35150,7 +35887,7 @@ Always network: always load from network and do not check if the cache has a val - + Add new layers to selected or current group Lägg till lager i markerad grupp @@ -35160,9 +35897,8 @@ Always network: always load from network and do not check if the cache has a val - Ignore shapefile encoding - Ignorera textkodning i shapefiler + Ignorera textkodning i shapefiler @@ -35187,42 +35923,42 @@ Always network: always load from network and do not check if the cache has a val - + GDAL GDAL - + In some cases more than one GDAL driver can be used to load the same raster format. Use the list below to specify which to use. - + Name Namn - + ext - + Flags - + Description Beskrivning - + Edit Pyramids Options - + Edit Create Options @@ -35243,7 +35979,7 @@ Always network: always load from network and do not check if the cache has a val - + Rendering Rendering @@ -35252,27 +35988,27 @@ Always network: always load from network and do not check if the cache has a val Använd den nya hanteringen för symbolsättning - + Rasters - + RGB band selection - + Red band Rött band - + Green band Grönt band - + Blue band Blått band @@ -35285,7 +36021,7 @@ Always network: always load from network and do not check if the cache has a val Halva storaxeln - + Default expiration period for WMS-C/WMTS tiles (hours) @@ -35294,102 +36030,102 @@ Always network: always load from network and do not check if the cache has a val Använd standardavvikelse - + Contrast enhancement Kontrastförhöjning - + Single band gray Enkanalig grå - + Multi band color (byte / band) - + Multi band color (> byte / band) - + Limits (minimum/maximum) - + Cumulative pixel count cut limits - + - - - + Standard deviation multiplier - + Capitalise layer names - + Bold layer names - + Display classification attribute names - + Bold group names - + Create raster icons (may be slow) - + Legend item styles - + Overlay position - + Preferred angle units Enhet för vinklar - + Degrees Grader - + Radians Radianer - + Gon Gon - + Zoom to mouse cursor Zooma till pekare @@ -35404,22 +36140,22 @@ Always network: always load from network and do not check if the cache has a val - + Zoom factor Zoom-faktor - + Mouse wheel action Mushjulets kommando - + Predefined scales Fördefinerade skalor - + Placement algorithm @@ -35428,12 +36164,12 @@ Always network: always load from network and do not check if the cache has a val Övriga inställningar - + Reuse last entered attribute values - + Validate geometries Validera geometrier @@ -35442,7 +36178,7 @@ Always network: always load from network and do not check if the cache has a val Standardinställningar för nya projekt - + Automatically enable 'on the fly' reprojection if CRS of a new added layer differ from CRS of layer(s) already present. CRS of present layer(s) will be used. Sätt på transformering av koordinater om ett nyligen tillagt lager har ett annat referenskoordinatsystem än de lager/lagren som redan finns. Referenskoordinatsystemet hos befintligt/a lager kommer att användas. @@ -35451,18 +36187,18 @@ Always network: always load from network and do not check if the cache has a val Aktivera automatiskt 'on-the-fly' transformation om tillagda lager har olika koordinatsystem - + Enable 'on the &fly' reprojection by default &Låt 'on-the-fly' transformation vara aktiverat som standard - - + + Select... - + Always start new projects with this CRS Starta alltid nya projekt med detta referenskoordinatsystem @@ -35477,48 +36213,48 @@ Always network: always load from network and do not check if the cache has a val - + Network - + Exclude URLs (starting with) - + Cache settings Cache-inställningar - + Directory Katalog - + Size Storlek - + Clear Radera - + WMS search address - + Open feature form, if a single feature is identified - + Rubberband color Färg på gummiband @@ -35527,83 +36263,83 @@ Always network: always load from network and do not check if the cache has a val Ellipsoid för avståndsberäkningar - + Preferred measurements units Mätenheter som föredras - + Meters Meter - + Feet Feet - + Identify Identifiera - + <b>Note:</b> Specify the search radius as a percentage of the map width <b>Not</b> Specificiera sökradier i procent av kartbladets bredd - + Search radius for identifying features and displaying map tips Sökradie för identifiering av objekt och för att visa karttips - + Mode Läge - + Feature creation - + Line width Linjebredd - + Default snap mode Standard fästmetod - + Open snapping options in a dock window (QGIS restart required) - + Vertex markers Nod markör - + Show markers only for selected features Visa markör bara för valda objekt - + Marker style Markörstil - + Marker size Markörstorlek - + Map tools Kartverktyg @@ -35626,43 +36362,43 @@ Always network: always load from network and do not check if the cache has a val Övergripande standard CRS som visas nedan används - + Override system locale Forcera systemlokalisering - + <b>Note:</b> Enabling / changing overide on local requires an application restart <b>Not</b> Det krävs omstart av applikationen för att ändra systemets lokalisering. - + Use proxy for web access Används proxy för åtkomst av web - + Host Dator - + Port Port - + User Användare - - + + Leave this blank if no proxy username / password are required Låt det vara tomt om inget proxy användarnamn / lösenord används - + Password Lösenord @@ -35676,42 +36412,42 @@ Always network: always load from network and do not check if the cache has a val Inställningar - + Line color Linjefärg - + Default snapping tolerance Standardsnapptolerans - + Search radius for vertex edits - + Suppress attributes pop-up windows after each created feature Förhindra att attributfönster visas efter varje skapat objekt - + Prompt for &CRS Fråga efter &referenskoordinatsystem - + Use &project CRS Använd projektets referenskoordinatsystem - + Use default CRS displa&yed below Använda &standardreferenskoordinatsystem som visas nedan - + Proxy type Mellanvärdstyp @@ -35719,7 +36455,7 @@ Always network: always load from network and do not check if the cache has a val - + Add Lägg till @@ -35727,7 +36463,7 @@ Always network: always load from network and do not check if the cache has a val - + Remove Ta bort @@ -35740,14 +36476,14 @@ Always network: always load from network and do not check if the cache has a val Position - - + + map units kartenheter - - + + pixels pixlar @@ -35755,12 +36491,12 @@ Always network: always load from network and do not check if the cache has a val QgsOptionsDialogBase - + Missing objects - + Base options dialog could not be initialized. Missing some of the .ui template objects: @@ -36058,7 +36794,7 @@ error:%2 Also list tables with no geometry - + Lista även tabeller utan geometri @@ -36221,11 +36957,11 @@ error:%2 - - - - - + + + + + Oracle @@ -36346,7 +37082,7 @@ SQL: %2 - + Could not start transaction @@ -36367,7 +37103,7 @@ SQL: %2 - + Could not commit transaction @@ -36383,7 +37119,7 @@ SQL: %2 - + Could not rollback transaction @@ -36531,64 +37267,64 @@ Error: %2 - + Could not determine table existence. - + Table %1 could not be dropped. - + Table %1 already exists. - + Table creation failed. - + Could not lookup authid %1:%2 - + Could not lookup WKT. - + Could not determine new srid. - + CRS not found and could not be created. - + Could not insert metadata. - + Drop created table %1 failed. SQL:%2 Error: %3 - + Oracle SRID %1 not found. - + Lookup of Oracle SRID %1 failed. SQL:%2 Error:%3 @@ -36664,7 +37400,7 @@ Error: %2 &Build query - + &Skapa fråga @@ -37570,12 +38306,12 @@ Kontrollera att du har rättigheter för att göra SELECT på en tabell med Post Schema - Schema + Schema Table - Tabell + Tabell Type @@ -37588,7 +38324,7 @@ Kontrollera att du har rättigheter för att göra SELECT på en tabell med Post SRID - SRID + SRID @@ -37598,7 +38334,7 @@ Kontrollera att du har rättigheter för att göra SELECT på en tabell med Post Sql - Sql + Sql @@ -37618,22 +38354,22 @@ Kontrollera att du har rättigheter för att göra SELECT på en tabell med Post Column - Kolumn + Kolumn Data Type - + Datatyp Spatial Type - + Spatial typ Primary Key - + Primärnyckel @@ -37645,7 +38381,7 @@ Kontrollera att du har rättigheter för att göra SELECT på en tabell med Post QgsPluginInstaller QGIS Python Plugin Installer - QGIS Installerare för Python-insticksprogram + QGIS Installerare för Python-insticksprogram Couldn't open the local plugin directory @@ -39278,42 +40014,47 @@ SQL: %3 QgsProject - + + Loading layer %1 + + + + Unable to open %1 Kan inte öppna %1 - + Project File Read Error - + %1 at line %2 column %3 %1 på rad %2 kolumn %3 - + Project file read error: %1 at line %2 column %3 Fel vid läsning av projektfil %1 på rad %2, kolumn %3 - + %1 for file %2 %1 för fil %2 - + Unable to save to file %1 Kan ej spara till fil %1 - + %1 is not writable. Please adjust permissions (if possible) and try again. %1 är inte skrivbar. Justera rättigheter (om möjligt) och försök igen. - + Unable to save to file %1. Your project may be corrupted on disk. Try clearing some space on the volume and check file permissions before pressing save again. Kunde inte spara till fil %1. Ditt projekt kan vara felaktigt sparat. Försök frigöra disk-utrymme och kontrollera filrättigheter innan du försöker igen. @@ -39384,70 +40125,70 @@ Välj 'Ignorera' för att fortsätta utan de saknade lagren. Välj &ap Layer - Lager + Lager Type - Typ + Typ Identifiable - + Identifieringsbara Vector - Vektor + Vektor WMS - WMS + WMS Raster - Raster + Raster Coordinate System Restriction - + Koordinatsystemrestriktion No coordinate systems selected. Disabling restriction. - + Inga koordinatsystem valda. Avaktiverar restriktion. Selection color - Färg för valda + Färg för valda Measure tool (CRS transformation: %1) - + Mätverktyg (Koordinatsystemstranformation: %1) Canvas units (CRS transformation: %1) - + Kartfönstrets enheter (Koordinatsystemstranformation: %1) OFF - + AV ON - + @@ -39457,80 +40198,81 @@ Välj 'Ignorera' för att fortsätta utan de saknade lagren. Välj &ap Coordinate System Restrictions - + Kordinatsystemsrestriktioner The current selection of coordinate systems will be lost. Proceed? - + Det nuvarande urvalet av koordinatsystem kommer att förloras. +Fortsätt? Select print composer - + Välj utskriftskomponerare Composer Title - + Titel på utskriftskomponerare Select restricted layers and groups - + Välj lager och grupper som ska exkluderas Enter scale - + Skriv in skala Scale denominator - + Skalavgränsare Load scales - + Ladda skalor XML files (*.xml *.XML) - + XML-filer (*.xml *XML) Save scales - + Spara skalor Parameters : - + Parametrar: Parameters: - + Parametrar: Can only use ellipsoidal calculations when CRS transformation is enabled - + Kan bara använda elliptisk beräkning när kordinatsystemstransformation är aktiverad Select a valid symbol - + Välj en giltlig symbol Invalid symbol : - + Ogiltlig symbol : @@ -39541,22 +40283,22 @@ Proceed? Projektegenskaper - + Meters Meter - + Feet Feet - + Decimal degrees Decimalgrader - + Default project title Standardtitel för projekt @@ -39570,48 +40312,48 @@ Proceed? CRS - + Referenskoordinatsystem Coordinate Reference System - Koordinaternas referenssystem + Koordinaternas referenssystem Identify layers - + Identifiera lager Default styles - + Standardstilar - + OWS server - + OWS-server - + General settings Generella inställningar - + absolute absoluta - + relative relativa - + Save paths Länkar till lager @@ -39620,68 +40362,68 @@ Proceed? Lagrens enhet (används bara när koordinattransformation är avslagen) - + Degrees, Minutes, Seconds Grader, Minuter, Sekunder - + Precision Precision - + Automatically sets the number of decimal places in the mouse position display Sätter automatisk antal decimaler vid visning av musens position - + The number of decimal places that are used when displaying the mouse position is automatically set to be enough so that moving the mouse by one pixel gives a change in the position display Antalet decimaler som används vid visning av musens position sätts automatisk så att en förändring av musens läge med en pixel ändrar visad position - + Automatic Automatisk - - + + Sets the number of decimal places to use for the mouse position display Sätter antal decimaler vid visning av musens position - + Manual Manuell - - + + The number of decimal places for the manual option Antal decimaler vid val 'manuell' - + decimal places decimaler - + Project scales Projektskalor - - - - - - - - + + + + + + + + ... - ... + ... Default Styles @@ -39692,37 +40434,37 @@ Proceed? Standardsymboler - + Marker - arkör + Markör - + Line - Linje + Linje - + Fill Ytsymbol - + Color Ramp - Färgökning + Färgramp - + Style Manager Symbolhanteraren - + Options - Inställningar + Inställningar - + Assign random colors to symbols Ge slumpvalda färger till symboler @@ -39735,215 +40477,215 @@ Proceed? OWS Server - + Title - Titel + Titel - + Person Person - + Phone Telefon - + Abstract - Sammanfattning + Sammanfattning - + E-Mail E-Mail - + Organization Organisation - + Online resource - + Min. X - + Min. Y - + Max. X - + Max. Y - + Use Current Canvas Extent Använd kartfönstrets nuvarande utbredning - + Exclude composers - + Exkludera utskriftskomponerare - + Exclude layers - + Exkludera lager - + Measure tool - Mätverktyg + Mätverktyg - + Ellipsoid (for distance calculations) - + Ellipsoid (för distansberäkningar) - + Semi-major - Halva storaxeln + Halva storaxeln - + Semi-minor - Halva lillaxeln + Halva lillaxeln - + Project layers - + Defaut styles - + Default symbols - + Transparency Genomskinlighet - + % % - + Service capabilitities - + Fees Avgifter - + Access constraints - + Keyword list - + WMS capabilitities - + Advertised URL - + Width Bredd - + Height Höjd - + Maximums for GetMap request - + Advertised extent - + CRS restrictions - + WFS capabilitities - + Update Uppdatera - + Insert - + Delete - + Unselect all - + Select all Välj alla - + Macros Makron - + Python macros Python-makron @@ -39956,37 +40698,37 @@ Proceed? Ta bort - + Used - + Add WKT geometry to feature info response - + Canvas units Kartfönstrets mätenhet - + Degree Grader - + Degree display - + Degrees, Minutes Grader, Minuter - + Published @@ -39996,28 +40738,28 @@ Proceed? - + Identifiable layers Identifieringsbara lager - - + + Layer Lager - + Type Typ - + Identifiable - + Descriptive project name Projektbeskrivning @@ -40030,32 +40772,32 @@ Proceed? Val för fästning... - + Project title Projekttitel - + Selection color Färg för valda - + Background color Bakgrundsfärg - + Used when CRS transformation is turned off Används när koordinattransformering är avslagen - + Coordinate Reference System (CRS) Koordinaternas referenssystem (CRS) - + Enable 'on the fly' CRS transformation Aktivera omedelbar koordinattransformation @@ -40195,7 +40937,7 @@ Därför fungerar inte projektionsväljaren... Query Failed - Frågan Misslyckades + Frågan misslyckades @@ -40210,14 +40952,14 @@ Därför fungerar inte projektionsväljaren... The data provider said: %1 - + Datakällan sa: %1 Error in Query - Fel i frågan + Fel i frågan @@ -40230,17 +40972,17 @@ Datakällan sa: Query Builder - Frågebyggare + Frågebyggare Datasource - Datakälla + Datakälla Fields - Fält + Fält @@ -40253,7 +40995,7 @@ p, li { white-space: pre-wrap; } Values - Värden + Värden @@ -40261,7 +41003,10 @@ p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">List of values for the current field.</p></body></html> - List med värden för nuvarande fält. + <html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Lista med värden för nuvarande fält.</p></body></html> @@ -40474,7 +41219,7 @@ p, li { white-space: pre-wrap; } ... - ... + ... @@ -40484,7 +41229,7 @@ p, li { white-space: pre-wrap; } X min - X Min + X Min @@ -40494,27 +41239,27 @@ p, li { white-space: pre-wrap; } Y min - Y Min + Y Min Y max - Y Max + Y Max Columns - Kolumner + Kolumner Rows - Rader + Rader Output format - + Utdataformat @@ -40524,17 +41269,17 @@ p, li { white-space: pre-wrap; } Operators - Operatorer + Operatorer + - + + + * - * + * @@ -40549,7 +41294,7 @@ p, li { white-space: pre-wrap; } ^ - ^ + ^ @@ -40559,17 +41304,17 @@ p, li { white-space: pre-wrap; } ( - ( + ( - - - + - / - / + / @@ -40594,42 +41339,42 @@ p, li { white-space: pre-wrap; } ) - ) + ) < - < + < > - > + > = - = + = OR - OR + OR AND - AND + AND <= - <= + <= >= - >= + >= @@ -40648,68 +41393,60 @@ p, li { white-space: pre-wrap; } Bygg pyramider - no data - + ingen data - Feature info - Objektinformation + Objektinformation Band Band - + Format not supported - + Formatet stödjs inte - Average - Average + Medel - Nearest Neighbour - Nearest Neighbour + Närmaste granne - Gauss - Gauss + Gauss - Cubic - Kubisk + Kubisk - Mode - Läge + Läge - None - Ingen + Ingen - + Value - Värde + Värde - + Html - + Html - + Feature - Objekt + Objekt @@ -40717,31 +41454,31 @@ p, li { white-space: pre-wrap; } Default - Standard + Standard No compression - + Ingen kompression Low compression - + Låg kompression High compression - + Hög kompression JPEG compression - + JPEG-kompression @@ -40878,82 +41615,82 @@ Click on help button to get valid creation options for this format. QgsRasterHistogramWidget - + Visibility Synlighet - + Show min/max markers - + Show all bands - + Show RGB/Gray band(s) - + Show selected band - + Reset - + Load min/max - + Estimate (faster) Uppskattad (snabbare) - + Actual (slower) Verklig (långsammare) - + Current extent - + Use stddev (1.0) - + Use stddev (custom) - + Load for each band - + Recompute Histogram - + Band %1 Band %1 - + Choose a file name to save the map image as Välj ett filnamn att spara kartbilden som @@ -41020,27 +41757,27 @@ Click on help button to get valid creation options for this format. QgsRasterInterface - + Identify Identifiera - + Build Pyramids Bygg pyramider - + Create Datasources - + Remove Datasources - + Band Band @@ -41048,35 +41785,32 @@ Click on help button to get valid creation options for this format. QgsRasterLayer - - - - + + + Not Set Inte satt - + Could not reproject view extent: %1 - - - - + + + Raster Raster - + Could not reproject layer extent: %1 - Driver: - Drivrutin: + Drivrutin: Dimensions: @@ -41091,158 +41825,219 @@ Click on help button to get valid creation options for this format. Pixelstorlek: - Pyramid overviews: - Pyramidöversikter: + Pyramidöversikter: + + + + Driver + Drivrutin + + + + Data Type + Datatyp + + + + Byte - Eight bit unsigned integer + + + + + UInt16 - Sixteen bit unsigned integer + + + + + Int16 - Sixteen bit signed integer + + + + + UInt32 - Thirty two bit unsigned integer + + + + + Int32 - Thirty two bit signed integer + + + + + Float32 - Thirty two bit floating point + + + + + Float64 - Sixty four bit floating point + + + + + CInt16 - Complex Int16 + + + + + CInt32 - Complex Int32 + + + + + CFloat32 - Complex Float32 + + + + + CFloat64 - Complex Float64 + + + + + Pyramid overviews + + + + + Layer Spatial Reference System + + + + + Layer Extent (layer original source projection) + + + + + Project Spatial Reference System + - - + Band Band - + Band No Bandnr - + No Stats Ingen statistik - + No stats collected yet Ingen statistik har samlats in - + Min Val MinVärde - + Max Val MaxVärde - + Range Intervall - + Mean Medel - + Sum of squares Kvadratsumma - + Standard Deviation Standardavvikelse - + Sum of all cells Summa av alla celler - + Cell Count Cellantal - + <maplayer> not found. - - GDAL data type %1 is not supported - - - - Data Type: - Datatyp: - - - - Cannot read data - + Datatyp: - GDT_Byte - Eight bit unsigned integer - GDT_Byte - Åttabitars ickenegativt heltal + GDT_Byte - Åttabitars ickenegativt heltal - GDT_UInt16 - Sixteen bit unsigned integer - GDT_UInt16 - Sextonbitars ickenegativt heltal + GDT_UInt16 - Sextonbitars ickenegativt heltal - GDT_Int16 - Sixteen bit signed integer - GDT_Int16 - Sextonbitars heltal + GDT_Int16 - Sextonbitars heltal - GDT_UInt32 - Thirty two bit unsigned integer - GDT_UInt32 - Trettiotvåbitars ickenegativt heltal + GDT_UInt32 - Trettiotvåbitars ickenegativt heltal - GDT_Int32 - Thirty two bit signed integer - GDT_Int32 - Trettiotvåbitars heltal + GDT_Int32 - Trettiotvåbitars heltal - GDT_Float32 - Thirty two bit floating point - GDT_Float32 - Trettiotvåbitars flyttal + GDT_Float32 - Trettiotvåbitars flyttal - GDT_Float64 - Sixty four bit floating point - GDT_Float64 - Sextiofyrabitars flyttal + GDT_Float64 - Sextiofyrabitars flyttal - GDT_CInt16 - Complex Int16 - GDT_CInt16 - Komplex Int16 + GDT_CInt16 - Komplex Int16 - GDT_CInt32 - Complex Int32 - GDT_CInt32 - Komplex Int32 + GDT_CInt32 - Komplex Int32 - GDT_CFloat32 - Complex Float32 - GDT_CFloat32 - Komplex Float32 + GDT_CFloat32 - Komplex Float32 - GDT_CFloat64 - Complex Float64 - GDT_CFloat64 - Komplex Float64 + GDT_CFloat64 - Komplex Float64 - + Could not determine raster data type. Kunde inte bestämma rastertyp. - + Cannot instantiate the '%1' data provider - + Provider is not valid (provider: %1, URI: %2 @@ -41259,36 +42054,32 @@ Click on help button to get valid creation options for this format. Beskrivning av dataset - + No Data Value Inget datavärde - Layer Spatial Reference System: - Lagrets Spatial Reference System: + Lagrets Spatial Reference System: - Layer Extent (layer original source projection): - Lagrets utbredning (i lagrets ursprungliga koordinatsystem): + Lagrets utbredning (i lagrets ursprungliga koordinatsystem): - Project Spatial Reference System: - Projektets Spatial Reference System: + Projektets Spatial Reference System: out of extent utanför utsträckning - null (no data) - null (ingen data) + null (ingen data) - + NoDataValue not set Inget datavärde ej satt @@ -41301,14 +42092,13 @@ Click on help button to get valid creation options for this format. X: %1 Y: %2 Band: %3 - + QgsRasterLayer created QgsRasterLayer skapat - Retrieving stats for %1 - Hämtar statistik för %1 + Hämtar statistik för %1 Calculating stats for %1 @@ -41335,58 +42125,58 @@ Click on help button to get valid creation options for this format. Inte satt - + not defined - + Columns: Kolumner: - + Rows: Rader: - - + + No-Data Value: Inget datavärde: - - - - + + + + n/a --- - - + + Write access denied Skrivåtkomst nekad - + Write access denied. Adjust the file permissions and try again. Skrivåtkomst nekad. Justera filrättigheterna och försök igen. - - - - + + + + Building pyramids failed. Kunde ej skapa pyramider. - - + + Building pyramid overviews is not supported on this type of raster. Denna typ av raster stödjer ej att bygga pyramider. @@ -41419,8 +42209,8 @@ Click on help button to get valid creation options for this format. Kvantiler - - + + Red Röd @@ -41437,79 +42227,79 @@ Click on help button to get valid creation options for this format. Etikett - + Layer Properties - %1 Lageregenskaper - %1 - - + + Nearest neighbour Närmaste granne - - + + Bilinear - - + + Cubic Kubisk - - + + Average Average - + None Ingen - - + + Green Grön - - + + Blue Blå - - - - - + + + + + Percent Transparent Procent genomskinlighet - - + + Gray Grå - - + + Indexed Value Indexerat värde - + From - + To till @@ -41518,14 +42308,8 @@ Click on help button to get valid creation options for this format. null (ingen data) - Filter - Filter - - - - Bands - + Filter Time @@ -41540,23 +42324,23 @@ Click on help button to get valid creation options for this format. Inget datavärde ej satt - + Save file Spara fil - + Load layer properties from style file Läs in lageregenskaper från stilfil - - + + QGIS Layer Style File QGIS lager stilfil - + Save layer properties as style file Spara lageregenskaper som stilfil @@ -41565,7 +42349,7 @@ Click on help button to get valid creation options for this format. Textfil (*.txt) - + QGIS Generated Transparent Pixel Value Export File Fil med genomskinliga pixlars värde skapad av QGIS @@ -41578,12 +42362,12 @@ Click on help button to get valid creation options for this format. Välj ett filnamn att spara kartbilden som - + Open file Öppna fil - + Import Error Fel vid import @@ -41600,12 +42384,12 @@ Click on help button to get valid creation options for this format. - + Read access denied Läsåtkomst nekad - + Read access denied. Adjust the file permissions and try again. @@ -41618,22 +42402,22 @@ Click on help button to get valid creation options for this format. Färgökning - + Description Beskrivning - + Large resolution raster layers can slow navigation in QGIS. Raster med hög upplösning kan sinka navigeringen i QGIS. - + By creating lower resolution copies of the data (pyramids) performance can be considerably improved as QGIS selects the most suitable resolution to use depending on the level of zoom. Genom att skapa kopior med lägre upplösning (pyramider) kan prestanda avsevärt förbättras, genom att QGIS väljer den lämpligaste upplösningen beroende på zoom-nivå. - + You must have write access in the directory where the original data is stored to build pyramids. Du måste ha skrivrättigheter i biblioteket som den ursprungliga datan ligger för att kunna bygga pyramider. @@ -41650,17 +42434,17 @@ Click on help button to get valid creation options for this format. Exakt - + Please note that building internal pyramids may alter the original data file and once created they cannot be removed! Den ursprungliga datafilen kan ändras när du bygger pyramider, och de kan ej tas bort efter de har skapats. - + Please note that building internal pyramids could corrupt your image - always make a backup of your data first! Din bild kan förstöras när du bygger pyramider. Ta alltid backup FÖRST! - + The file was not writable. Some formats do not support pyramid overviews. Consult the GDAL documentation if in doubt. Filen var inte skrivbar. Vissa format stödjer inte pyramider. Kontrollera med GDAL-dokumentation om du är osäker. @@ -41677,8 +42461,8 @@ Click on help button to get valid creation options for this format. Läs in färgkarta - + Default Style Standardstil @@ -41687,8 +42471,8 @@ Click on help button to get valid creation options for this format. QGIS lager stilfil (*.qml) - - + + Saved Style Sparad stil @@ -41720,38 +42504,38 @@ Click on help button to get valid creation options for this format. Standard R:%1 G:%2 B:%3 - + Columns: %1 Kolumner:-%1 - + Rows: %1 Rader: %1 - + No-Data Value: %1 Inget datavärde: %1 - + Write access denied. Adjust the file permissions and try again. Skrivåtkomst nekad. Justera filrättigheterna och försök igen. - + Building internal pyramid overviews is not supported on raster layers with JPEG compression and your current libtiff library. Nuvarande libtiff-bibliotek stödjer inte att bygga pyramider från lager med JPEG-kompression. - - + + Textfile - + The following lines contained errors %1 @@ -41778,7 +42562,7 @@ Click on help button to get valid creation options for this format. - + General Allmänt @@ -41787,12 +42571,12 @@ Click on help button to get valid creation options for this format. Symbologi - + <p align="right">Full</p> <p align="right">Total</p> - + None Ingen @@ -41802,43 +42586,43 @@ Click on help button to get valid creation options for this format. Stil - + Render type - + Resampling - + Use original source no data value. - + No data value: - + Original data source no data value, if exists. - + <src no data value> - - + + Additional user defined no data value. - + Additional no data value @@ -41851,26 +42635,26 @@ Click on help button to get valid creation options for this format. Större än eller lika med: - - - + + + Metadata Metadata - - - + + + Pyramids Pyramider - + Resolutions - + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } @@ -41879,12 +42663,12 @@ p, li { white-space: pre-wrap; } - + Average Average - + Nearest Neighbour Nearest Neighbour @@ -41894,9 +42678,9 @@ p, li { white-space: pre-wrap; } Bild - - - + + + Histogram Histogram @@ -41917,7 +42701,7 @@ p, li { white-space: pre-wrap; } Rendera som - + 00% 00% @@ -41930,12 +42714,12 @@ p, li { white-space: pre-wrap; } Max - - - - - - + + + + + + ... ... @@ -41964,9 +42748,9 @@ p, li { white-space: pre-wrap; } Enkanalig grå - - - + + + Style Stil @@ -42085,29 +42869,29 @@ p, li { white-space: pre-wrap; } TextEtikett - + Title Titel - + Abstract Sammanfattning - - - + + + Transparency Genomskinlighet - + Global transparency Övergripande genomskinlighet - + No data value Inget datavärde @@ -42116,44 +42900,44 @@ p, li { white-space: pre-wrap; } Nollställ inget datavärde - + Custom transparency options Alternativ för anpassad genomskinlighet - + Transparency band Genomskinligt band - + Transparent pixel list Lista med genomskinliga pixlar - + Add values manually Lägg till värden för hand - + Layer info - + displayed as - + visas som - + Layer name Lagernamn Minimum scale, i.e. maximum scale denominator. This limit is exclusive, that means the layer will not be displayed on this scale. - + Minimumskala, dvs. maxskaleavgränsare. Gränsen är exlusiv, lagret kommer alltså inte visas på denna skala. @@ -42163,7 +42947,7 @@ p, li { white-space: pre-wrap; } Maximum scale, i.e. minimum scale denominator. This limit is inclusive, that means the layer will be displayed on this scale. - + Maximumskala, dvs.minskaleavgränsare. Gränsen är inklusiv, lagret kommer alltså att visas på denna skala. @@ -42171,132 +42955,136 @@ p, li { white-space: pre-wrap; } - + + Add values from display + + + + Description Beskrivning - + Properties Egenskaper - + Band rendering - + Color rendering - + Saturation Färgmättnad - + Off - + By lightness - + By luminosity - + By average - + Hue Färgton - + Blending mode - + Brightness - + Contrast - + Grayscale Gråskala - + Colorize - + Strength - + % % - + Reset all color rendering options to default - + Reset - + Zoomed: in - + out - Add Values from display - Lägg till värden från skärmen + Lägg till värden från skärmen - + Remove selected row Ta bort vald rad - + Default values Standardvärden - + Import from file Importera från fil - + Export to file Exportera till fil @@ -42341,27 +43129,27 @@ p, li { white-space: pre-wrap; } Namn - + Layer source Lagerkälla - + Columns Kolumner - + Rows Rader - + No Data - + Scale dependent visibility Skalberoende synlighet @@ -42374,18 +43162,18 @@ p, li { white-space: pre-wrap; } Minimum - + Coordinate reference system Koordinaternas referenssystem - - + + Specify the coordinate reference system of the layer's geometry. Specificera koordinatsystemet för lagrets geometrier. - + Specify... Specificera... @@ -42412,12 +43200,12 @@ p, li { white-space: pre-wrap; } Bygga pyrmaider internt om möjligt - + Resampling method Omsamplingsmetod - + Build pyramids Bygg pyramider @@ -42442,54 +43230,47 @@ p, li { white-space: pre-wrap; } Tillåt approximering - + Restore Default Style Återskapa standardstil - + Save As Default Spara som standard - + Load Style ... Läs in stil... - + Oversampling - + Overview format - + External - + Internal (if possible) - + External (Erdas Imagine) - - - - Pipe - - - - + Save Style ... Spara stil... @@ -42964,32 +43745,32 @@ standard deviation × QgsRasterRenderer - + Unknown - + User defined - + Estimated - + Exact Exakt - + min / max - + of @@ -43507,7 +44288,7 @@ standard deviation × Count - + Antal @@ -43536,32 +44317,44 @@ standard deviation × Etikett - Add - Lägg till + Lägg till + + + + Add rule + - + + Edit rule + + + + + Remove rule + + + + Count features - + Rendering order... - Edit - Redigera + Redigera - Remove - Ta bort + Ta bort - + Refine current rules @@ -43831,7 +44624,7 @@ standard deviation × SVG file - + SVG-fil @@ -44401,26 +45194,26 @@ enhancement - - - + + + Discrete Diskret - - - - + + + + Linear Linjär - - + + Exact Exakt @@ -44440,33 +45233,37 @@ enhancement Anpassad färgkarta fält - + Load Color Map Läs in färgkarta - The color map for band %1 failed to load - Färgkartan för band %1 kunde inte läsas in + Färgkartan för band %1 kunde inte läsas in - + + The color map for band %1 has no entries + + + + Open file Öppna fil - - + + Textfile (*.txt) Textfil (*.txt) - + Import Error Fel vid import - + The following lines contained errors @@ -44475,12 +45272,12 @@ enhancement - + Read access denied Läsåtkomst nekad - + Read access denied. Adjust the file permissions and try again. @@ -44489,22 +45286,22 @@ enhancement - + Save file Spara fil - + QGIS Generated Color Map Export File QGIS-genererad fil för export av färgkarta - + Write access denied Skrivåtkomst nekad - + Write access denied. Adjust the file permissions and try again. @@ -44709,7 +45506,7 @@ enhancement Symbol levels... - Symbolnivåer... + Symbolnivåer... @@ -44717,12 +45514,12 @@ enhancement Form - Formulär + Formulär The Symbol - + Symbolen @@ -44730,12 +45527,12 @@ enhancement Invalid name - + Ogiltligt namn The smart group name field is empty. Kindly provide a name - + Fältet för den smarta gruppens namn är tomt. Var vänlig ange ett namn @@ -44743,27 +45540,27 @@ enhancement Smart Group Editor - + Editering av smarta grupper Smart Group Name - + Namn på smart grupp Condition matches - + Villkor matchar Add Condition - + Lägg till villkor Conditions - + Villkor @@ -44846,7 +45643,7 @@ enhancement Enable snapping on intersection - + Tillåt snappning mot korsande linjer @@ -44872,150 +45669,150 @@ enhancement UNKNOWN - + OKÄND GEOMETRY - + GEOMETRY POINT - POINT + POINT LINESTRING - LINESTRING + LINESTRING POLYGON - POLYGON + POLYGON MULTIPOINT - MULTIPOINT + MULTIPOINT MULTILINESTRING - MULTILINESTRING + MULTILINESTRING MULTIPOLYGON - MULTIPOLYGON + MULTIPOLYGON GEOMETRYCOLLECTION - GEOMETRYCOLLECTION + GEOMETRYCOLLECTION QgsSpatiaLiteProvider - + Text Text - + Binary object (BLOB) Binärt objekt (BLOB) - + Decimal number (double) Decimaltal (double) - + Whole number (integer) Heltal (integer) - + Retrieval of spatialite version failed - + Could not parse spatialite version string '%1' - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + SQLite error: %2 SQL: %1 SQLite fel: %2 SQL: %1 - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + SpatiaLite SpatiaLite - - - - - - - - - + + + + + + + + + unknown cause okänd orsak @@ -45024,7 +45821,7 @@ SQL: %1 SQLite-fel vid läsning av objekt: %1 - + FAILURE: Field %1 not found. FEL: Fält %1 hittades inte. @@ -46166,7 +46963,7 @@ Vill du skriva över relationen [%2]? p, li { white-space: pre-wrap; } </style></head><body style=" font-family:'Cantarell'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">We work really hard to make this nice software for you. See all the cool features it has? Get a warm fuzzy feeling when you use it? Quantum GIS is a labour of love by a dedicated team of developers. We want you to copy &amp; share it and put it in the hands of as many people as possible. If QGIS is saving you money or you like our work and have the financial ability to help, please consider sponsoring the development of Quantum GIS. We use money from sponsors to pay for travel and costs related to our bi-annual hackfests, and to generally support the goals of our project. Please see the </span><a href="http://qgis.org/en/sponsorship.html"><span style=" font-family:'Ubuntu'; font-size:10pt; text-decoration: underline; color:#0000ff;">QGIS Sponsorship Web Page</span></a><span style=" font-family:'Ubuntu'; font-size:10pt;"> for more details. In the </span><a href="http://qgis.org/en/sponsorship/sponsors.html"><span style=" text-decoration: underline; color:#0000ff;">Sponsors page</span></a><span style=" font-family:'Ubuntu'; font-size:10pt;"> you can see the fine people and companies that are helping us financially - a great big 'thank you' to you all!</span></p></body></html> - + @@ -46322,37 +47119,37 @@ Updates to geometry values will be disabled, and query performance may be poor b Select all - Välj alla + Välj alla Clear selection - + Rensa urval Import style(s) - + Importera stil(er) Select symbols to import - + Välj symboler att importera Import - Importera + Importera Export style(s) - + Exportera stil(er) Export - Exportera + Exportera @@ -46415,60 +47212,62 @@ Updates to geometry values will be disabled, and query performance may be poor b New group cannot be created without a name. Kindly enter a name. - + Ny grupp New group - + Ny grupp Cannot create a group without name. Enter a name. - + Kan inte skapa en grupp utan namn. Välj ett namn. Duplicate names - + Dubbla namn Symbol with name '%1' already exists. Overwrite? - + Symbol med namnet '%1' finns redan. +Skriv över? Color ramp with name '%1' already exists. Overwrite? - + Färgramp med namnet '%1' finns redan. +Skriv över? Load styles - + Ladda stilar XML files (*.xml *XML) - XML-filer (*.xml *XML) + XML-filer (*.xml *XML) Downloading style ... - + Laddar ner stil... HTTP Error! - + HTTP-fel! Download failed: %1. - Nedladdnignen misslyckades + Nedladdningen misslyckades: %1. @@ -46476,27 +47275,27 @@ Overwrite? Styles import/export - + Import/Export av symboler Import from - + Importera från Location - Plats + Plats Save to group - + Spara till grupp Select symbols to export - + Välj symboler att exportera @@ -46504,163 +47303,163 @@ Overwrite? Marker symbol (%1) - + Markörsymbol (%1) Line symbol (%1) - + Linjesymbol (%1) Fill symbol (%1) - + Ytsymbol (%1) Color ramp (%1) - + Färgrampsymbol (%1) Type here to filter symbols ... - + Skriv här för att filtrera symboler... Symbol Name - Symbolnamn + Symbolnamn Please enter a name for new symbol: - + Välj ett namn för den nya symbolen: new symbol - + ny symbol new marker - + ny markör new line - + ny linje new fill symbol - + ny ytsymbol Save symbol - + Spara symbol Cannot save symbol without name. Enter a name. - + Kan inte spara symbol utan namn. Välj ett namn. Symbol with name '%1' already exists. Overwrite? - + Symbol med namnet '%1' finns redan. Skriva över? Gradient - + Gradient Random - + Slumpad ColorBrewer - + ColorBrewer cpt-city - + cpt-city Color ramp type - + Färgrampstyp Please select color ramp type: - + Var vänlig välj färgrampstyp: new ramp - + ny ramp new gradient ramp - + ny gradientramp new random ramp - + ny slumpad ramp Color Ramp Name - + Färgrampsnamn Please enter a name for new color ramp: - + Var vänlig välj ett namn för den nya färgrampen: Save Color Ramp - + Spara färgramp Cannot save color ramp without name. Enter a name. - + Kan inte spara färgramp utan namn. Välj ett namn. Save color ramp - + Spara färgramp Color ramp with name '%1' already exists. Overwrite? - + Färgramp med namnet '%1' finns redan. Skriv över? Invalid Selection - + Ogiltligt val @@ -46693,7 +47492,7 @@ Kindly select a group or smart group you might want to delete. Error! - Fel! + Fel! @@ -46704,7 +47503,7 @@ There was a problem with your symbol database. Database Error - Databasfel + Databasfel @@ -46737,12 +47536,12 @@ There was a problem with your symbol database. Marker - arkör + Markör Line - Linje + Linje @@ -46752,22 +47551,22 @@ There was a problem with your symbol database. Color ramp - Färgramp + Färgramp Add item - + Lägg till objekt Share - + Dela Tags - + Taggar Add @@ -46776,17 +47575,17 @@ There was a problem with your symbol database. Edit item - + Redigera objekt Edit - Redigera + Redigera Remove item - + Radera objekt Remove @@ -46808,12 +47607,12 @@ There was a problem with your symbol database. Select SVG file - + Välj SVG-fil SVG files - + SVG-filer @@ -46827,7 +47626,7 @@ There was a problem with your symbol database. SVG - + SVG @@ -46845,47 +47644,47 @@ There was a problem with your symbol database. Select SVG file - + Välj SVG-fil SVG files - + SVG-filer Size - Storlek + Storlek Border width - Kantbredd + Kantbredd Angle - Vinkel + Vinkel Offset - Offset + Offset SVG file - + SVG-fil Color - Färg + Färg Border color - Kantfärg + Kantfärg @@ -46893,12 +47692,12 @@ There was a problem with your symbol database. App Symbols - + Appsymboler User Symbols - + Användarsymboler @@ -46906,34 +47705,34 @@ There was a problem with your symbol database. Select SVG file - + Välj SVG-fil SVG files - + SVG-filer Invalid file - + Invalid fil Error, file does not exist or is not readable - + Fel, filen existerar inte eller är inte läsbar Invalid file url - + Invalid url till fil Error, file URL is invalid - + Fel, filens url är invalid @@ -46941,7 +47740,7 @@ There was a problem with your symbol database. Layer %1 - + Lager %1 @@ -46949,17 +47748,17 @@ There was a problem with your symbol database. Symbol Levels - + Symbolnivåer Enable symbol levels - + Aktivera symbolnivåer Define the order in which the symbol layers are rendered. The numbers in the cells define in which rendering pass the layer will be drawn. - + Definierar ordningen som symbollagren ska renderas. Numren i cellerna definierar i vilket renderingspass lagret kommer att ritas upp. @@ -46971,12 +47770,12 @@ There was a problem with your symbol database. Invalid Selection! - + Ogiltligt val! Kindly select a symbol to add layer. - + Var vänlig välj en symbol för att lägga till ett lager. @@ -46984,37 +47783,37 @@ There was a problem with your symbol database. Symbol selector - + Symbolväljare Symbol layers - + Symbollager - + Add symbol layer - + Lägg till symbollager - + Remove symbol layer - + Radera symbollager - + Lock layer's color - + Lås lagrets färg - + Move up - Flytta upp + Flytta upp - + Move down - Flytta ner + Flytta ner Millimeter @@ -47083,7 +47882,7 @@ There was a problem with your symbol database. Linear - Linjär + Linjär @@ -47107,7 +47906,7 @@ There was a problem with your symbol database. Interpolation method - Interpoleringsmetod + Interpoleringsmetod @@ -47117,12 +47916,12 @@ There was a problem with your symbol database. Output file - Utdatafil + Utdatafil ... - ... + ... @@ -47768,22 +48567,22 @@ Skall existerande klasser tas bort före klassificering? Discrete - Diskret + Diskret Continous - + Kontinuerlig Gradient file : %1 - + Gradientfil: %1 License file : %1 - + Licensfil: %1 @@ -47827,12 +48626,12 @@ Skall existerande klasser tas bort före klassificering? Change... - Ändra... + Ändra... Type - Typ + Typ @@ -47842,7 +48641,7 @@ Skall existerande klasser tas bort före klassificering? Offset (%) - + Offset (%) @@ -47857,7 +48656,7 @@ Skall existerande klasser tas bort före klassificering? Information - Information + Information @@ -47877,12 +48676,12 @@ Skall existerande klasser tas bort före klassificering? QgsVectorLayer - + ERROR: no provider FEL: ingen datakälla - + ERROR: layer not editable FEL: lager kan ej skrivas @@ -48021,131 +48820,187 @@ Skall existerande klasser tas bort före klassificering? Datakällefel: - + Updating feature count for layer %1 - Uppdaterar antal objekt för lager %1 + Uppdaterar antal objekt för lager %1 - + Abort - Avbryt + Avbryt - + Commit errors: %1 Commit-fel: %1 - General: - Allmänt: + Allmänt: - Layer comment: %1 - Lagerkommentar: %1 + Lagerkommentar: %1 - Storage type of this layer: %1 - Lagringstyp för detta lager: %1 + Lagringstyp för detta lager: %1 - Source for this layer: %1 - Källa för detta lager : %1 + Källa för detta lager : %1 - Geometry type of the features in this layer: %1 - Geometrityp på objekten i detta lager: %1 + Geometrityp på objekten i detta lager: %1 - Primary key attributes: - + Attribut med primärnyckel: - The number of features in this layer: %1 - Antal objekt i detta lager: %1 + Antal objekt i detta lager: %1 - Editing capabilities of this layer: %1 - Möjlighet till redigering i detta lager: %1 + Möjlighet till redigering i detta lager: %1 - Extents: - Utsträckning: + Utsträckning: - In layer spatial reference system units : - I lagrets referenskoordinatsystemsenheter : + I lagrets referenskoordinatsystemsenheter : - - + + xMin,yMin %1,%2 : xMax,yMax %3,%4 xMin,yMin %1,%2 : xMax,yMax %3,%4 - + unknown extent okänd utsträckning - - In project spatial reference system units : - I projektets referenskoordinatsystemsenheter : + I projektets referenskoordinatsystemsenheter : - Layer Spatial Reference System: - Lagrets referenskoordinatsystem: + Lagrets referenskoordinatsystem: - Project (Output) Spatial Reference System: - Projektets (visade) referenskoordinatsystem: + Projektets (visade) referenskoordinatsystem: - + (Invalid transformation of layer extents) (Ogiltig transformering av lagrets utsträckning) - Attribute field info: - Attributfält info: + Attributfält info: + + + + General + Allmänt + + + + Layer comment + + + + + Storage type of this layer + + + + + Source for this layer + + + + + Geometry type of the features in this layer + + + + + Primary key attributes + + + + + The number of features in this layer + + + + + Editing capabilities of this layer + + + + + Extents + Utsträckning + + + + In layer spatial reference system units + + + + + + In project spatial reference system units + + + + + Layer Spatial Reference System + + + + + Project (Output) Spatial Reference System + + + + + Attribute field info + - + Field Fält - + Type Typ - + Length Längd - + Precision Precision - + Comment Kommentar @@ -48160,7 +49015,7 @@ Skall existerande klasser tas bort före klassificering? SUCCESS: %n attribute(s) deleted. deleted attributes count - + RÄTT: %n attribut togs bort. RÄTT: %n attribut togs bort. @@ -48169,7 +49024,7 @@ Skall existerande klasser tas bort före klassificering? ERROR: %n attribute(s) not deleted. not deleted attributes count - + FEL: %n attribut togs inte bort. FEL: %n attribut togs inte bort. @@ -48178,7 +49033,7 @@ Skall existerande klasser tas bort före klassificering? SUCCESS: %n attribute(s) added. added attributes count - + RÄTT: %n attribut lades till. RÄTT: %n attribut lades till. @@ -48187,7 +49042,7 @@ Skall existerande klasser tas bort före klassificering? ERROR: %n new attribute(s) not added not added attributes count - + FEL: %n nytt attribut lades inte till FEL: %n nya attribut lades inte till @@ -48195,18 +49050,18 @@ Skall existerande klasser tas bort före klassificering? ERROR: the count of fields is incorrect after addition/removal of fields! - + FEL: antalet fält är inte korrekt efter addering/borttagning av fält! ERROR: field with index %1 is not the same! - + FEL: fält med index %1 är inte samma! SUCCESS: %n attribute value(s) changed. changed attribute values count - + RÄTT: %n attributvärde ändrades. RÄTT: %n attributvärden ändrades. @@ -48215,7 +49070,7 @@ Skall existerande klasser tas bort före klassificering? ERROR: %n attribute value change(s) not applied. not changed attribute values count - + FEL: %n attributförändring kunde inte genomföras. FEL: %n attributförändringar kunde inte genomföras. @@ -48224,7 +49079,7 @@ Skall existerande klasser tas bort före klassificering? SUCCESS: %n feature(s) deleted. deleted features count - + RÄTT: %n objekt togs bort. RÄTT: %n objekt togs bort. @@ -48233,7 +49088,7 @@ Skall existerande klasser tas bort före klassificering? ERROR: %n feature(s) not deleted. not deleted features count - + FEL: %n objekt togs inte bort. FEL: %n objekt togs inte bort. @@ -48242,7 +49097,7 @@ Skall existerande klasser tas bort före klassificering? SUCCESS: %n feature(s) added. added features count - + RÄTT: %n objekt lades till. RÄTT: %n objekt lades till. @@ -48251,7 +49106,7 @@ Skall existerande klasser tas bort före klassificering? ERROR: %n feature(s) not added. not added features count - + FEL: %n objekt lades inte till. FEL: %n objekt lades inte till. @@ -48260,7 +49115,7 @@ Skall existerande klasser tas bort före klassificering? ERROR: %n feature(s) not added - provider doesn't support adding features. not added features count - + FEL: %n objekt lades inte till. Datakällan stödjer inte lägga till objekt. FEL: %n objekt lades inte till. Datakällan stödjer inte lägga till objekt. @@ -48269,7 +49124,7 @@ Skall existerande klasser tas bort före klassificering? SUCCESS: %n geometries were changed. changed geometries count - + RÄTT: %n geometri ändrades. RÄTT: %n geometrier ändrades. @@ -48278,7 +49133,7 @@ Skall existerande klasser tas bort före klassificering? ERROR: %n geometries not changed. not changed geometries count - + FEL: %n geometri ändrades inte. FEL: %n geometrier ändrades inte. @@ -48287,7 +49142,7 @@ Skall existerande klasser tas bort före klassificering? Provider errors: - + Datakällefel: @@ -48310,13 +49165,13 @@ Skall existerande klasser tas bort före klassificering? Unik Symbol - - + + Spatial Index Rumsligt index - + Creation of spatial index failed Misslyckades skapa rumsligt index @@ -48369,8 +49224,8 @@ Skall existerande klasser tas bort före klassificering? Kommentar - - + + Default Style Standardstil @@ -48427,41 +49282,41 @@ Skall existerande klasser tas bort före klassificering? Tog bort attribut - + Creation of spatial index successful Lyckades skapa rumsligt index - + Load layer properties from style file Läs in lageregenskaper från stilfil - - - + + + QGIS Layer Style File QGIS lager stilfil - - - + + + SLD File SLD-fil - + Load Style Läs in stil - + Save layer properties as style file Spara lageregenskaper som stilfil - + Saved Style Sparad stil @@ -48474,7 +49329,7 @@ Skall existerande klasser tas bort före klassificering? Överlager - + Layer Properties - %1 Lageregenskaper - %1 @@ -48495,23 +49350,23 @@ Skall existerande klasser tas bort före klassificering? Alias - - + + Stop editing mode to enable this. Avsluta redigeringsläge för att tillåta detta. - + Insert expression Skriv in uttryck - + This button opens the query builder and allows you to create a subset of features to display on the map canvas rather than displaying all features in the layer Den här knappen öppnar Frågebyggaren som gör det möjligt att välja endast en delmängd av lagrets objekt för visning på kartbladet - + The query used to limit the features in the layer is shown here. To enter or modify the query, click on the Query Builder button Sökfrågan för att begränsa objekt i lagret visas här. För att ändra sökfrågan, klicka på på knappen Frågebyggare @@ -48660,7 +49515,7 @@ Skall existerande klasser tas bort före klassificering? RuntPunkt - + Save Style Spara stil @@ -48720,7 +49575,7 @@ Skall existerande klasser tas bort före klassificering? QgsVectorLayerPropertiesBase - + Layer Properties Lageregenskaper @@ -48729,14 +49584,15 @@ Skall existerande klasser tas bort före klassificering? Symbologi - + + + General Allmänt - Use scale dependent rendering - Använd skalberoende rendering + Använd skalberoende rendering Display name @@ -48751,12 +49607,16 @@ Skall existerande klasser tas bort före klassificering? Titelfält för dialogrutan Identifiera - + + + Style Stil - + + + Fields Fält @@ -48777,47 +49637,92 @@ Skall existerande klasser tas bort före klassificering? ... - - + + Specify the coordinate reference system of the layer's geometry. Specificera koordinatsystemet för lagrets geometrier. - Specify CRS - Specificera referenskoordinatsystem + Specificera referenskoordinatsystem Init function Startfunktion - Subset - Delmängd + Delmängd - + Query Builder Frågebyggare - + + + Joins Sammanslagningar - + + Layer info + + + + + Data source encoding + + + + + Coordinate reference system + + + + + Specify... + Specificera... + + + + Create spatial index + Skapa spatialt index + + + + Update extents + + + + + <html><head/><body><p align="center"><span style=" font-size:0.75em;">Minimum<br>(exclusive)</span></p></body></html> + + + + + <html><head/><body><p align="center"><span style=" font-size:0.75em;">Maximum<br>(inclusive)</span></p></body></html> + + + + + Feature subset + + + + Join layer Slå ihop lager - + Join field Slå ihop fält - + Target field Målfält @@ -48826,92 +49731,79 @@ Skall existerande klasser tas bort före klassificering? Datadefinierad position - Create Spatial Index - Skapa rumsligt index + Skapa rumsligt index - + + + Metadata Metadata + + Labels Etiketter - + Display labels Visa etiketter - - + Minimum scale, i.e. maximum scale denominator. This limit is exclusive, that means the layer will not be displayed on this scale. - + Minimumskala, dvs. maxskaleavgränsare. Gränsen är exlusiv, lagret kommer alltså inte visas på denna skala. - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Minimum scale</p> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(exclusive)</p></body></html> - - - - - + Maximum scale, i.e. minimum scale denominator. This limit is inclusive, that means the layer will be displayed on this scale. - - - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'DejaVu Sans'; font-size:10pt; font-weight:400; font-style:normal;"> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Maximum scale</p> -<p align="center" style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(inclusive)</p></body></html> - + Maximumskala, dvs.minskaleavgränsare. Gränsen är inklusiv, lagret kommer alltså att visas på denna skala. - - + + Current - Nuvarande + Nuvarande - + + + Actions Kommandon - + Restore Default Style Återskapa standardstil - + Save As Default Spara som standard - + + Properties + Egenskaper + + + Load Style ... Läs in stil... - + Save Style ... Spara stil... - Options - Inställningar + Inställningar Maximum @@ -48930,7 +49822,9 @@ p, li { white-space: pre-wrap; } Genomskinlighet - + + + Diagrams Diagram @@ -48959,8 +49853,9 @@ p, li { white-space: pre-wrap; } tseende + Scale dependent visibility - Skalberoende synlighet + Skalberoende synlighet Background color @@ -48971,19 +49866,19 @@ p, li { white-space: pre-wrap; } Pennfärg - + + + Labels (deprecated) Etiketter (föråldrade) - Update Extents - Uppdatera utsträckning + Uppdatera utsträckning - CRS - Referenskoordinatsystem + Referenskoordinatsystem Less than: @@ -48994,17 +49889,17 @@ p, li { white-space: pre-wrap; } Större än eller lika med: - Provider-specific options - Alternativ för datakällor + Alternativ för datakällor - Encoding - Kodning + Kodning - + + + Display Visa @@ -49013,62 +49908,67 @@ p, li { white-space: pre-wrap; } Text i innehållsförteckningen - + Map Tip display text Text för karttips - + Inserts an expression into the action Sätter in ett uttryck i kommandot - + Insert expression... Sätt in uttryck... - + The valid attribute names for this layer Giltigt attributnamn för det här lagret - + Inserts the selected field into the action Sätter in valt fält i kommandot - + Insert field Lägg till fält - + HTML HTML - + Field Fält - + Layer name - Lagernamn + Lagernamn - + displayed as - + visas som + + + + Description + Beskrivning - + Title Titel - + Abstract Sammanfattning @@ -49194,17 +50094,17 @@ p, li { white-space: pre-wrap; } No symbology - + Ingen stil Feature symbology - + Objektstil Symbol layer symbology - + Symbollagerstil @@ -49253,7 +50153,7 @@ p, li { white-space: pre-wrap; } Symbology export - + Export av stil @@ -49283,17 +50183,17 @@ p, li { white-space: pre-wrap; } Skip attribute creation - Hindra skapandet av attribute + Hindra skapandet av attribut 1: - 1: + 1: Scale - Skala + Skala @@ -49382,7 +50282,7 @@ p, li { white-space: pre-wrap; } Either the WFS server does not support WFS version 1.0.0 or the WFS url is wrong - + Antingen stödjer inte WFS-servern WFS version 1.0.0 eller så är WFS-url:en fel @@ -49483,17 +50383,17 @@ p, li { white-space: pre-wrap; } &Add - L&ägg till + L&ägg till &Build query - + &Skapa fråga Build query - Skapa fråga + Skapa fråga @@ -49576,13 +50476,13 @@ p, li { white-space: pre-wrap; } Filter: - Filter: + Filter: Display WFS FeatureTypes containing this word in the title, name or abstract - + Visa WFS-lager som innehåller detta ordet i titeln, namnet eller abstrakten @@ -49607,7 +50507,7 @@ p, li { white-space: pre-wrap; } Use title for layer name - + Använd titel som lagernamn Title @@ -49697,17 +50597,17 @@ Objekt L&ägg till - + Are you sure you want to remove the %1 connection and all associated settings? Är du säker att du vill ta bort anslutningen %1 och alla tillhörande inställningar? - + Confirm Delete Bekräfta borttagning - + encoding %1 not supported. kodning %1 stöds ej. @@ -49716,7 +50616,7 @@ Objekt WMS-lösenord för %1 - + WMS Provider WMS-källa @@ -49726,22 +50626,22 @@ Objekt Lägg till valda lager till karta - + Load connections Läs in anslutningar - + XML files (*.xml *XML) XML-filer (*.xml *XML) - + Could not open the WMS Provider Kunde inte öppna WMS-källan - + Coordinate Reference System (%n available) crs count @@ -49750,12 +50650,12 @@ Objekt - + Select layer(s) Välj lager - + Options (%n coordinate reference systems available) crs count @@ -49764,32 +50664,32 @@ Objekt - + Select layer(s) or a tileset Välj lager eller mosaik - + Select either layer(s) or a tileset Välj antingen lager eller en mosaik - + No common CRS for selected layers. Inget gemensamt referenskoordinatsystem för valda lager. - + No CRS selected Inget referenskoordinatsystem valt - + No image encoding selected Ingen bildkodning vald - + %n Layer(s) selected selected layer count @@ -49798,7 +50698,7 @@ Objekt - + Tileset selected Mosaik valt @@ -49810,39 +50710,39 @@ Objekt %2 - + Could not understand the response. The %1 provider said: %2 Could not understand the response. The %1 provider said: %2 - + WMS proxies WMS mellanvärdar - + Several WMS servers have been added to the server list. Note that if you access the internet via a web proxy, you will need to set the proxy settings in the QGIS options dialog. Många WMS-servrar lades till listand. Om du ansluter dig till internet via proxy, måste du ställa in det i alternativen. - + parse error at row %1, column %2: %3 Tolkningsfel på rad %1, kolumn %2: %3 - + network error: %1 nätverksfel: %1 - + The %1 connection already exists. Do you want to overwrite it? Anlustningen %1 finns redan. Vill du skriva över den? - + Confirm Overwrite Bekräfta överskrivning @@ -50159,148 +51059,148 @@ Response was: QgsWcsProvider - + Cannot describe coverage - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + WCS WCS - + Coverage not found - + Cannot calculate extent - + Cannot get test dataset. - + Received coverage has wrong extent %1 (expected %2) - + Rotating raster - + Block read OK - + Received coverage has wrong size %1 x %2 (expected %3 x %4) - + Getting map via WCS. - + Map request error (Status: %1; Reason phrase: %2; URL:%3) Kart-fel (status:%1; orsak:%2; URL: %3) - + Cannot parse multipart response: %1 - + Map request error (Title:%1; Error:%2; URL: %3) Kart-fel (titel:%1; fel:%2; URL: %3) - + Map request error (Status: %1; Response: %2; URL:%3) Kart-fel (status:%1; svar:%2; URL: %3) - + Map request error:<br>Title: %1<br>Error: %2<br>URL: <a href='%3'>%3</a>) - + Expected 2 parts, %1 received - + More than 2 parts (%1) received - + Map request error (Response: %1; URL:%2) - + Content-Transfer-Encoding %1 not supported - + No data received - + Cannot create memory file - + Map request failed [error:%1 url:%2] Kart-fel (fel:%1; URL:- %2) - + Not logging more than 100 request errors. Loggar ej mer än 100 fel. - + %1 of %2 bytes of map downloaded. - + Dom Exception DOM fel - + Could not get WCS Service Exception at %1: %2 at line %3 column %4 Response was: @@ -50309,72 +51209,72 @@ Response was: - + Request contains a format not offered by the server. - + Request is for a Coverage not offered by the service instance. - + Value of (optional) UpdateSequence parameter in GetCapabilities request is equal to current value of service metadata update sequence number. Värdet på (frivilliga) UpdateSequence-parameter i GetCapabilities-förfrågan är samma som nuvarande värde på 'service metadata update' sekvensnummer. - + Value of (optional) UpdateSequence parameter in GetCapabilities request is greater than current value of service metadata update sequence number. Värdet på (frivilliga) UpdateSequence-parameter i GetCapabilities-förfrågan är större än nuvarande värde på 'service metadata update' sekvensnummer. - + Request does not include a parameter value, and the server instance did not declare a default value for that dimension. - + Request contains an invalid parameter value. - + No other exceptionCode specified by this service and server applies to this exception. - + Operation request contains an output CRS that can not be used within the output format. - + Operation request specifies to "store" the result, but not enough storage is available to do this. - + (No error code was reported) (Ingen felkod) - + (Unknown error code) (Okänd felkod) - + The WCS vendor also reported: - + composed error message '%1'. - + Cannot verify coverage full extent: %1 @@ -50523,7 +51423,7 @@ Response was: Format not supported - + Formatet stödjs inte @@ -50547,9 +51447,8 @@ Response was: QgsWebView - Print - + Skriv ut @@ -50567,131 +51466,131 @@ Response was: Förfrågan innehåller ett format som servern inte tillhandahåller. - + Request contains a CRS not offered by the server for one or more of the Layers in the request. Förfrågan innehåller ett referenskoordinatsystem för ett eller flera lager i anropet, som servern inte tillhandahåller. - + Request contains a SRS not offered by the server for one or more of the Layers in the request. Förfrågan innehåller en SRS för ett eller flera lager i anropet, som servern inte tillhandahåller. - + GetMap request is for a Layer not offered by the server, or GetFeatureInfo request is for a Layer not shown on the map. GetMap-förfrågan är för ett lager som serven inte tillhandahåller, eller GetFeatureInfo-anropet är avsett för ett lager som inte är med på kartan. - + Request is for a Layer in a Style not offered by the server. Förfrågan är för ett lager med en stil som servern inte stödjer. - + GetFeatureInfo request is applied to a Layer which is not declared queryable. GetFeatureInfo-förfrågan ställdes till ett lager som inte är definerat som frågbart. - + GetFeatureInfo request contains invalid X or Y value. GetFeatureInfo-förfrågan innehåller ogiltigt X- eller Y-värde. - + Value of (optional) UpdateSequence parameter in GetCapabilities request is equal to current value of service metadata update sequence number. Värdet på (frivilliga) UpdateSequence-parameter i GetCapabilities-förfrågan är samma som nuvarande värde på 'service metadata update' sekvensnummer. - + Value of (optional) UpdateSequence parameter in GetCapabilities request is greater than current value of service metadata update sequence number. Värdet på (frivilliga) UpdateSequence-parameter i GetCapabilities-förfrågan är större än nuvarande värde på 'service metadata update' sekvensnummer. - + Request does not include a sample dimension value, and the server did not declare a default value for that dimension. Förfrågan innehåller inte ett dimensionsvärde, och servern har inte angett ett standardvärde för dimensionen. - + Request contains an invalid sample dimension value. Förfrågan innehåller ett ogiltigt dimensionsvärde. - + Request is for an optional operation that is not supported by the server. Förfrågan gäller en frivillig operation som servern inte stödjer. - + The WMS vendor also reported: WMS-företaget sa också: - - - - + + + + Property Egenskap - - - - + + + + Value Värde - + WMS Version WMS version - - - + + + Title Titel - + Number of layers and styles don't match Antal lager och stil överensstämmer ej - + Getting tiles. Hämtar mosaik. - + Tile request error (Title:%1; Error:%2; URL: %3) Mosaik-fel (titel:%1; fel:%2; URL:- %3) - + Tile request error (Status:%1; Content-Type:%2; Length:%3; URL: %4) Mosaik-fel (status:%1; typ:%2; längd: %3; URL: %4) - + Tile request failed [error:%1 url:%2] Mosaik-fel (fel:%1; URL:- %2) - - + + Not logging more than 100 request errors. Loggar ej mer än 100 fel. - + Map request error (Status: %1; Reason phrase: %2; URL:%3) Kart-fel (status:%1; orsak:%2; URL: %3) - + Map request error (Title:%1; Error:%2; URL: %3) Kart-fel (titel:%1; fel:%2; URL: %3) @@ -50700,130 +51599,130 @@ Response was: Kart-fel (status:%1; svar:%2; URL: %3) - + Map request failed [error:%1 url:%2] Kart-fel (fel:%1; URL:- %2) - + Redirect loop detected: %1 - + Service Exception - - - + + + Abstract Sammanfattning - + Tile Layer Properties Egenskaper mosaiklager - + Keywords Nyckelord - + Online Resource Online-resurser - + Contact Person Kontaktperson - + Fees Avgifter - + Access Constraints Åtkomstbegränsningar - + Image Formats Bildformat - + Identify Formats Identifieringsformat - + Layer Count Antal lager - + Tile Layer Count Antal mosaiklager - + GetTileUrl GetTileUrl - + Tile templates Mosaik-mall - + FeatureInfo templates FeatureInfo-mall - + WMTS WMTS - + WMS-C WMS-C - + Selected Vald - + Cannot parse getfeatureinfo: %1 - - - - + + + + Yes Ja - - - - + + + + No Nej - + Visibility Synlighet @@ -50838,64 +51737,64 @@ Response was: - + Cannot set CRS - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + WMS WMS - + Number of tile layers must be one - + Tile layer not found - + Tile layer or tile matrix set not found - + image is NULL Bilden är tom - + unexpected image size Oväntad bildstorlek - + Tile request error Mosaik fel - + Status: %1 Reason phrase: %2 Status: %1 @@ -50906,12 +51805,12 @@ Orsak: %2 Returnerad bild är felaktig [%1] - + empty capabilities document Tomt dokument med förmågor - + Could not get WMS capabilities: %1 at line %2 column %3 This is probably due to an incorrect WMS Server URL. Response was: @@ -50924,7 +51823,7 @@ Svaret var: %4 - + Could not get WMS capabilities in the expected format (DTD): no %1 or %2 found. This might be due to an incorrect WMS Server URL. Tag:%3 @@ -50937,7 +51836,7 @@ Svaret var: %4 - + Could not get WMS Service Exception at %1: %2 at line %3 column %4 Response was: @@ -50946,114 +51845,114 @@ Response was: - + Request contains a format not offered by the server. - + Extent for layer %1 not found in capabilities - + Visible Synlig - + Hidden Gömd - + Can Identify Kan identifieras - + Can be Transparent Kan vara transparent - + Can Zoom In Kan zooma in - + Cascade Count Kaskadnummer - + Fixed Width Fast bredd - + Fixed Height Fast höjd - + WGS 84 Bounding Box WGS 84 begränsningsruta - - + + Available in CRS Tillgänglig i referenskoordinatsystem - + Available in style Tilgänglig med stil - + Available Styles Tillgängliga stilar - + Available Tilesets Tillgängliga mosaiker - + Format not supported - + Formatet stödjs inte - + Get feature info request error (Title:%1; Error:%2; URL: %3) - + GML schema is not valid - + GML is not valid - + Map getfeatureinfo error %1: %2 - + Map getfeatureinfo error: %1 [%2] - - + + Name Namn @@ -51062,27 +51961,27 @@ Response was: Stilar - + CRS Referenskoordinatsystem - + Bounding Box Begränsningsruta - + Hits Träffar - + Misses Missar - + Errors Fel @@ -51095,25 +51994,25 @@ Response was: Lager kan inte utfrågas. - + identify request redirected. - - - + + + Dom Exception DOM fel - + Getting map via WMS. - - + + %n tile requests in background tile request count @@ -51122,8 +52021,8 @@ Response was: - - + + , %n cache hits tile cache hits @@ -51132,8 +52031,8 @@ Response was: - - + + , %n cache misses. tile cache missed @@ -51142,8 +52041,8 @@ Response was: - - + + , %n errors. errors @@ -51152,49 +52051,49 @@ Response was: - + Returned image is flawed [Content-Type:%1; URL: %2] - + Returned image is flawed [Content-Type:%1; URL:%2] - + Map request error (Status: %1; Response: %2; Content-Type: %3; URL:%4) - + Tried URL: %1 Försökte med URL: %1 - + Capabilities request redirected. - + empty of capabilities: %1 - + Download of capabilities failed: %1 - + %1 of %2 bytes of capabilities downloaded. - + %1 of %2 bytes of map downloaded. @@ -51211,17 +52110,17 @@ Försökte med URL: %1 - + (No error code was reported) (Ingen felkod) - + (Unknown error code) (Okänd felkod) - + (and %n more) crs @@ -51230,56 +52129,56 @@ Försökte med URL: %1 - - + + Server Properties - - + + Selected Layers - - + + Other Layers - + Tileset Properties - + Cache Stats - + GetCapabilitiesUrl - + GetMapUrl - - + + &nbsp;<font color="red">(advertised but ignored)</font> - + GetFeatureInfoUrl GetFeatureInfoUrl - + Cache stats @@ -51289,7 +52188,7 @@ Försökte med URL: %1 Dialog - Dialog + Dialog @@ -51300,17 +52199,17 @@ Försökte med URL: %1 Value - Värde + Värde Abstract - Sammanfattning + Sammanfattning Default - Standard + Standard @@ -51318,22 +52217,22 @@ Försökte med URL: %1 Dialog - Dialog + Dialog Raster layer: - + Rasterlager: Polygon layer containing the zones: - + Polygonlager innehållande zonerna: Output column prefix: - + Resultatkolumnens prefix: @@ -51353,7 +52252,7 @@ Försökte med URL: %1 Abort... - Avbryt... + Avbryt... @@ -51426,17 +52325,17 @@ Försökte med URL: %1 Export feature - + Exportera objekt Select destination layer - + Välj destinationslager New temporary layer - + Nytt temporärt lager @@ -51444,77 +52343,77 @@ Försökte med URL: %1 Transportation layer - + Transportlager Layer - Lager + Lager Direction field - + Riktningsfält Reverse direction - + Motsatt riktning Value for forward direction - + Värde för riktning framåt Value for reverse direction - + Värde för riktning bakåt Value two-way direction - + Värde för riktning åt båda håll Speed field - + Hastighetsfält Default settings - + Standardinställningar Direction - Riktning + Riktning Two-way direction - + Riktning åt båda håll Forward direction - + Riktning framåt Cost - + Kostnad Line lengths - + Linjelängder Speed - Hastighet + Hastighet Units @@ -51523,18 +52422,18 @@ Försökte med URL: %1 km/h - + km/h m/s - + m/s Always use default - + Använd alltid standard @@ -51707,26 +52606,30 @@ Försökte med URL: %1 SEXTANTE Analysis - + Analyser &SEXTANTE toolbox - + &SEXTANTE verktygslåda &SEXTANTE modeler - + &SEXTANTE modellerare &SEXTANTE history and log - + &SEXTANTE historik och logg &SEXTANTE options and configuration - + &SEXTANTE inställningar och konfiguration &SEXTANTE results viewer + &SEXTANTE resultatvisare + + + &SEXTANTE commander @@ -51760,12 +52663,12 @@ Försökte med URL: %1 Geometry column - Geometrikolumn + Geometrikolumn Sql - Sql + Sql @@ -51789,12 +52692,12 @@ Försökte med URL: %1 Test connection - Testa anslutning + Testa anslutning Connection to %1 was successful - Uppkoplingen till %1 lyckades + Uppkoplingen till %1 lyckades @@ -52278,27 +53181,97 @@ Description: %3 SettingsDialogPythonConsole - + + Console + + + + + Font Typsnitt - + + Size Storlek - - API file + + + Autocompletion + + + + + + Autocompletion enabled + + + + + + Threshold + + + + + + Get autocompletion from current document + + + + + + from Document + + + + + + Get autocompletion from installed APIs + + + + + + from API files + + + + + + Get autocompletion from current document and installed APIs + + + + + + from Doc and API + + + + + Editor + + + + + Auto-save script before running + + + + + API - Browse - Bläddra + Bläddra - + Using preloaded API file @@ -52312,8 +53285,8 @@ Description: %3 - Click here to configure -additional algorithm providers + Click here to learn more +about SEXTANTE @@ -52691,7 +53664,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 Border - + Kant @@ -52702,6 +53675,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 + Millimeter Millimeter @@ -52709,6 +53683,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 + Map unit Kartenhet @@ -52727,6 +53702,11 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 Data defined properties... + + + Offset X,Y + Offset X,Y + Rotation @@ -53055,7 +54035,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 Border - + Kant @@ -53164,7 +54144,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 Border - + Kant Change @@ -53266,7 +54246,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 Border - + Kant @@ -53300,7 +54280,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 ° - + ° @@ -53366,7 +54346,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 Border - + Kant @@ -53569,7 +54549,7 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 - + Select automatic fix @@ -53579,83 +54559,83 @@ Vill du lägga till det nya lagret till innehållsförteckningen? {1 - - + + No errors were found - + Invalid first layer - - + + + - - - + + Topology plugin - + Invalid first geometry - - + + Topology test - - + + Feature not found in the layer. The layer has probably changed. Run topology check again. - + Invalid second layer - + Invalid second geometry - + Invalid conflict - - + + %1 errors were found - + Topology fix error - + Fixing failed! - + Layer %1 not found in registry. - + Abort Avbryt diff --git a/python/console/console_editor.py b/python/console/console_editor.py index 0aecc9406f5d..2a2314c9fe98 100644 --- a/python/console/console_editor.py +++ b/python/console/console_editor.py @@ -82,9 +82,6 @@ def __init__(self, parent=None): # Enable non-ascii chars for editor self.setUtf8(True) - #self.insertInitText() - self.setLexers() - # Set the default font font = QFont() font.setFamily('Courier') @@ -102,7 +99,7 @@ def __init__(self, parent=None): self.setMarginsBackgroundColor(QColor("#f9f9f9")) self.setCaretLineVisible(True) self.setCaretLineBackgroundColor(QColor("#fcf3ed")) - + # Clickable margin 1 for showing markers # self.setMarginSensitivity(1, True) # self.connect(self, @@ -172,6 +169,7 @@ def __init__(self, parent=None): self.uncommentScut.activated.connect(self.parent.pc.uncommentCode) def settingsEditor(self): + # Set Python lexer self.setLexers() threshold = self.settings.value("pythonConsole/autoCompThresholdEditor", 2).toInt()[0] radioButtonSource = self.settings.value("pythonConsole/autoCompleteSourceEditor", 'fromAPI').toString() @@ -209,6 +207,9 @@ def setLexers(self): from qgis.core import QgsApplication self.lexer = QsciLexerPython() + self.lexer.setIndentationWarning(QsciLexerPython.Inconsistent) + self.lexer.setFoldComments(True) + self.lexer.setFoldQuotes(True) loadFont = self.settings.value("pythonConsole/fontfamilytextEditor", "Monospace").toString() fontSize = self.settings.value("pythonConsole/fontsizeEditor", 10).toInt()[0] @@ -257,6 +258,7 @@ def get_end_pos(self): def contextMenuEvent(self, e): menu = QMenu(self) iconRun = QgsApplication.getThemeIcon("console/iconRunConsole.png") + iconRunScript = QgsApplication.getThemeIcon("console/iconRunScriptConsole.png") iconCodePad = QgsApplication.getThemeIcon("console/iconCodepadConsole.png") iconNewEditor = QgsApplication.getThemeIcon("console/iconTabEditorConsole.png") iconCommentEditor = QgsApplication.getThemeIcon("console/iconCommentEditorConsole.png") @@ -274,7 +276,7 @@ def contextMenuEvent(self, e): runSelected = menu.addAction(iconRun, "Enter selected", self.runSelectedCode, 'Ctrl+E') - runScript = menu.addAction(iconRun, + runScript = menu.addAction(iconRunScript, "Run Script", self.runScriptCode, 'Shift+Ctrl+E') menu.addSeparator() @@ -343,18 +345,13 @@ def objectListEditor(self): else: listObj.show() self.parent.pc.objectListButton.setChecked(True) - + def codepad(self): import urllib2, urllib listText = self.selectedText().split('\n') getCmd = [] for strLine in listText: - if strLine != "": - #if s[0:3] in (">>>", "..."): - # filter for special command (_save,_clear) and comment - if strLine[4] != "_" and strLine[:2] != "##": - strLine.replace(">>> ", "").replace("... ", "") - getCmd.append(unicode(strLine)) + getCmd.append(unicode(strLine)) pasteText= u"\n".join(getCmd) url = 'http://codepad.org' values = {'lang' : 'Python', @@ -387,32 +384,24 @@ def commentEditorCode(self, commentCheck): if self.hasSelectedText(): startLine, _, endLine, _ = self.getSelection() for line in range(startLine, endLine + 1): - selCmd = self.text(line) - self.setSelection(line, 0, line, selCmd.length()) - self.removeSelectedText() if commentCheck: - self.insert('#' + selCmd) - self.setCursorPosition(endLine, selCmd.length()) + self.insertAt('#', line, 0) else: - if selCmd.startsWith('#'): - self.insert(selCmd[1:]) - else: - self.insert(selCmd) - self.setCursorPosition(endLine, self.text(line).length() - 1) + if not self.text(line).trimmed().startsWith('#'): + continue + self.setSelection(line, self.indentation(line), + line, self.indentation(line) + 1) + self.removeSelectedText() else: line, pos = self.getCursorPosition() - selCmd = self.text(line) - self.setSelection(line, 0, line, selCmd.length()) - self.removeSelectedText() if commentCheck: - self.insert('#' + selCmd) - self.setCursorPosition(line, selCmd.length()) + self.insertAt('#', line, 0) else: - if selCmd.startsWith('#'): - self.insert(selCmd[1:]) - else: - self.insert(selCmd) - self.setCursorPosition(line, self.text(line).length() - 1) + if not self.text(line).trimmed().startsWith('#'): + return + self.setSelection(line, self.indentation(line), + line, self.indentation(line) + 1) + self.removeSelectedText() self.endUndoAction() def createTempFile(self): @@ -430,7 +419,13 @@ def _runSubProcess(self, filename, tmp=False): if dir not in sys.path: sys.path.append(dir) try: - p = subprocess.Popen(['python', str(filename)], shell=False, stdin=subprocess.PIPE, stderr=subprocess.PIPE, stdout=subprocess.PIPE) + ## set creationflags for runnning command without shell window + if sys.platform.startswith('win'): + p = subprocess.Popen(['python', str(filename)], shell=False, stdin=subprocess.PIPE, + stderr=subprocess.PIPE, stdout=subprocess.PIPE, creationflags=0x08000000) + else: + p = subprocess.Popen(['python', str(filename)], shell=False, stdin=subprocess.PIPE, + stderr=subprocess.PIPE, stdout=subprocess.PIPE) out, _traceback = p.communicate() ## Fix interrupted system call on OSX diff --git a/python/console/console_sci.py b/python/console/console_sci.py index 55cfe0978e1a..367279f4753e 100644 --- a/python/console/console_sci.py +++ b/python/console/console_sci.py @@ -73,9 +73,6 @@ def __init__(self, parent=None): # Current line visible with special background color self.setCaretWidth(2) - # Set Python lexer - self.setLexers() - self.settingsShell() # Don't want to see the horizontal scrollbar at all @@ -110,6 +107,7 @@ def __init__(self, parent=None): self.completion_list_selected) def settingsShell(self): + # Set Python lexer self.setLexers() threshold = self.settings.value("pythonConsole/autoCompThreshold", 2).toInt()[0] self.setAutoCompletionThreshold(threshold) diff --git a/python/core/composer/qgscomposeritem.sip b/python/core/composer/qgscomposeritem.sip index 2b15be0d75ad..67d2f25677b5 100644 --- a/python/core/composer/qgscomposeritem.sip +++ b/python/core/composer/qgscomposeritem.sip @@ -305,6 +305,16 @@ class QgsComposerItem: QObject, QGraphicsRectItem @note there is not setter since one can't manually set the id*/ QString uuid() const; + /** Gets the background color for this item + * @note introduced in 2.0 + */ + const QColor backgroundColor() const; + + /** Sets the background color for this item + * @note introduced in 2.0 + */ + void setBackgroundColor( const QColor& backgroundColor ); + /* Returns the current blending mode for the composer item @note added in version 1.9*/ const QPainter::CompositionMode blendMode() const; diff --git a/python/core/composer/qgscomposermap.sip b/python/core/composer/qgscomposermap.sip index 7cf67552c2b0..b57ed7a7f909 100644 --- a/python/core/composer/qgscomposermap.sip +++ b/python/core/composer/qgscomposermap.sip @@ -278,6 +278,18 @@ class QgsComposerMap : QgsComposerItem void setOverviewFrameMapSymbol( QgsFillSymbolV2* symbol /Transfer/ ); QgsFillSymbolV2* overviewFrameMapSymbol(); + /* Returns the blending mode for the overview frame + @note added in version 1.9*/ + const QPainter::CompositionMode overviewBlendMode() const; + /* Sets the blending mode for the overview frame + @note added in version 1.9*/ + void setOverviewBlendMode( const QPainter::CompositionMode blendMode ); + + /**Sets flag if overview frame should be inverted + @note this function was added in version 1.9*/ + void setOverviewInverted( bool inverted ); + bool overviewInverted() const; + /**Sets mId to a number not yet used in the composition. mId is kept if it is not in use. Usually, this function is called before adding the composer map to the composition*/ void assignFreeId(); diff --git a/python/core/qgsmaprenderer.sip b/python/core/qgsmaprenderer.sip index 563d8f33a250..91079042ded0 100644 --- a/python/core/qgsmaprenderer.sip +++ b/python/core/qgsmaprenderer.sip @@ -152,19 +152,44 @@ class QgsMapRenderer : QObject QSize outputSize(); QSizeF outputSizeF(); - //! transform extent in layer's CRS to extent in output CRS + /** + * @brief transform bounding box from layer's CRS to output CRS + * @see layerToMapCoordinates( QgsMapLayer* theLayer, QgsRectangle rect ) if you want to transform a rectangle + * @return a bounding box (aligned rectangle) containing the transformed extent + */ QgsRectangle layerExtentToOutputExtent( QgsMapLayer* theLayer, QgsRectangle extent ); - //! transform extent in output CRS to extent in layer's CRS + /** + * @brief transform bounding box from output CRS to layer's CRS + * @see mapToLayerCoordinates( QgsMapLayer* theLayer,QgsRectangle rect ) if you want to transform a rectangle + * @return a bounding box (aligned rectangle) containing the transformed extent + */ QgsRectangle outputExtentToLayerExtent( QgsMapLayer* theLayer, QgsRectangle extent ); - //! transform coordinates from layer's CRS to output CRS + /** + * @brief transform point coordinates from layer's CRS to output CRS + * @return the transformed point + */ QgsPoint layerToMapCoordinates( QgsMapLayer* theLayer, QgsPoint point ); - //! transform coordinates from output CRS to layer's CRS + /** + * @brief transform rectangle from layer's CRS to output CRS + * @see layerExtentToOutputExtent() if you want to transform a bounding box + * @return the transformed rectangle + */ + QgsRectangle layerToMapCoordinates( QgsMapLayer* theLayer, QgsRectangle rect ); + + /** + * @brief transform point coordinates from output CRS to layer's CRS + * @return the transformed point + */ QgsPoint mapToLayerCoordinates( QgsMapLayer* theLayer, QgsPoint point ); - //! transform rect's coordinates from output CRS to layer's CRS + /** + * @brief transform rectangle from output CRS to layer's CRS + * @see outputExtentToLayerExtent() if you want to transform a bounding box + * @return the transformed rectangle + */ QgsRectangle mapToLayerCoordinates( QgsMapLayer* theLayer, QgsRectangle rect ); //! sets whether to use projections for this layer set diff --git a/python/core/raster/qgsrasterbandstats.sip b/python/core/raster/qgsrasterbandstats.sip index 64c03085e8b9..dc01bbd23932 100644 --- a/python/core/raster/qgsrasterbandstats.sip +++ b/python/core/raster/qgsrasterbandstats.sip @@ -27,9 +27,6 @@ class QgsRasterBandStats /*! Compares region, size etc. not collected statistics */ bool contains( const QgsRasterBandStats &s ) const; - /** \brief The name of the band that these stats belong to. */ - QString bandName; - /** \brief The gdal band number (starts at 1)*/ int bandNumber; diff --git a/python/core/raster/qgsrasterdataprovider.sip b/python/core/raster/qgsrasterdataprovider.sip index e1731459124a..e8508a6e2c30 100644 --- a/python/core/raster/qgsrasterdataprovider.sip +++ b/python/core/raster/qgsrasterdataprovider.sip @@ -82,7 +82,7 @@ class QgsRasterDataProvider : QgsDataProvider, QgsRasterInterface virtual void setUserNoDataValue( int bandNo, QgsRasterRangeList noData ); /** Get list of user no data value ranges */ - virtual QgsRasterRangeList userNoDataValue( int bandNo ) const; + virtual QgsRasterRangeList userNoDataValues( int bandNo ) const; virtual QList colorTable( int bandNo ) const; @@ -181,9 +181,6 @@ class QgsRasterDataProvider : QgsDataProvider, QgsRasterInterface */ virtual bool setNoDataValue( int bandNo, double noDataValue ); - /**Returns the formats supported by create()*/ - virtual QStringList createFormats() const; - /** Remove dataset*/ virtual bool remove(); diff --git a/python/core/raster/qgsrasteriterator.sip b/python/core/raster/qgsrasteriterator.sip index 20e11d0c41c0..d23b361ad365 100644 --- a/python/core/raster/qgsrasteriterator.sip +++ b/python/core/raster/qgsrasteriterator.sip @@ -4,16 +4,6 @@ class QgsRasterIterator #include %End public: - //Stores information about reading of a raster band. Columns and rows are in unsampled coordinates - struct RasterPartInfo - { - int currentCol; - int currentRow; - int nCols; - int nRows; - QgsRasterBlock *block; - QgsRasterProjector* prj; //raster projector (or 0 if no reprojection is done) - }; QgsRasterIterator( QgsRasterInterface* input ); ~QgsRasterIterator(); diff --git a/python/core/raster/qgsrasterlayer.sip b/python/core/raster/qgsrasterlayer.sip index 484050f6861b..679488460a47 100644 --- a/python/core/raster/qgsrasterlayer.sip +++ b/python/core/raster/qgsrasterlayer.sip @@ -190,7 +190,8 @@ class QgsRasterLayer : QgsMapLayer QString providerType() const; /** \brief Returns the number of raster units per each raster pixel. In a world file, this is normally the first row (without the sign) */ - double rasterUnitsPerPixel(); + double rasterUnitsPerPixelX(); + double rasterUnitsPerPixelY(); /** \brief Mutator for contrast enhancement algorithm * @param theAlgorithm Contrast enhancement algorithm @@ -200,7 +201,7 @@ class QgsRasterLayer : QgsMapLayer * @param theGenerateLookupTableFlag Generate llokup table. */ - void setContrastEnhancementAlgorithm( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, + void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, QgsRaster::ContrastEnhancementLimits theLimits = QgsRaster::ContrastEnhancementMinMax, QgsRectangle theExtent = QgsRectangle(), int theSampleSize = QgsRasterLayer::SAMPLE_SIZE, diff --git a/python/core/raster/qgsrasternuller.sip b/python/core/raster/qgsrasternuller.sip index a8c81ab2acc3..a0abce463b88 100644 --- a/python/core/raster/qgsrasternuller.sip +++ b/python/core/raster/qgsrasternuller.sip @@ -21,10 +21,10 @@ class QgsRasterNuller : QgsRasterInterface QgsRasterBlock *block( int bandNo, const QgsRectangle &extent, int width, int height ) / Factory /; - void setNoData( QList noData ); + void setNoData( int bandNo, QgsRasterRangeList noData ); - QList noData() const; + QgsRasterRangeList noData( int bandNo ) const; /** \brief Set output no data value. */ - void setOutputNoData( double noData ); + void setOutputNoDataValue( int bandNo, double noData ); }; diff --git a/python/core/raster/qgsrasterprojector.sip b/python/core/raster/qgsrasterprojector.sip index 8ed77acc2067..658be4538124 100644 --- a/python/core/raster/qgsrasterprojector.sip +++ b/python/core/raster/qgsrasterprojector.sip @@ -50,21 +50,6 @@ class QgsRasterProjector : QgsRasterInterface /** \brief set maximum source resolution */ void setMaxSrcRes( double theMaxSrcXRes, double theMaxSrcYRes ); - /** get source extent */ - QgsRectangle srcExtent(); - - /** get/set source width/height */ - int srcRows(); - int srcCols(); - void setSrcRows( int theRows ); - void setSrcCols( int theCols ); - - /** \brief Get source row and column indexes for current source extent and resolution */ - void srcRowCol( int theDestRow, int theDestCol, int *theSrcRow, int *theSrcCol ); - - int dstRows() const; - int dstCols() const; - QgsRasterBlock *block( int bandNo, const QgsRectangle & extent, int width, int height ) / Factory /; }; diff --git a/python/core/raster/qgsrasterviewport.sip b/python/core/raster/qgsrasterviewport.sip index 4471f8842c58..f5be37109664 100644 --- a/python/core/raster/qgsrasterviewport.sip +++ b/python/core/raster/qgsrasterviewport.sip @@ -4,28 +4,27 @@ struct QgsRasterViewPort %TypeHeaderCode #include %End + /** \brief Coordinate (in output device coordinate system) of top left corner + * of the part of the raster that is to be rendered.*/ + QgsPoint mTopLeftPoint; + /** \brief Coordinate (in output device coordinate system) of bottom right corner + * of the part of the raster that is to be rendered.*/ + QgsPoint mBottomRightPoint; - // NOT IN MAP SPACE BUT DEVICE SPACE - /** \brief Coordinate (in geographic coordinate system) of top left corner of the part of the raster that - * is to be rendered.*/ - QgsPoint topLeftPoint; - /** \brief Coordinate (in geographic coordinate system) of bottom right corner of the part of the raster that - * is to be rendered.*/ - QgsPoint bottomRightPoint; - /** \brief Distance in map units from left edge to right edge for the part of the raster that - * is to be rendered.*/ + /** \brief Width, number of columns to be rendered */ + int mWidth; + /** \brief Distance in map units from bottom edge to top edge for the part of + * the raster that is to be rendered.*/ + /** \brief Height, number of rows to be rendered */ + int mHeight; - int drawableAreaXDim; - /** \brief Distance in map units from bottom edge to top edge for the part of the raster that - * is to be rendered.*/ - int drawableAreaYDim; - - // intersection of current map extent and layer extent + /** \brief Intersection of current map extent and layer extent */ QgsRectangle mDrawnExtent; - // Source coordinate system + /** \brief Source coordinate system */ QgsCoordinateReferenceSystem mSrcCRS; - // Target coordinate system + /** \brief Target coordinate system */ QgsCoordinateReferenceSystem mDestCRS; + }; diff --git a/python/gui/qgsrasterlayersaveasdialog.sip b/python/gui/qgsrasterlayersaveasdialog.sip index 1ad1fa27630f..f82ed26d1523 100644 --- a/python/gui/qgsrasterlayersaveasdialog.sip +++ b/python/gui/qgsrasterlayersaveasdialog.sip @@ -46,7 +46,7 @@ class QgsRasterLayerSaveAsDialog : QDialog QgsCoordinateReferenceSystem outputCrs(); QStringList createOptions() const; QgsRectangle outputRectangle() const; - QList noData() const; + QgsRasterRangeList noData() const; QList< int > pyramidsList() const; QgsRaster::RasterBuildPyramids buildPyramidsFlag() const; diff --git a/python/plugins/sextante/gui/AutofillDialog.py b/python/plugins/sextante/gui/AutofillDialog.py index 2925ffb95c73..4b44eef1b1d1 100644 --- a/python/plugins/sextante/gui/AutofillDialog.py +++ b/python/plugins/sextante/gui/AutofillDialog.py @@ -78,6 +78,6 @@ def okPressed(self): self.close() def cancelPressed(self): - self.mode == None + self.mode = None self.param = None self.close() \ No newline at end of file diff --git a/python/plugins/sextante/modeler/ModelerDialog.py b/python/plugins/sextante/modeler/ModelerDialog.py index d4e9bb9778b3..905039af137b 100644 --- a/python/plugins/sextante/modeler/ModelerDialog.py +++ b/python/plugins/sextante/modeler/ModelerDialog.py @@ -16,6 +16,7 @@ * * *************************************************************************** """ +import sys __author__ = 'Victor Olaya' __date__ = 'August 2012' @@ -179,8 +180,20 @@ def saveModel(self, saveAs): self.alg.descriptionFile = filename if filename: text = self.alg.serialize() - fout = codecs.open(filename, "w", encoding='utf-8') - #fout = open(filename, "w") + try: + fout = codecs.open(filename, "w", encoding='utf-8') + except: + if saveAs: + QMessageBox.warning(self, + self.tr("I/O error"), + self.tr("Unable to save edits. Reason:\n %1").arg(unicode(sys.exc_info()[1])) + ) + else: + QMessageBox.warning(self, + self.tr("Can't save model"), + self.tr("This model can't be saved in its original location\n(probably you do not have permission to do it).\nPlease, use the 'Save as...' option.") + ) + return fout.write(text) fout.close() self.update = True diff --git a/src/app/composer/qgscomposermapwidget.cpp b/src/app/composer/qgscomposermapwidget.cpp index 2daa8ad4852c..2c4ec0b824fd 100644 --- a/src/app/composer/qgscomposermapwidget.cpp +++ b/src/app/composer/qgscomposermapwidget.cpp @@ -299,6 +299,10 @@ void QgsComposerMapWidget::updateGuiElements() //overview frame int overviewMapFrameId = mComposerMap->overviewFrameMapId(); mOverviewFrameMapComboBox->setCurrentIndex( mOverviewFrameMapComboBox->findData( overviewMapFrameId ) ); + //overview frame blending mode + mOverviewBlendModeComboBox->setBlendMode( mComposerMap->overviewBlendMode() ); + //overview inverted + mOverviewInvertCheckbox->setChecked( mComposerMap->overviewInverted() ); //grid if ( mComposerMap->gridEnabled() ) @@ -437,6 +441,8 @@ void QgsComposerMapWidget::blockAllSignals( bool b ) mFrameWidthSpinBox->blockSignals( b ); mOverviewFrameMapComboBox->blockSignals( b ); mOverviewFrameStyleButton->blockSignals( b ); + mOverviewBlendModeComboBox->blockSignals( b ); + mOverviewInvertCheckbox->blockSignals( b ); } void QgsComposerMapWidget::on_mUpdatePreviewButton_clicked() @@ -559,6 +565,23 @@ void QgsComposerMapWidget::on_mOverviewFrameStyleButton_clicked() } } +void QgsComposerMapWidget::on_mOverviewBlendModeComboBox_currentIndexChanged( int index ) +{ + Q_UNUSED( index ); + if ( mComposerMap ) + { + mComposerMap->setOverviewBlendMode( mOverviewBlendModeComboBox->blendMode() ); + } + +} +void QgsComposerMapWidget::on_mOverviewInvertCheckbox_toggled( bool state ) +{ + if ( mComposerMap ) + { + mComposerMap->setOverviewInverted( state ); + } +} + void QgsComposerMapWidget::on_mGridCheckBox_toggled( bool state ) { if ( !mComposerMap ) diff --git a/src/app/composer/qgscomposermapwidget.h b/src/app/composer/qgscomposermapwidget.h index 07dcc968cec2..11ddd74128fb 100644 --- a/src/app/composer/qgscomposermapwidget.h +++ b/src/app/composer/qgscomposermapwidget.h @@ -44,6 +44,8 @@ class QgsComposerMapWidget: public QWidget, private Ui::QgsComposerMapWidgetBase void on_mDrawCanvasItemsCheckBox_stateChanged( int state ); void on_mOverviewFrameMapComboBox_currentIndexChanged( const QString& text ); void on_mOverviewFrameStyleButton_clicked(); + void on_mOverviewBlendModeComboBox_currentIndexChanged( int index ); + void on_mOverviewInvertCheckbox_toggled( bool state ); void on_mXMinLineEdit_editingFinished(); void on_mXMaxLineEdit_editingFinished(); diff --git a/src/app/legend/qgslegend.cpp b/src/app/legend/qgslegend.cpp index 81d08269af28..9e9bc13967a0 100644 --- a/src/app/legend/qgslegend.cpp +++ b/src/app/legend/qgslegend.cpp @@ -2716,7 +2716,7 @@ void QgsLegend::legendLayerZoomNative() QgsRasterLayer *layer = qobject_cast( currentLayer->layer() ); if ( layer ) { - QgsDebugMsg( "Raster units per pixel : " + QString::number( layer->rasterUnitsPerPixel() ) ); + QgsDebugMsg( "Raster units per pixel : " + QString::number( layer->rasterUnitsPerPixelX() ) ); QgsDebugMsg( "MapUnitsPerPixel before : " + QString::number( mMapCanvas->mapUnitsPerPixel() ) ); layer->setCacheImage( NULL ); @@ -2732,11 +2732,11 @@ void QgsLegend::legendLayerZoomNative() p2 = ct.transform( p2 ); double width = sqrt( p1.sqrDist( p2 ) ); // width of reprojected pixel // This is not perfect of course, we use the resolution in just one direction - mMapCanvas->zoomByFactor( qAbs( layer->rasterUnitsPerPixel() / width ) ); + mMapCanvas->zoomByFactor( qAbs( layer->rasterUnitsPerPixelX() / width ) ); } else { - mMapCanvas->zoomByFactor( qAbs( layer->rasterUnitsPerPixel() / mMapCanvas->mapUnitsPerPixel() ) ); + mMapCanvas->zoomByFactor( qAbs( layer->rasterUnitsPerPixelX() / mMapCanvas->mapUnitsPerPixel() ) ); } mMapCanvas->refresh(); QgsDebugMsg( "MapUnitsPerPixel after : " + QString::number( mMapCanvas->mapUnitsPerPixel() ) ); @@ -2757,7 +2757,7 @@ void QgsLegend::legendLayerStretchUsingCurrentExtent() QgsRectangle myRectangle; myRectangle = mMapCanvas->mapRenderer()->outputExtentToLayerExtent( layer, mMapCanvas->extent() ); - layer->setContrastEnhancementAlgorithm( contrastEnhancementAlgorithm, QgsRaster::ContrastEnhancementMinMax, myRectangle ); + layer->setContrastEnhancement( contrastEnhancementAlgorithm, QgsRaster::ContrastEnhancementMinMax, myRectangle ); layer->setCacheImage( NULL ); refreshLayerSymbology( layer->id() ); diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index c438da5e676e..fa34287eb91c 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -4295,7 +4295,10 @@ void QgisApp::saveAsRasterFile() } QgsRasterNuller *nuller = new QgsRasterNuller(); - nuller->setNoData( d.noData() ); + for ( int band = 1; band <= rasterLayer->dataProvider()->bandCount(); band ++ ) + { + nuller->setNoData( band, d.noData() ); + } if ( !pipe->insert( 1, nuller ) ) { QgsDebugMsg( "Cannot set pipe nuller" ); @@ -6488,7 +6491,7 @@ void QgisApp::histogramStretch( bool visibleAreaOnly, QgsRaster::ContrastEnhance QgsRectangle myRectangle; if ( visibleAreaOnly ) myRectangle = mMapCanvas->mapRenderer()->outputExtentToLayerExtent( myRasterLayer, mMapCanvas->extent() ); - myRasterLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, theLimits, myRectangle ); + myRasterLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, theLimits, myRectangle ); myRasterLayer->setCacheImage( NULL ); mMapCanvas->refresh(); diff --git a/src/app/qgsdiagramproperties.cpp b/src/app/qgsdiagramproperties.cpp index 389cbea5bc3a..17382a25d5af 100644 --- a/src/app/qgsdiagramproperties.cpp +++ b/src/app/qgsdiagramproperties.cpp @@ -325,21 +325,29 @@ void QgsDiagramProperties::on_mDiagramTypeComboBox_currentIndexChanged( int inde mBarWidthLabel->show(); mBarWidthSpinBox->show(); mOrientationFrame->show(); + mFixedSizeCheckBox->setChecked( false ); + mFixedSizeCheckBox->setVisible( false ); + mDiagramSizeSpinBox->setVisible( false ); + mLinearlyScalingLabel->setText( tr( "Bar length: Scale linearly, such as the following value matches the specified size." ) ); } else { mBarWidthLabel->hide(); mBarWidthSpinBox->hide(); mOrientationFrame->hide(); + mLinearlyScalingLabel->setText( tr( "Scale linearly between 0 and the following attribute value / diagram size:" ) ); + mAttributeBasedScalingOptions->show(); + mFixedSizeCheckBox->setVisible( true ); + mDiagramSizeSpinBox->setVisible( true ); } if ( DIAGRAM_NAME_HISTOGRAM == diagramType || DIAGRAM_NAME_TEXT == diagramType ) { - mDiagramPropertiesToolBox->setItemEnabled( 3, true ); + mDiagramPropertiesTabWidget->setTabEnabled( 3, true ); } else { - mDiagramPropertiesToolBox->setItemEnabled( 3, false ); + mDiagramPropertiesTabWidget->setTabEnabled( 3, false ); } if ( DIAGRAM_NAME_TEXT == diagramType || DIAGRAM_NAME_PIE == diagramType ) @@ -465,23 +473,33 @@ void QgsDiagramProperties::apply() } else { + QgsDiagram* diagram = 0; + int index = mDiagramTypeComboBox->currentIndex(); + QString diagramType = mDiagramTypeComboBox->itemData( index ).toString(); + if ( 0 == mDiagramAttributesTreeWidget->topLevelItemCount() ) { QMessageBox::warning( this, tr( "No attributes added." ), tr( "You did not add any attributes to this diagram layer. Please specify the attributes to visualize on the diagrams or disable diagrams." ), QMessageBox::Ok ); } - bool scaleAttributeValueIsNumeric; - mValueLineEdit->text().toDouble( &scaleAttributeValueIsNumeric ); - if ( !mFixedSizeCheckBox->isChecked() && !scaleAttributeValueIsNumeric ) + bool scaleAttributeValueOk = false; + if ( diagramType == DIAGRAM_NAME_HISTOGRAM ) + { + // We don't need a scale attribute, the field is used as a multiplicator + scaleAttributeValueOk = true; + } + else + { + // Check if a (usable) scale attribute value is inserted + mValueLineEdit->text().toDouble( &scaleAttributeValueOk ); + } + if ( !mFixedSizeCheckBox->isChecked() && !scaleAttributeValueOk ) { QMessageBox::warning( this, tr( "No attribute value specified" ), tr( "You did not specify a maximum value for the diagram size. Please specify the attribute and a reference value as a base for scaling in the Tab Diagram / Size." ), QMessageBox::Ok ); } - QgsDiagram* diagram = 0; - int index = mDiagramTypeComboBox->currentIndex(); - QString diagramType = mDiagramTypeComboBox->itemData( index ).toString(); if ( diagramType == DIAGRAM_NAME_TEXT ) { diagram = new QgsTextDiagram(); diff --git a/src/app/qgsmaptoolmovefeature.cpp b/src/app/qgsmaptoolmovefeature.cpp index fc89b99aee58..53b911c5045c 100644 --- a/src/app/qgsmaptoolmovefeature.cpp +++ b/src/app/qgsmaptoolmovefeature.cpp @@ -112,14 +112,14 @@ void QgsMapToolMoveFeature::canvasPressEvent( QMouseEvent * e ) mMovedFeatures.clear(); mMovedFeatures << cf.id(); //todo: take the closest feature, not the first one... - mRubberBand = createRubberBand(); + mRubberBand = createRubberBand( vlayer->geometryType() ); mRubberBand->setToGeometry( cf.geometry(), vlayer ); } else { mMovedFeatures = vlayer->selectedFeaturesIds(); - mRubberBand = createRubberBand(); + mRubberBand = createRubberBand( vlayer->geometryType() ); for ( int i = 0; i < vlayer->selectedFeatureCount(); i++ ) { mRubberBand->addGeometry( vlayer->selectedFeatures()[i].geometry(), vlayer ); diff --git a/src/app/qgsmaptoolrotatefeature.cpp b/src/app/qgsmaptoolrotatefeature.cpp index fb42202bfbac..35ac23ba62eb 100644 --- a/src/app/qgsmaptoolrotatefeature.cpp +++ b/src/app/qgsmaptoolrotatefeature.cpp @@ -155,14 +155,14 @@ void QgsMapToolRotateFeature::canvasPressEvent( QMouseEvent * e ) mRotatedFeatures.clear(); mRotatedFeatures << cf.id(); //todo: take the closest feature, not the first one... - mRubberBand = createRubberBand(); + mRubberBand = createRubberBand( vlayer->geometryType() ); mRubberBand->setToGeometry( cf.geometry(), vlayer ); } else { mRotatedFeatures = vlayer->selectedFeaturesIds(); - mRubberBand = createRubberBand(); + mRubberBand = createRubberBand( vlayer->geometryType() ); for ( int i = 0; i < vlayer->selectedFeatureCount(); i++ ) { mRubberBand->addGeometry( vlayer->selectedFeatures()[i].geometry(), vlayer ); diff --git a/src/app/qgsrasterlayerproperties.cpp b/src/app/qgsrasterlayerproperties.cpp index d1123b76a31c..15dd64a16ffb 100644 --- a/src/app/qgsrasterlayerproperties.cpp +++ b/src/app/qgsrasterlayerproperties.cpp @@ -645,7 +645,7 @@ void QgsRasterLayerProperties::sync() mSrcNoDataValueCheckBox->setEnabled( enableSrcNoData ); lblSrcNoDataValue->setEnabled( enableSrcNoData ); - QgsRasterRangeList noDataRangeList = mRasterLayer->dataProvider()->userNoDataValue( 1 ); + QgsRasterRangeList noDataRangeList = mRasterLayer->dataProvider()->userNoDataValues( 1 ); QgsDebugMsg( QString( "noDataRangeList.size = %1" ).arg( noDataRangeList.size() ) ); if ( noDataRangeList.size() > 0 ) { diff --git a/src/core/composer/qgscomposermap.cpp b/src/core/composer/qgscomposermap.cpp index 950444b80709..7c595228f5f1 100644 --- a/src/core/composer/qgscomposermap.cpp +++ b/src/core/composer/qgscomposermap.cpp @@ -40,7 +40,7 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int width, int height ) : QgsComposerItem( x, y, width, height, composition ), mKeepLayerSet( false ), - mOverviewFrameMapId( -1 ), mGridEnabled( false ), mGridStyle( Solid ), + mOverviewFrameMapId( -1 ), mOverviewBlendMode( QPainter::CompositionMode_SourceOver ), mOverviewInverted( false ), mGridEnabled( false ), mGridStyle( Solid ), mGridIntervalX( 0.0 ), mGridIntervalY( 0.0 ), mGridOffsetX( 0.0 ), mGridOffsetY( 0.0 ), mGridAnnotationPrecision( 3 ), mShowGridAnnotation( false ), mLeftGridAnnotationPosition( OutsideMapFrame ), mRightGridAnnotationPosition( OutsideMapFrame ), mTopGridAnnotationPosition( OutsideMapFrame ), mBottomGridAnnotationPosition( OutsideMapFrame ), mAnnotationFrameDistance( 1.0 ), mLeftGridAnnotationDirection( Horizontal ), mRightGridAnnotationDirection( Horizontal ), @@ -82,7 +82,8 @@ QgsComposerMap::QgsComposerMap( QgsComposition *composition, int x, int y, int w } QgsComposerMap::QgsComposerMap( QgsComposition *composition ) - : QgsComposerItem( 0, 0, 10, 10, composition ), mKeepLayerSet( false ), mOverviewFrameMapId( -1 ), mGridEnabled( false ), mGridStyle( Solid ), + : QgsComposerItem( 0, 0, 10, 10, composition ), mKeepLayerSet( false ), mOverviewFrameMapId( -1 ), + mOverviewBlendMode( QPainter::CompositionMode_SourceOver ), mOverviewInverted( false ), mGridEnabled( false ), mGridStyle( Solid ), mGridIntervalX( 0.0 ), mGridIntervalY( 0.0 ), mGridOffsetX( 0.0 ), mGridOffsetY( 0.0 ), mGridAnnotationPrecision( 3 ), mShowGridAnnotation( false ), mLeftGridAnnotationPosition( OutsideMapFrame ), mRightGridAnnotationPosition( OutsideMapFrame ), mTopGridAnnotationPosition( OutsideMapFrame ), mBottomGridAnnotationPosition( OutsideMapFrame ), mAnnotationFrameDistance( 1.0 ), mLeftGridAnnotationDirection( Horizontal ), mRightGridAnnotationDirection( Horizontal ), @@ -283,7 +284,7 @@ void QgsComposerMap::paint( QPainter* painter, const QStyleOptionGraphicsItem* i //Qt 4.4.0 and 4.4.1 have problems with recursive paintings //QgsComposerMap::cache() and QgsComposerMap::update() need to be called by //client functions - + //Background color is already included in cached image, so no need to draw QgsRectangle requestRectangle; @@ -682,10 +683,20 @@ bool QgsComposerMap::writeXML( QDomElement& elem, QDomDocument & doc ) const //overview map frame QDomElement overviewFrameElem = doc.createElement( "overviewFrame" ); overviewFrameElem.setAttribute( "overviewFrameMap", mOverviewFrameMapId ); + overviewFrameElem.setAttribute( "overviewBlendMode", QgsMapRenderer::getBlendModeEnum( mOverviewBlendMode ) ); + if ( mOverviewInverted ) + { + overviewFrameElem.setAttribute( "overviewInverted", "true" ); + } + else + { + overviewFrameElem.setAttribute( "overviewInverted", "false" ); + } QDomElement overviewFrameStyleElem = QgsSymbolLayerV2Utils::saveSymbol( QString(), mOverviewFrameMapSymbol, doc ); overviewFrameElem.appendChild( overviewFrameStyleElem ); composerMapElem.appendChild( overviewFrameElem ); + //extent QDomElement extentElem = doc.createElement( "Extent" ); extentElem.setAttribute( "xmin", QString::number( mExtent.xMinimum() ) ); @@ -779,6 +790,18 @@ bool QgsComposerMap::readXML( const QDomElement& itemElem, const QDomDocument& d if ( !overviewFrameElem.isNull() ) { setOverviewFrameMap( overviewFrameElem.attribute( "overviewFrameMap", "-1" ).toInt() ); + setOverviewBlendMode( QgsMapRenderer::getCompositionMode(( QgsMapRenderer::BlendMode ) overviewFrameElem.attribute( "overviewBlendMode", "0" ).toUInt() ) ); + + QString overviewInvertedFlag = overviewFrameElem.attribute( "overviewInverted" ); + if ( overviewInvertedFlag.compare( "true", Qt::CaseInsensitive ) == 0 ) + { + setOverviewInverted( true ); + } + else + { + setOverviewInverted( false ); + } + QDomElement overviewFrameSymbolElem = overviewFrameElem.firstChildElement( "symbol" ); if ( !overviewFrameSymbolElem.isNull() ) { @@ -1699,6 +1722,18 @@ void QgsComposerMap::setOverviewFrameMapSymbol( QgsFillSymbolV2* symbol ) mOverviewFrameMapSymbol = symbol; } +void QgsComposerMap::setOverviewBlendMode( QPainter::CompositionMode blendMode ) +{ + mOverviewBlendMode = blendMode; + update(); +} + +void QgsComposerMap::setOverviewInverted( bool inverted ) +{ + mOverviewInverted = inverted; + update(); +} + void QgsComposerMap::setGridLineSymbol( QgsLineSymbolV2* symbol ) { delete mGridLineSymbol; @@ -2043,17 +2078,38 @@ void QgsComposerMap::drawOverviewMapExtent( QPainter* p ) context.setRasterScaleFactor( mComposition->printResolution() / 25.4 ); } - QPolygonF polygon; + p->save(); + p->setCompositionMode( mOverviewBlendMode ); + mOverviewFrameMapSymbol->startRender( context ); + + //construct a polygon corresponding to the intersecting map extent + QPolygonF intersectPolygon; double x = ( intersectRect.xMinimum() - thisExtent.xMinimum() ) / thisExtent.width() * rect().width(); double y = ( thisExtent.yMaximum() - intersectRect.yMaximum() ) / thisExtent.height() * rect().height(); double width = intersectRect.width() / thisExtent.width() * rect().width(); double height = intersectRect.height() / thisExtent.height() * rect().height(); - polygon << QPointF( x, y ) << QPointF( x + width, y ) << QPointF( x + width, y + height ) << QPointF( x, y + height ) << QPointF( x, y ); + intersectPolygon << QPointF( x, y ) << QPointF( x + width, y ) << QPointF( x + width, y + height ) << QPointF( x, y + height ) << QPointF( x, y ); QList rings; //empty list - mOverviewFrameMapSymbol->startRender( context ); - mOverviewFrameMapSymbol->renderPolygon( polygon, &rings, 0, context ); + if ( !mOverviewInverted ) + { + //Render the intersecting map extent + mOverviewFrameMapSymbol->renderPolygon( intersectPolygon, &rings, 0, context );; + } + else + { + //We are inverting the overview frame (ie, shading outside the intersecting extent) + //Construct a polygon corresponding to the overview map extent + QPolygonF outerPolygon; + outerPolygon << QPointF( 0, 0 ) << QPointF( rect().width(), 0 ) << QPointF( rect().width(), rect().height() ) << QPointF( 0, rect().height() ) << QPointF( 0, 0 ); + + //Intersecting extent is an inner ring for the shaded area + rings.append( intersectPolygon ); + mOverviewFrameMapSymbol->renderPolygon( outerPolygon, &rings, 0, context ); + } + mOverviewFrameMapSymbol->stopRender( context ); + p->restore(); } void QgsComposerMap::createDefaultOverviewFrameSymbol() diff --git a/src/core/composer/qgscomposermap.h b/src/core/composer/qgscomposermap.h index 3ee19bd42fb8..235c11e4c0f0 100644 --- a/src/core/composer/qgscomposermap.h +++ b/src/core/composer/qgscomposermap.h @@ -312,6 +312,16 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem void setOverviewFrameMapSymbol( QgsFillSymbolV2* symbol ); QgsFillSymbolV2* overviewFrameMapSymbol() { return mOverviewFrameMapSymbol; } + /** Returns the overview's blending mode */ + QPainter::CompositionMode overviewBlendMode() const {return mOverviewBlendMode;} + /** Sets the overview's blending mode*/ + void setOverviewBlendMode( QPainter::CompositionMode blendMode ); + + /** Returns true if the overview frame is inverted */ + bool overviewInverted() const {return mOverviewInverted;} + /** Sets the overview's inversion mode*/ + void setOverviewInverted( bool inverted ); + void setGridLineSymbol( QgsLineSymbolV2* symbol ); QgsLineSymbolV2* gridLineSymbol() { return mGridLineSymbol; } @@ -380,6 +390,9 @@ class CORE_EXPORT QgsComposerMap : public QgsComposerItem /**Drawing style for overview farme*/ QgsFillSymbolV2* mOverviewFrameMapSymbol; QgsLineSymbolV2* mGridLineSymbol; + /**Blend mode for overview*/ + QPainter::CompositionMode mOverviewBlendMode; + bool mOverviewInverted; /**Establishes signal/slot connection for update in case of layer change*/ void connectUpdateSlot(); diff --git a/src/core/diagram/qgshistogramdiagram.cpp b/src/core/diagram/qgshistogramdiagram.cpp index e82006de5456..5e8ca1489d3c 100644 --- a/src/core/diagram/qgshistogramdiagram.cpp +++ b/src/core/diagram/qgshistogramdiagram.cpp @@ -55,7 +55,7 @@ QSizeF QgsHistogramDiagram::diagramSize( const QgsAttributes& attributes, const { case QgsDiagramSettings::Up: case QgsDiagramSettings::Down: - mScaleFactor = (( is.upperSize.width() - is.lowerSize.height() ) / ( is.upperValue - is.lowerValue ) ); + mScaleFactor = ( ( is.upperSize.width() - is.lowerSize.height() ) / ( is.upperValue - is.lowerValue ) ); size.scale( s.barWidth * attributes.size(), maxValue * mScaleFactor, Qt::IgnoreAspectRatio ); break; diff --git a/src/core/qgsfeaturestore.h b/src/core/qgsfeaturestore.h index 369a2853489d..8fbdfeeaf65b 100644 --- a/src/core/qgsfeaturestore.h +++ b/src/core/qgsfeaturestore.h @@ -57,8 +57,11 @@ class CORE_EXPORT QgsFeatureStore /** Get features list reference */ QgsFeatureList& features() { return mFeatures; } + /** Set map of optional parameters */ + void setParams( const QMap &theParams ) { mParams = theParams; } + /** Get map of optional parameters */ - QMap& params() { return mParams; } + QMap params() const { return mParams; } private: QgsFields mFields; diff --git a/src/core/qgsmaprenderer.cpp b/src/core/qgsmaprenderer.cpp index 2c31a4f8c846..b37ce9dabdcc 100644 --- a/src/core/qgsmaprenderer.cpp +++ b/src/core/qgsmaprenderer.cpp @@ -877,8 +877,7 @@ QgsPoint QgsMapRenderer::layerToMapCoordinates( QgsMapLayer* theLayer, QgsPoint } catch ( QgsCsException &cse ) { - Q_UNUSED( cse ); - QgsDebugMsg( QString( "Transform error caught: %1" ).arg( cse.what() ) ); + QgsMessageLog::logMessage( QString( "Transform error caught: %1" ).arg( cse.what() ) ); } } else @@ -888,6 +887,26 @@ QgsPoint QgsMapRenderer::layerToMapCoordinates( QgsMapLayer* theLayer, QgsPoint return point; } +QgsRectangle QgsMapRenderer::layerToMapCoordinates( QgsMapLayer* theLayer, QgsRectangle rect ) +{ + if ( hasCrsTransformEnabled() ) + { + try + { + rect = tr( theLayer )->transform( rect, QgsCoordinateTransform::ForwardTransform ); + } + catch ( QgsCsException &cse ) + { + QgsMessageLog::logMessage( QString( "Transform error caught: %1" ).arg( cse.what() ) ); + } + } + else + { + // leave point without transformation + } + return rect; +} + QgsPoint QgsMapRenderer::mapToLayerCoordinates( QgsMapLayer* theLayer, QgsPoint point ) { if ( hasCrsTransformEnabled() ) @@ -898,8 +917,7 @@ QgsPoint QgsMapRenderer::mapToLayerCoordinates( QgsMapLayer* theLayer, QgsPoint } catch ( QgsCsException &cse ) { - QgsDebugMsg( QString( "Transform error caught: %1" ).arg( cse.what() ) ); - throw cse; //let client classes know there was a transformation error + QgsMessageLog::logMessage( QString( "Transform error caught: %1" ).arg( cse.what() ) ); } } else @@ -919,8 +937,7 @@ QgsRectangle QgsMapRenderer::mapToLayerCoordinates( QgsMapLayer* theLayer, QgsRe } catch ( QgsCsException &cse ) { - QgsDebugMsg( QString( "Transform error caught: %1" ).arg( cse.what() ) ); - throw cse; //let client classes know there was a transformation error + QgsMessageLog::logMessage( QString( "Transform error caught: %1" ).arg( cse.what() ) ); } } return rect; diff --git a/src/core/qgsmaprenderer.h b/src/core/qgsmaprenderer.h index 659938f0925f..a1c0595e4f63 100644 --- a/src/core/qgsmaprenderer.h +++ b/src/core/qgsmaprenderer.h @@ -190,19 +190,44 @@ class CORE_EXPORT QgsMapRenderer : public QObject QSize outputSize(); QSizeF outputSizeF(); - //! transform extent in layer's CRS to extent in output CRS + /** + * @brief transform bounding box from layer's CRS to output CRS + * @see layerToMapCoordinates( QgsMapLayer* theLayer, QgsRectangle rect ) if you want to transform a rectangle + * @return a bounding box (aligned rectangle) containing the transformed extent + */ QgsRectangle layerExtentToOutputExtent( QgsMapLayer* theLayer, QgsRectangle extent ); - //! transform extent in output CRS to extent in layer's CRS + /** + * @brief transform bounding box from output CRS to layer's CRS + * @see mapToLayerCoordinates( QgsMapLayer* theLayer,QgsRectangle rect ) if you want to transform a rectangle + * @return a bounding box (aligned rectangle) containing the transformed extent + */ QgsRectangle outputExtentToLayerExtent( QgsMapLayer* theLayer, QgsRectangle extent ); - //! transform coordinates from layer's CRS to output CRS + /** + * @brief transform point coordinates from layer's CRS to output CRS + * @return the transformed point + */ QgsPoint layerToMapCoordinates( QgsMapLayer* theLayer, QgsPoint point ); - //! transform coordinates from output CRS to layer's CRS + /** + * @brief transform rectangle from layer's CRS to output CRS + * @see layerExtentToOutputExtent() if you want to transform a bounding box + * @return the transformed rectangle + */ + QgsRectangle layerToMapCoordinates( QgsMapLayer* theLayer, QgsRectangle rect ); + + /** + * @brief transform point coordinates from output CRS to layer's CRS + * @return the transformed point + */ QgsPoint mapToLayerCoordinates( QgsMapLayer* theLayer, QgsPoint point ); - //! transform rect's coordinates from output CRS to layer's CRS + /** + * @brief transform rectangle from output CRS to layer's CRS + * @see outputExtentToLayerExtent() if you want to transform a bounding box + * @return the transformed rectangle + */ QgsRectangle mapToLayerCoordinates( QgsMapLayer* theLayer, QgsRectangle rect ); //! sets whether to use projections for this layer set diff --git a/src/core/qgsvectordataprovider.h b/src/core/qgsvectordataprovider.h index cd8c64bc7623..19d8eafc548a 100644 --- a/src/core/qgsvectordataprovider.h +++ b/src/core/qgsvectordataprovider.h @@ -175,43 +175,6 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider @note: added in version 1.2*/ virtual void enumValues( int index, QStringList& enumList ) { Q_UNUSED( index ); enumList.clear(); } - /** - * Start editing transaction. This method must be called before edit methods. - * File based providers usually reopen files in update mode. - * Database based providers usually start new transaction. - * It is not possible to start more editing transactions, if a transaction - * was already started, this method fails and returns false. - * @return true in case of success and false in case of failure - */ - virtual bool startEditing() { return false; } - - /** - * Stop editing transaction and discard the edits. - * Roll back is not supported by all providers. For example file based - * providers are usually writing changes immediately to files and in that case - * there is no way to do roll back on provider level. If roll back is required, - * QgsVectorLayer may be used, which keeps all changes in buffer until commitChanges() - * and fully supports rool back. If a provider does not support roll back, - * editing is canceled but false is returned. - * @return true in case of success and false in case of failure - */ - virtual bool rollBack() { return false; } - - /** - * Commit changes and stop editing transaction. - * File based providers usually reopen files in read only mode. - * Database based providers usually commit transaction. - * @return true in case of success and false in case of failure - */ - virtual bool commitChanges() { return false; } - - /** - * Returns editing status. True after successfull startEditing() - * before rollBack() or commitChanges(). - * @return true if editing transaction is opened - */ - virtual bool isEdited() { return false; } - /** * Adds a list of features * @return true in case of success and false in case of failure @@ -365,12 +328,6 @@ class CORE_EXPORT QgsVectorDataProvider : public QgsDataProvider */ QStringList errors(); - signals: - /** Is emitted, when editing has started */ - void editingStarted(); - - /** Is emitted, when editing stopped */ - void editingStopped(); protected: QVariant convertValue( QVariant::Type type, QString value ); diff --git a/src/core/qgsvectorfilewriter.cpp b/src/core/qgsvectorfilewriter.cpp index 8041b5183e50..01c09d9f3088 100644 --- a/src/core/qgsvectorfilewriter.cpp +++ b/src/core/qgsvectorfilewriter.cpp @@ -113,7 +113,7 @@ QgsVectorFileWriter::QgsVectorFileWriter( { if ( layOptions.join( "" ).toUpper().indexOf( "ENCODING=" ) == -1 ) { - layOptions.append( "ENCODING=" + fileEncoding ); + layOptions.append( "ENCODING=" + convertCodecNameForEncodingOption( fileEncoding ) ); } CPLSetConfigOption( "SHAPE_ENCODING", "" ); @@ -1023,6 +1023,23 @@ QString QgsVectorFileWriter::filterForDriver( const QString& driverName ) return trLongName + " [OGR] (" + glob.toLower() + " " + glob.toUpper() + ")"; } +QString QgsVectorFileWriter::convertCodecNameForEncodingOption( const QString &codecName ) +{ + if ( codecName == "System" ) + return QString( "LDID/0" ); + + QRegExp re = QRegExp( QString( "(CP|windows-|ISO[ -])(.+)" ), Qt::CaseInsensitive ); + if ( re.exactMatch( codecName ) ) + { + QString c = re.cap( 2 ).replace( "-" , "" ); + bool isNumber; + c.toInt( &isNumber ); + if ( isNumber ) + return c; + } + return codecName; +} + bool QgsVectorFileWriter::driverMetadata( QString driverName, QString &longName, QString &trLongName, QString &glob, QString &ext ) { if ( driverName.startsWith( "AVCE00" ) ) diff --git a/src/core/qgsvectorfilewriter.h b/src/core/qgsvectorfilewriter.h index 02f781717bef..e05d9792811e 100644 --- a/src/core/qgsvectorfilewriter.h +++ b/src/core/qgsvectorfilewriter.h @@ -123,6 +123,9 @@ class CORE_EXPORT QgsVectorFileWriter /**Creates a filter for an OGR driver key*/ static QString filterForDriver( const QString& driverName ); + /**Converts codec name to string passed to ENCODING layer creation option of OGR Shapefile*/ + static QString convertCodecNameForEncodingOption( const QString &codecName ); + /** checks whether there were any errors in constructor */ WriterError hasError(); diff --git a/src/core/raster/qgshuesaturationfilter.cpp b/src/core/raster/qgshuesaturationfilter.cpp index 5948d6112988..a7768ca57fe3 100644 --- a/src/core/raster/qgshuesaturationfilter.cpp +++ b/src/core/raster/qgshuesaturationfilter.cpp @@ -305,7 +305,7 @@ void QgsHueSaturationFilter::processSaturation( int &r, int &g, int &b, int &h, { // Raising the saturation. Use a saturation curve to prevent // clipping at maximum saturation with ugly results. - s = qMin(( int )( 255. * ( 1 - pow( 1 - ( s / 255. ) , mSaturationScale * 2 ) ) ), 255 ); + s = qMin(( int )( 255. * ( 1 - pow( 1 - ( s / 255. ) , pow( mSaturationScale, 2 ) ) ) ), 255 ); } // Saturation changed, so update rgb values diff --git a/src/core/raster/qgsrasterbandstats.h b/src/core/raster/qgsrasterbandstats.h index 2c350d070b60..51ffdf2be1b4 100644 --- a/src/core/raster/qgsrasterbandstats.h +++ b/src/core/raster/qgsrasterbandstats.h @@ -48,7 +48,6 @@ class CORE_EXPORT QgsRasterBandStats QgsRasterBandStats() { - bandName = ""; statsGathered = None; minimumValue = std::numeric_limits::max(); maximumValue = std::numeric_limits::min(); @@ -73,19 +72,14 @@ class CORE_EXPORT QgsRasterBandStats } /** \brief The name of the band that these stats belong to. */ - QString bandName; + //QString bandName; /** \brief The gdal band number (starts at 1)*/ int bandNumber; - /** Color table - * @note not available in python bindings - */ - QList colorTable; - - /** \brief The number of cells in the band. Equivalent to height x width. - * TODO: check if NO_DATA are excluded!*/ - int elementCount; + /** \brief The number of not no data cells in the band. */ + // TODO: check if no data are excluded in stats calculation + size_t elementCount; /** \brief The maximum cell value in the raster band. NO_DATA values * are ignored. This does not use the gdal GetMaximmum function. */ diff --git a/src/core/raster/qgsrasterblock.cpp b/src/core/raster/qgsrasterblock.cpp index c5dfebc82643..ccc8895f2725 100644 --- a/src/core/raster/qgsrasterblock.cpp +++ b/src/core/raster/qgsrasterblock.cpp @@ -273,6 +273,7 @@ bool QgsRasterBlock::hasNoData() const bool QgsRasterBlock::isNoDataValue( double value, double noDataValue ) { + // TODO: optimize no data value test by memcmp() // More precise would be qIsNaN(value) && qIsNaN(noDataValue(bandNo)), but probably // not important and slower if ( qIsNaN( value ) || @@ -360,7 +361,7 @@ bool QgsRasterBlock::setValue( int row, int column, double value ) bool QgsRasterBlock::setColor( int row, int column, QRgb color ) { - return setColor(( size_t )row*column, color ); + return setColor(( size_t )row*mWidth + column, color ); } bool QgsRasterBlock::setColor( size_t index, QRgb color ) @@ -385,7 +386,7 @@ bool QgsRasterBlock::setColor( size_t index, QRgb color ) bool QgsRasterBlock::setIsNoData( int row, int column ) { - return setIsNoData(( size_t )row*column ); + return setIsNoData(( size_t )row*mWidth + column ); } bool QgsRasterBlock::setIsNoData( size_t index ) diff --git a/src/core/raster/qgsrasterdataprovider.cpp b/src/core/raster/qgsrasterdataprovider.cpp index c1d16fc4e70d..936fc0d3aa47 100644 --- a/src/core/raster/qgsrasterdataprovider.cpp +++ b/src/core/raster/qgsrasterdataprovider.cpp @@ -205,7 +205,7 @@ QgsRasterBlock * QgsRasterDataProvider::block( int theBandNo, QgsRectangle cons } // apply user no data values - block->applyNoDataValues( userNoDataValue( theBandNo ) ); + block->applyNoDataValues( userNoDataValues( theBandNo ) ); return block; } @@ -501,7 +501,7 @@ QgsRasterInterface::Capability QgsRasterDataProvider::identifyFormatToCapability } } -bool QgsRasterDataProvider::userNoDataValueContains( int bandNo, double value ) const +bool QgsRasterDataProvider::userNoDataValuesContains( int bandNo, double value ) const { QgsRasterRangeList rangeList = mUserNoDataValue.value( bandNo - 1 ); return QgsRasterRange::contains( value, rangeList ); diff --git a/src/core/raster/qgsrasterdataprovider.h b/src/core/raster/qgsrasterdataprovider.h index d35140351d25..1f18f88d0ae5 100644 --- a/src/core/raster/qgsrasterdataprovider.h +++ b/src/core/raster/qgsrasterdataprovider.h @@ -174,7 +174,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast virtual void setUserNoDataValue( int bandNo, QgsRasterRangeList noData ); /** Get list of user no data value ranges */ - virtual QgsRasterRangeList userNoDataValue( int bandNo ) const { return mUserNoDataValue.value( bandNo -1 ); } + virtual QgsRasterRangeList userNoDataValues( int bandNo ) const { return mUserNoDataValue.value( bandNo -1 ); } virtual QList colorTable( int bandNo ) const { Q_UNUSED( bandNo ); return QList(); } @@ -313,7 +313,8 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast virtual bool setNoDataValue( int bandNo, double noDataValue ) { Q_UNUSED( bandNo ); Q_UNUSED( noDataValue ); return false; } /** Returns the formats supported by create() */ - virtual QStringList createFormats() const { return QStringList(); } + // TODO: this should be static and call C functions in provider library + //static QStringList createFormats(); /** Remove dataset*/ virtual bool remove() { return false; } @@ -357,7 +358,7 @@ class CORE_EXPORT QgsRasterDataProvider : public QgsDataProvider, public QgsRast { Q_UNUSED( bandNo ); Q_UNUSED( viewExtent ); Q_UNUSED( width ); Q_UNUSED( height ); Q_UNUSED( data ); } /** Returns true if user no data contains value */ - bool userNoDataValueContains( int bandNo, double value ) const; + bool userNoDataValuesContains( int bandNo, double value ) const; static QStringList cStringList2Q_( char ** stringList ); diff --git a/src/core/raster/qgsrasterdrawer.cpp b/src/core/raster/qgsrasterdrawer.cpp index 84112b5ad13a..7438bfa002e2 100644 --- a/src/core/raster/qgsrasterdrawer.cpp +++ b/src/core/raster/qgsrasterdrawer.cpp @@ -41,22 +41,17 @@ void QgsRasterDrawer::draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsM // last pipe filter has only 1 band int bandNumber = 1; - mIterator->startRasterRead( bandNumber, viewPort->drawableAreaXDim, viewPort->drawableAreaYDim, viewPort->mDrawnExtent ); + mIterator->startRasterRead( bandNumber, viewPort->mWidth, viewPort->mHeight, viewPort->mDrawnExtent ); //number of cols/rows in output pixels int nCols = 0; int nRows = 0; - //number of raster cols/rows with oversampling - //int nRasterCols = 0; - //int nRasterRows = 0; //shift to top left point for the raster part int topLeftCol = 0; int topLeftRow = 0; // We know that the output data type of last pipe filter is QImage data - //QgsRasterDataProvider::DataType rasterType = ( QgsRasterDataProvider::DataType )mProvider->dataType( mGrayBand ); - //void* rasterData; QgsRasterBlock *block; // readNextRasterPart calcs and resets nCols, nRows, topLeftCol, topLeftRow @@ -68,11 +63,7 @@ void QgsRasterDrawer::draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsM QgsDebugMsg( "Cannot get block" ); continue; } - //create image - //QImage img( nRasterCols, nRasterRows, QImage::Format_ARGB32_Premultiplied ); - // TODO: the exact format should be read from input - //QImage img(( uchar * ) rasterData, nCols, nRows, QImage::Format_ARGB32_Premultiplied ); QImage img = block->image(); drawImage( p, viewPort, img, topLeftCol, topLeftRow ); @@ -89,7 +80,7 @@ void QgsRasterDrawer::drawImage( QPainter* p, QgsRasterViewPort* viewPort, const } //top left position in device coords - QPoint tlPoint = QPoint( viewPort->topLeftPoint.x() + topLeftCol, viewPort->topLeftPoint.y() + topLeftRow ); + QPoint tlPoint = QPoint( viewPort->mTopLeftPoint.x() + topLeftCol, viewPort->mTopLeftPoint.y() + topLeftRow ); p->save(); p->setRenderHint( QPainter::Antialiasing, false ); p->drawImage( tlPoint, img ); diff --git a/src/core/raster/qgsrasterfilewriter.cpp b/src/core/raster/qgsrasterfilewriter.cpp index 74c9f276a4b6..5182d66c38e4 100644 --- a/src/core/raster/qgsrasterfilewriter.cpp +++ b/src/core/raster/qgsrasterfilewriter.cpp @@ -46,13 +46,11 @@ QgsRasterFileWriter::~QgsRasterFileWriter() } -//QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster( QgsRasterIterator* iter, int nCols, int nRows, QgsRectangle outputExtent, QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeRaster( const QgsRasterPipe* pipe, int nCols, int nRows, QgsRectangle outputExtent, const QgsCoordinateReferenceSystem& crs, QProgressDialog* progressDialog ) { QgsDebugMsg( "Entered" ); - //if ( !iter ) if ( !pipe ) { return SourceProviderError; @@ -127,15 +125,12 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( const Qgs return SourceProviderError; } - //const QgsRasterInterface* iface = iter->input(); const QgsRasterInterface* iface = pipe->last(); if ( !iface ) { return SourceProviderError; } - //const QgsRasterDataProvider* srcProvider = dynamic_cast( iface->srcInput() ); - //QgsRasterDataProvider* srcProvider = dynamic_cast( iface->srcInput() ); QgsRasterDataProvider* srcProvider = const_cast( dynamic_cast( iface->srcInput() ) ); if ( !srcProvider ) { @@ -179,7 +174,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( const Qgs bool destHasNoDataValue = false; double destNoDataValue = std::numeric_limits::quiet_NaN(); QGis::DataType destDataType = srcProvider->srcDataType( bandNo ); - //QGis::DataType destDataType = srcProvider->dataType( bandNo ); // TODO: verify what happens/should happen if srcNoDataValue is disabled by setUseSrcNoDataValue QgsDebugMsg( QString( "srcHasNoDataValue = %1 srcNoDataValue = %2" ).arg( srcHasNoDataValue ).arg( srcProvider->srcNoDataValue( bandNo ) ) ); if ( srcHasNoDataValue ) @@ -189,10 +183,10 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( const Qgs destNoDataValue = srcProvider->srcNoDataValue( bandNo ); destHasNoDataValue = true; } - else if ( nuller && nuller->noData().size() > 0 ) + else if ( nuller && nuller->noData( bandNo ).size() > 0 ) { // Use one user defined no data value - destNoDataValue = nuller->noData().value( 0 ).min; + destNoDataValue = nuller->noData( bandNo ).value( 0 ).min(); destHasNoDataValue = true; } else @@ -232,7 +226,9 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( const Qgs } if ( nuller && destHasNoDataValue ) - nuller->setOutputNoData( destNoDataValue ); + { + nuller->setOutputNoDataValue( bandNo, destNoDataValue ); + } QgsDebugMsg( QString( "bandNo = %1 destDataType = %2 destHasNoDataValue = %3 destNoDataValue = %4" ).arg( bandNo ).arg( destDataType ).arg( destHasNoDataValue ).arg( destNoDataValue ) ); destDataTypeList.append( destDataType ); @@ -328,8 +324,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( for ( int i = 1; i <= nBands; ++i ) { iter->startRasterRead( i, nCols, nRows, outputExtent ); - // TODO: no need to alloc memory, change to readBlock() returning the allocated block - //blockList.push_back( qgsMalloc( dataTypeSize * mMaxTileWidth * mMaxTileHeight ) ); blockList.push_back( 0 ); if ( destProvider ) // no tiles { @@ -358,7 +352,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( if ( !iter->readNextRasterPart( i, iterCols, iterRows, &( blockList[i - 1] ), iterLeft, iterTop ) ) { // No more parts, create VRT and return - //delete destProvider; if ( mTiledMode ) { QString vrtFilePath( mOutputUrl + "/" + vrtFileName() ); @@ -416,7 +409,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeDataRaster( if ( mTiledMode ) //write to file { - //delete destProvider; QgsRasterDataProvider* partDestProvider = createPartProvider( outputExtent, nCols, iterCols, iterRows, iterLeft, iterTop, mOutputUrl, @@ -471,7 +463,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste iter->setMaximumTileWidth( mMaxTileWidth ); iter->setMaximumTileHeight( mMaxTileHeight ); - //void* data = qgsMalloc( QgsRasterBlock::typeSize( inputDataType ) * mMaxTileWidth * mMaxTileHeight ); void* redData = qgsMalloc( mMaxTileWidth * mMaxTileHeight ); void* greenData = qgsMalloc( mMaxTileWidth * mMaxTileHeight ); void* blueData = qgsMalloc( mMaxTileWidth * mMaxTileHeight ); @@ -488,7 +479,6 @@ QgsRasterFileWriter::WriterError QgsRasterFileWriter::writeImageRaster( QgsRaste destProvider = initOutput( nCols, nRows, crs, geoTransform, 4, QGis::Byte ); - //iter->select( outputExtent, outputMapUnitsPerPixel ); iter->startRasterRead( 1, nCols, nRows, outputExtent ); int nParts = 0; @@ -699,7 +689,6 @@ void QgsRasterFileWriter::buildPyramids( const QString& filename ) { QgsDebugMsg( "filename = " + filename ); // open new dataProvider so we can build pyramids with it - //QgsRasterDataProvider* destProvider = QgsRasterLayer::loadProvider( mOutputProviderKey, filename ); QgsRasterDataProvider* destProvider = ( QgsRasterDataProvider* ) QgsProviderRegistry::instance()->provider( mOutputProviderKey, filename ); if ( !destProvider ) { @@ -883,14 +872,6 @@ QgsRasterDataProvider* QgsRasterFileWriter::createPartProvider( const QgsRectang QgsRectangle mapRect( mapLeft, mapBottom, mapRight, mapTop ); QString outputFile = outputUrl + "/" + partFileName( fileIndex ); -#if 0 - //QgsRasterDataProvider* destProvider = QgsRasterLayer::loadProvider( mOutputProviderKey, outputFile ); - QgsRasterDataProvider* destProvider = ( QgsRasterDataProvider* ) QgsProviderRegistry::instance()->provider( mOutputProviderKey, outputFile ); - if ( !destProvider ) - { - return 0; - } -#endif //geotransform double geoTransform[6]; @@ -902,14 +883,6 @@ QgsRasterDataProvider* QgsRasterFileWriter::createPartProvider( const QgsRectang geoTransform[5] = -mup; // perhaps we need a separate createOptions for tiles ? -#if 0 - if ( !destProvider->create( mOutputFormat, nBands, type, iterCols, iterRows, geoTransform, - crs ) ) - { - delete destProvider; - return 0; - } -#endif QgsRasterDataProvider* destProvider = QgsRasterDataProvider::create( mOutputProviderKey, outputFile, mOutputFormat, nBands, type, iterCols, iterRows, geoTransform, crs, mCreateOptions ) ; @@ -935,8 +908,6 @@ QgsRasterDataProvider* QgsRasterFileWriter::initOutput( int nCols, int nRows, co mCreateOptions << "COPY_SRC_OVERVIEWS=YES"; #endif - //QgsRasterDataProvider* destProvider = QgsRasterLayer::loadProvider( mOutputProviderKey, mOutputUrl ); - //QgsRasterDataProvider* destProvider = ( QgsRasterDataProvider* ) QgsProviderRegistry::instance()->provider( mOutputProviderKey, mOutputUrl ); QgsRasterDataProvider* destProvider = QgsRasterDataProvider::create( mOutputProviderKey, mOutputUrl, mOutputFormat, nBands, type, nCols, nRows, geoTransform, crs, mCreateOptions ) ; if ( !destProvider ) @@ -944,15 +915,6 @@ QgsRasterDataProvider* QgsRasterFileWriter::initOutput( int nCols, int nRows, co QgsDebugMsg( "No provider created" ); } -#if 0 - if ( !destProvider->create( mOutputFormat, nBands, type, nCols, nRows, geoTransform, - crs, mCreateOptions ) ) - { - delete destProvider; - return 0; - } -#endif - return destProvider; } } diff --git a/src/core/raster/qgsrasterfilewriter.h b/src/core/raster/qgsrasterfilewriter.h index 0566c0e464e8..43d96f3b8731 100644 --- a/src/core/raster/qgsrasterfilewriter.h +++ b/src/core/raster/qgsrasterfilewriter.h @@ -96,7 +96,6 @@ class CORE_EXPORT QgsRasterFileWriter private: QgsRasterFileWriter(); //forbidden - //WriterError writeDataRaster( QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent, WriterError writeDataRaster( const QgsRasterPipe* pipe, QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent, const QgsCoordinateReferenceSystem& crs, QProgressDialog* progressDialog = 0 ); @@ -115,7 +114,10 @@ class CORE_EXPORT QgsRasterFileWriter WriterError writeImageRaster( QgsRasterIterator* iter, int nCols, int nRows, const QgsRectangle& outputExtent, const QgsCoordinateReferenceSystem& crs, QProgressDialog* progressDialog = 0 ); - //initialize vrt member variables + /** \brief Initialize vrt member variables + * @param destHasNoDataValueList true if destination has no data value, indexed from 0 + * @param destNoDataValueList no data value, indexed from 0 + */ void createVRT( int xSize, int ySize, const QgsCoordinateReferenceSystem& crs, double* geoTransform, QGis::DataType type, QList destHasNoDataValueList, QList destNoDataValueList ); //write vrt document to disk bool writeVRT( const QString& file ); @@ -123,15 +125,16 @@ class CORE_EXPORT QgsRasterFileWriter void addToVRT( const QString& filename, int band, int xSize, int ySize, int xOffset, int yOffset ); void buildPyramids( const QString& filename ); - //static int pyramidsProgress( double dfComplete, const char *pszMessage, void* pData ); - /**Create provider and datasource for a part image (vrt mode)*/ QgsRasterDataProvider* createPartProvider( const QgsRectangle& extent, int nCols, int iterCols, int iterRows, int iterLeft, int iterTop, const QString& outputUrl, int fileIndex, int nBands, QGis::DataType type, const QgsCoordinateReferenceSystem& crs ); - /**Init VRT (for tiled mode) or create global output provider (single-file mode)*/ + /** \brie Init VRT (for tiled mode) or create global output provider (single-file mode) + * @param destHasNoDataValueList true if destination has no data value, indexed from 0 + * @param destNoDataValueList no data value, indexed from 0 + */ QgsRasterDataProvider* initOutput( int nCols, int nRows, const QgsCoordinateReferenceSystem& crs, double* geoTransform, int nBands, QGis::DataType type, diff --git a/src/core/raster/qgsrasterinterface.cpp b/src/core/raster/qgsrasterinterface.cpp index eabca059a4de..fb5e926a7592 100644 --- a/src/core/raster/qgsrasterinterface.cpp +++ b/src/core/raster/qgsrasterinterface.cpp @@ -47,7 +47,6 @@ void QgsRasterInterface::initStatistics( QgsRasterBandStats &theStatistics, { QgsDebugMsg( QString( "theBandNo = %1 theSampleSize = %2" ).arg( theBandNo ).arg( theSampleSize ) ); - theStatistics.bandName = generateBandName( theBandNo ); theStatistics.bandNumber = theBandNo; theStatistics.statsGathered = theStats; diff --git a/src/core/raster/qgsrasteriterator.cpp b/src/core/raster/qgsrasteriterator.cpp index 20fefe30657f..d70f03923109 100644 --- a/src/core/raster/qgsrasteriterator.cpp +++ b/src/core/raster/qgsrasteriterator.cpp @@ -44,14 +44,12 @@ void QgsRasterIterator::startRasterRead( int bandNumber, int nCols, int nRows, c pInfo.nRows = nRows; pInfo.currentCol = 0; pInfo.currentRow = 0; - pInfo.block = 0; pInfo.prj = 0; mRasterPartInfos.insert( bandNumber, pInfo ); } bool QgsRasterIterator::readNextRasterPart( int bandNumber, int& nCols, int& nRows, - //void** rasterData, QgsRasterBlock **block, int& topLeftCol, int& topLeftRow ) { @@ -73,9 +71,6 @@ bool QgsRasterIterator::readNextRasterPart( int bandNumber, } //remove last data block - // TODO: block is released somewhere else (check) - //delete pInfo.block; - pInfo.block = 0; delete pInfo.prj; pInfo.prj = 0; @@ -98,9 +93,7 @@ bool QgsRasterIterator::readNextRasterPart( int bandNumber, double ymax = viewPortExtent.yMaximum() - pInfo.currentRow / ( double )pInfo.nRows * viewPortExtent.height(); QgsRectangle blockRect( xmin, ymin, xmax, ymax ); - pInfo.block = mInput->block( bandNumber, blockRect, nCols, nRows ); - - *block = pInfo.block; + *block = mInput->block( bandNumber, blockRect, nCols, nRows ); topLeftCol = pInfo.currentCol; topLeftRow = pInfo.currentRow; @@ -129,7 +122,6 @@ void QgsRasterIterator::removePartInfo( int bandNumber ) if ( partIt != mRasterPartInfos.end() ) { RasterPartInfo& pInfo = partIt.value(); - delete pInfo.block; delete pInfo.prj; mRasterPartInfos.remove( bandNumber ); } diff --git a/src/core/raster/qgsrasteriterator.h b/src/core/raster/qgsrasteriterator.h index 0bf8516f8193..024ceff4fea9 100644 --- a/src/core/raster/qgsrasteriterator.h +++ b/src/core/raster/qgsrasteriterator.h @@ -30,16 +30,6 @@ struct QgsRasterViewPort; class CORE_EXPORT QgsRasterIterator { public: - //Stores information about reading of a raster band. Columns and rows are in unsampled coordinates - struct RasterPartInfo - { - int currentCol; - int currentRow; - int nCols; - int nRows; - QgsRasterBlock *block; - QgsRasterProjector* prj; //raster projector (or 0 if no reprojection is done) - }; QgsRasterIterator( QgsRasterInterface* input ); ~QgsRasterIterator(); @@ -52,7 +42,8 @@ class CORE_EXPORT QgsRasterIterator */ void startRasterRead( int bandNumber, int nCols, int nRows, const QgsRectangle& extent ); - /**Fetches next part of raster data + /**Fetches next part of raster data, caller takes ownership of the block and + caller should delete the block. @param bandNumber band to read @param nCols number of columns on output device @param nRows number of rows on output device @@ -76,6 +67,16 @@ class CORE_EXPORT QgsRasterIterator int maximumTileHeight() const { return mMaximumTileHeight; } private: + //Stores information about reading of a raster band. Columns and rows are in unsampled coordinates + struct RasterPartInfo + { + int currentCol; + int currentRow; + int nCols; + int nRows; + QgsRasterProjector* prj; //raster projector (or 0 if no reprojection is done) + }; + QgsRasterInterface* mInput; QMap mRasterPartInfos; QgsRectangle mExtent; diff --git a/src/core/raster/qgsrasterlayer.cpp b/src/core/raster/qgsrasterlayer.cpp index 637d5d946f13..4a2266dee5c6 100644 --- a/src/core/raster/qgsrasterlayer.cpp +++ b/src/core/raster/qgsrasterlayer.cpp @@ -331,7 +331,6 @@ bool QgsRasterLayer::draw( QgsRenderContext& rendererContext ) } // clip raster extent to view extent - //QgsRectangle myRasterExtent = theViewExtent.intersect( &mLayerExtent ); QgsRectangle myRasterExtent = myProjectedViewExtent.intersect( &myProjectedLayerExtent ); if ( myRasterExtent.isEmpty() ) { @@ -367,8 +366,8 @@ bool QgsRasterLayer::draw( QgsRenderContext& rendererContext ) } // get dimensions of clipped raster image in device coordinate space (this is the size of the viewport) - myRasterViewPort->topLeftPoint = theQgsMapToPixel.transform( myRasterExtent.xMinimum(), myRasterExtent.yMaximum() ); - myRasterViewPort->bottomRightPoint = theQgsMapToPixel.transform( myRasterExtent.xMaximum(), myRasterExtent.yMinimum() ); + myRasterViewPort->mTopLeftPoint = theQgsMapToPixel.transform( myRasterExtent.xMinimum(), myRasterExtent.yMaximum() ); + myRasterViewPort->mBottomRightPoint = theQgsMapToPixel.transform( myRasterExtent.xMaximum(), myRasterExtent.yMinimum() ); // align to output device grid, i.e. floor/ceil to integers // TODO: this should only be done if paint device is raster - screen, image @@ -378,22 +377,22 @@ bool QgsRasterLayer::draw( QgsRenderContext& rendererContext ) // the provider anyway if ( true ) { - myRasterViewPort->topLeftPoint.setX( floor( myRasterViewPort->topLeftPoint.x() ) ); - myRasterViewPort->topLeftPoint.setY( floor( myRasterViewPort->topLeftPoint.y() ) ); - myRasterViewPort->bottomRightPoint.setX( ceil( myRasterViewPort->bottomRightPoint.x() ) ); - myRasterViewPort->bottomRightPoint.setY( ceil( myRasterViewPort->bottomRightPoint.y() ) ); + myRasterViewPort->mTopLeftPoint.setX( floor( myRasterViewPort->mTopLeftPoint.x() ) ); + myRasterViewPort->mTopLeftPoint.setY( floor( myRasterViewPort->mTopLeftPoint.y() ) ); + myRasterViewPort->mBottomRightPoint.setX( ceil( myRasterViewPort->mBottomRightPoint.x() ) ); + myRasterViewPort->mBottomRightPoint.setY( ceil( myRasterViewPort->mBottomRightPoint.y() ) ); // recalc myRasterExtent to aligned values myRasterExtent.set( - theQgsMapToPixel.toMapCoordinatesF( myRasterViewPort->topLeftPoint.x(), - myRasterViewPort->bottomRightPoint.y() ), - theQgsMapToPixel.toMapCoordinatesF( myRasterViewPort->bottomRightPoint.x(), - myRasterViewPort->topLeftPoint.y() ) + theQgsMapToPixel.toMapCoordinatesF( myRasterViewPort->mTopLeftPoint.x(), + myRasterViewPort->mBottomRightPoint.y() ), + theQgsMapToPixel.toMapCoordinatesF( myRasterViewPort->mBottomRightPoint.x(), + myRasterViewPort->mTopLeftPoint.y() ) ); } - myRasterViewPort->drawableAreaXDim = static_cast( qAbs(( myRasterExtent.width() / theQgsMapToPixel.mapUnitsPerPixel() ) ) ); - myRasterViewPort->drawableAreaYDim = static_cast( qAbs(( myRasterExtent.height() / theQgsMapToPixel.mapUnitsPerPixel() ) ) ); + myRasterViewPort->mWidth = static_cast( qAbs(( myRasterExtent.width() / theQgsMapToPixel.mapUnitsPerPixel() ) ) ); + myRasterViewPort->mHeight = static_cast( qAbs(( myRasterExtent.height() / theQgsMapToPixel.mapUnitsPerPixel() ) ) ); //the drawable area can start to get very very large when you get down displaying 2x2 or smaller, this is becasue //theQgsMapToPixel.mapUnitsPerPixel() is less then 1, @@ -407,20 +406,19 @@ bool QgsRasterLayer::draw( QgsRenderContext& rendererContext ) QgsDebugMsgLevel( QString( "myRasterExtent.yMinimum() = %1" ).arg( myRasterExtent.yMinimum() ), 3 ); QgsDebugMsgLevel( QString( "myRasterExtent.yMaximum() = %1" ).arg( myRasterExtent.yMaximum() ), 3 ); - QgsDebugMsgLevel( QString( "topLeftPoint.x() = %1" ).arg( myRasterViewPort->topLeftPoint.x() ), 3 ); - QgsDebugMsgLevel( QString( "bottomRightPoint.x() = %1" ).arg( myRasterViewPort->bottomRightPoint.x() ), 3 ); - QgsDebugMsgLevel( QString( "topLeftPoint.y() = %1" ).arg( myRasterViewPort->topLeftPoint.y() ), 3 ); - QgsDebugMsgLevel( QString( "bottomRightPoint.y() = %1" ).arg( myRasterViewPort->bottomRightPoint.y() ), 3 ); + QgsDebugMsgLevel( QString( "mTopLeftPoint.x() = %1" ).arg( myRasterViewPort->mTopLeftPoint.x() ), 3 ); + QgsDebugMsgLevel( QString( "mBottomRightPoint.x() = %1" ).arg( myRasterViewPort->mBottomRightPoint.x() ), 3 ); + QgsDebugMsgLevel( QString( "mTopLeftPoint.y() = %1" ).arg( myRasterViewPort->mTopLeftPoint.y() ), 3 ); + QgsDebugMsgLevel( QString( "mBottomRightPoint.y() = %1" ).arg( myRasterViewPort->mBottomRightPoint.y() ), 3 ); - QgsDebugMsgLevel( QString( "drawableAreaXDim = %1" ).arg( myRasterViewPort->drawableAreaXDim ), 3 ); - QgsDebugMsgLevel( QString( "drawableAreaYDim = %1" ).arg( myRasterViewPort->drawableAreaYDim ), 3 ); + QgsDebugMsgLevel( QString( "mWidth = %1" ).arg( myRasterViewPort->mWidth ), 3 ); + QgsDebugMsgLevel( QString( "mHeight = %1" ).arg( myRasterViewPort->mHeight ), 3 ); // /\/\/\ - added to handle zoomed-in rasters mLastViewPort = *myRasterViewPort; - // Provider mode: See if a provider key is specified, and if so use the provider instead - + // TODO: is it necessary? Probably WMS only? mDataProvider->setDpi( rendererContext.rasterScaleFactor() * 25.4 * rendererContext.scaleFactor() ); draw( theQPainter, myRasterViewPort, &theQgsMapToPixel ); @@ -762,7 +760,7 @@ QString QgsRasterLayer::providerType() const /** * @return the horizontal units per pixel as reported in the GDAL geotramsform[1] */ -double QgsRasterLayer::rasterUnitsPerPixel() +double QgsRasterLayer::rasterUnitsPerPixelX() { // We return one raster pixel per map unit pixel // One raster pixel can have several raster units... @@ -770,7 +768,6 @@ double QgsRasterLayer::rasterUnitsPerPixel() // We can only use one of the mGeoTransform[], so go with the // horisontal one. - //return qAbs( mGeoTransform[1] ); if ( mDataProvider->capabilities() & QgsRasterDataProvider::Size && mDataProvider->xSize() > 0 ) { return mDataProvider->extent().width() / mDataProvider->xSize(); @@ -778,6 +775,15 @@ double QgsRasterLayer::rasterUnitsPerPixel() return 1; } +double QgsRasterLayer::rasterUnitsPerPixelY() +{ + if ( mDataProvider->capabilities() & QgsRasterDataProvider::Size && mDataProvider->xSize() > 0 ) + { + return mDataProvider->extent().height() / mDataProvider->ySize(); + } + return 1; +} + void QgsRasterLayer::init() { mRasterType = QgsRasterLayer::GrayOrUndefined; @@ -785,8 +791,8 @@ void QgsRasterLayer::init() setDrawingStyle( QgsRasterLayer::UndefinedDrawingStyle ); //Initialize the last view port structure, should really be a class - mLastViewPort.drawableAreaXDim = 0; - mLastViewPort.drawableAreaYDim = 0; + mLastViewPort.mWidth = 0; + mLastViewPort.mHeight = 0; } void QgsRasterLayer::setDataProvider( QString const & provider ) @@ -1002,7 +1008,7 @@ void QgsRasterLayer::closeDataProvider() mDataProvider = 0; } -void QgsRasterLayer::setContrastEnhancementAlgorithm( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, QgsRaster::ContrastEnhancementLimits theLimits, QgsRectangle theExtent, int theSampleSize, bool theGenerateLookupTableFlag ) +void QgsRasterLayer::setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, QgsRaster::ContrastEnhancementLimits theLimits, QgsRectangle theExtent, int theSampleSize, bool theGenerateLookupTableFlag ) { QgsDebugMsg( QString( "theAlgorithm = %1 theLimits = %2 theExtent.isEmpty() = %3" ).arg( theAlgorithm ).arg( theLimits ).arg( theExtent.isEmpty() ) ); if ( !mPipe.renderer() || !mDataProvider ) @@ -1131,7 +1137,7 @@ void QgsRasterLayer::setDefaultContrastEnhancement() QString myLimitsString = mySettings.value( "/Raster/defaultContrastEnhancementLimits", "CumulativeCut" ).toString(); QgsRaster::ContrastEnhancementLimits myLimits = QgsRaster::contrastEnhancementLimitsFromString( myLimitsString ); - setContrastEnhancementAlgorithm( myAlgorithm, myLimits ); + setContrastEnhancement( myAlgorithm, myLimits ); } /** @@ -1266,10 +1272,10 @@ QPixmap QgsRasterLayer::previewAsPixmap( QSize size, QColor bgColor ) double myPixelWidth = myExtent.width() / myMapUnitsPerPixel; double myPixelHeight = myExtent.height() / myMapUnitsPerPixel; - myRasterViewPort->topLeftPoint = QgsPoint( myX, myY ); - myRasterViewPort->bottomRightPoint = QgsPoint( myPixelWidth, myPixelHeight ); - myRasterViewPort->drawableAreaXDim = myQPixmap.width(); - myRasterViewPort->drawableAreaYDim = myQPixmap.height(); + myRasterViewPort->mTopLeftPoint = QgsPoint( myX, myY ); + myRasterViewPort->mBottomRightPoint = QgsPoint( myPixelWidth, myPixelHeight ); + myRasterViewPort->mWidth = myQPixmap.width(); + myRasterViewPort->mHeight = myQPixmap.height(); myRasterViewPort->mDrawnExtent = myExtent; myRasterViewPort->mSrcCRS = QgsCoordinateReferenceSystem(); // will be invalid @@ -1619,13 +1625,13 @@ bool QgsRasterLayer::writeXml( QDomNode & layer_node, for ( int bandNo = 1; bandNo <= mDataProvider->bandCount(); bandNo++ ) { - if ( mDataProvider->userNoDataValue( bandNo ).isEmpty() ) continue; + if ( mDataProvider->userNoDataValues( bandNo ).isEmpty() ) continue; QDomElement noDataRangeList = document.createElement( "noDataList" ); noDataRangeList.setAttribute( "bandNo", bandNo ); noDataRangeList.setAttribute( "useSrcNoData", mDataProvider->useSrcNoDataValue( bandNo ) ); - foreach ( QgsRasterRange range, mDataProvider->userNoDataValue( bandNo ) ) + foreach ( QgsRasterRange range, mDataProvider->userNoDataValues( bandNo ) ) { QDomElement noDataRange = document.createElement( "noDataRange" ); diff --git a/src/core/raster/qgsrasterlayer.h b/src/core/raster/qgsrasterlayer.h index 77bfb915ab35..a4c63f7c5953 100644 --- a/src/core/raster/qgsrasterlayer.h +++ b/src/core/raster/qgsrasterlayer.h @@ -336,7 +336,8 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer QString providerType() const; /** \brief Returns the number of raster units per each raster pixel. In a world file, this is normally the first row (without the sign) */ - double rasterUnitsPerPixel(); + double rasterUnitsPerPixelX(); + double rasterUnitsPerPixelY(); /** \brief Set contrast enhancement algorithm * @param theAlgorithm Contrast enhancement algorithm @@ -346,11 +347,11 @@ class CORE_EXPORT QgsRasterLayer : public QgsMapLayer * @param theGenerateLookupTableFlag Generate llokup table. */ - void setContrastEnhancementAlgorithm( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, - QgsRaster::ContrastEnhancementLimits theLimits = QgsRaster::ContrastEnhancementMinMax, - QgsRectangle theExtent = QgsRectangle(), - int theSampleSize = SAMPLE_SIZE, - bool theGenerateLookupTableFlag = true ); + void setContrastEnhancement( QgsContrastEnhancement::ContrastEnhancementAlgorithm theAlgorithm, + QgsRaster::ContrastEnhancementLimits theLimits = QgsRaster::ContrastEnhancementMinMax, + QgsRectangle theExtent = QgsRectangle(), + int theSampleSize = SAMPLE_SIZE, + bool theGenerateLookupTableFlag = true ); /** \brief Set default contrast enhancement */ void setDefaultContrastEnhancement(); diff --git a/src/core/raster/qgsrasternuller.cpp b/src/core/raster/qgsrasternuller.cpp index 6894a130aafe..9406f4bed7f3 100644 --- a/src/core/raster/qgsrasternuller.cpp +++ b/src/core/raster/qgsrasternuller.cpp @@ -32,9 +32,31 @@ QgsRasterInterface * QgsRasterNuller::clone() const QgsDebugMsg( "Entered" ); QgsRasterNuller * nuller = new QgsRasterNuller( 0 ); nuller->mNoData = mNoData; + nuller->mOutputNoData = mOutputNoData; + nuller->mHasOutputNoData = mHasOutputNoData; return nuller; } +void QgsRasterNuller::setOutputNoDataValue( int bandNo, double noData ) +{ + if ( bandNo > mOutputNoData.size() ) + { + mOutputNoData.resize( bandNo ); + mHasOutputNoData.resize( bandNo ); + } + mOutputNoData[bandNo-1] = noData; + mHasOutputNoData[bandNo-1] = true; +} + +void QgsRasterNuller::setNoData( int bandNo, QgsRasterRangeList noData ) +{ + if ( bandNo > mNoData.size() ) + { + mNoData.resize( bandNo ); + } + mNoData[bandNo-1] = noData; +} + int QgsRasterNuller::bandCount() const { if ( mInput ) return mInput->bandCount(); @@ -56,34 +78,51 @@ QgsRasterBlock * QgsRasterNuller::block( int bandNo, QgsRectangle const & exten return outputBlock; } - //void * rasterData = mInput->block( bandNo, extent, width, height ); QgsRasterBlock *inputBlock = mInput->block( bandNo, extent, width, height ); + QgsRasterBlock *outputBlock = 0; - // Input may be without no data value - //double noDataValue = mInput->noDataValue( bandNo ); - double noDataValue = mOutputNoData; + if ( mHasOutputNoData.value( bandNo - 1 ) || inputBlock->hasNoDataValue() ) + { + double noDataValue; + if ( mHasOutputNoData.value( bandNo - 1 ) ) + { + noDataValue = mOutputNoData.value( bandNo - 1 ); + } + else + { + noDataValue = inputBlock->noDataValue(); + } + outputBlock = new QgsRasterBlock( inputBlock->dataType(), width, height, noDataValue ); + } + else + { + outputBlock = new QgsRasterBlock( inputBlock->dataType(), width, height ); + } for ( int i = 0; i < height; i++ ) { for ( int j = 0; j < width; j++ ) { - //int index = i * width + j; - - //double value = readValue( rasterData, dataType, index ); double value = inputBlock->value( i, j ); - foreach ( NoData noData, mNoData ) + bool isNoData = inputBlock->isNoData( i, j ); + if ( QgsRasterRange::contains( value, mNoData.value( bandNo - 1 ) ) ) + { + isNoData = true; + } + outputBlock->setValue( i, j, inputBlock->value( i, j ) ); + if ( isNoData ) + { + outputBlock->setIsNoData( i, j ); + } + else { - if (( value >= noData.min && value <= noData.max ) || - qgsDoubleNear( value, noData.min ) || - qgsDoubleNear( value, noData.max ) ) - { - inputBlock->setValue( i, j, noDataValue ); - } + outputBlock->setValue( i, j, value ); } } } + delete inputBlock; - return inputBlock; + return outputBlock; } diff --git a/src/core/raster/qgsrasternuller.h b/src/core/raster/qgsrasternuller.h index 6760c2ad7fcb..a319ab2e83a5 100644 --- a/src/core/raster/qgsrasternuller.h +++ b/src/core/raster/qgsrasternuller.h @@ -19,6 +19,7 @@ #define QGSRASTERNULLER_H #include "qgsrasterdataprovider.h" +#include "qgsrasterrange.h" #include "qgsrasterinterface.h" #include @@ -46,17 +47,19 @@ class CORE_EXPORT QgsRasterNuller : public QgsRasterInterface QgsRasterBlock* block( int bandNo, const QgsRectangle &extent, int width, int height ); - void setNoData( QList noData ) { mNoData = noData; } + void setNoData( int bandNo, QgsRasterRangeList noData ); - QList noData() const { return mNoData; } + QgsRasterRangeList noData( int bandNo ) const { return mNoData.value( bandNo -1 ); } /** \brief Set output no data value. */ - void setOutputNoData( double noData ) { mOutputNoData = noData; } + void setOutputNoDataValue( int bandNo, double noData ); private: - QList mNoData; - // no data to be set in output - double mOutputNoData; + // no data indext from 0 + QVector< QgsRasterRangeList > mNoData; + // no data to be set in output, indexed form 0 + QVector mOutputNoData; + QVector mHasOutputNoData; }; #endif // QGSRASTERNULLER_H diff --git a/src/core/raster/qgsrasterprojector.h b/src/core/raster/qgsrasterprojector.h index 1703bf3b9627..554503ef5ce0 100644 --- a/src/core/raster/qgsrasterprojector.h +++ b/src/core/raster/qgsrasterprojector.h @@ -16,7 +16,7 @@ ***************************************************************************/ /* This code takes ideas from WarpBuilder in Geotools. - * Thank you to Ing. Andrea Aime, Ing. Simone Giannecchini and GeoSolutions S.A.S. + * Thank to Ing. Andrea Aime, Ing. Simone Giannecchini and GeoSolutions S.A.S. * See : http://geo-solutions.blogspot.com/2011/01/developers-corner-improving.html */ @@ -57,7 +57,9 @@ class CORE_EXPORT QgsRasterProjector : public QgsRasterInterface QgsRectangle theExtent ); QgsRasterProjector(); - // * copy constructor to avoid synthesized which fails on copy of QgsCoordinateTransform (QObject child) in Python bindings + /** \brief Copy constructor */ + // To avoid synthesized which fails on copy of QgsCoordinateTransform + // (QObject child) in Python bindings QgsRasterProjector( const QgsRasterProjector &projector ); /** \brief The destructor */ @@ -86,6 +88,9 @@ class CORE_EXPORT QgsRasterProjector : public QgsRasterInterface mMaxSrcXRes = theMaxSrcXRes; mMaxSrcYRes = theMaxSrcYRes; } + QgsRasterBlock *block( int bandNo, const QgsRectangle & extent, int width, int height ); + + private: /** get source extent */ QgsRectangle srcExtent() { return mSrcExtent; } @@ -101,10 +106,6 @@ class CORE_EXPORT QgsRasterProjector : public QgsRasterInterface int dstRows() const { return mDestRows; } int dstCols() const { return mDestCols; } - QgsRasterBlock *block( int bandNo, const QgsRectangle & extent, int width, int height ); - - - private: /** \brief get destination point for _current_ destination position */ void destPointOnCPMatrix( int theRow, int theCol, double *theX, double *theY ); diff --git a/src/core/raster/qgsrasterviewport.h b/src/core/raster/qgsrasterviewport.h index 4e8f0bdbcb5b..db7c80d42089 100644 --- a/src/core/raster/qgsrasterviewport.h +++ b/src/core/raster/qgsrasterviewport.h @@ -30,28 +30,27 @@ struct QgsRasterViewPort { - // NOT IN MAP SPACE BUT DEVICE SPACE - /** \brief Coordinate (in geographic coordinate system) of top left corner of the part of the raster that - * is to be rendered.*/ - QgsPoint topLeftPoint; - /** \brief Coordinate (in geographic coordinate system) of bottom right corner of the part of the raster that - * is to be rendered.*/ - QgsPoint bottomRightPoint; - /** \brief Distance in map units from left edge to right edge for the part of the raster that - * is to be rendered.*/ - - int drawableAreaXDim; - /** \brief Distance in map units from bottom edge to top edge for the part of the raster that - * is to be rendered.*/ - int drawableAreaYDim; - - // intersection of current map extent and layer extent + /** \brief Coordinate (in output device coordinate system) of top left corner + * of the part of the raster that is to be rendered.*/ + QgsPoint mTopLeftPoint; + /** \brief Coordinate (in output device coordinate system) of bottom right corner + * of the part of the raster that is to be rendered.*/ + QgsPoint mBottomRightPoint; + + /** \brief Width, number of columns to be rendered */ + int mWidth; + /** \brief Distance in map units from bottom edge to top edge for the part of + * the raster that is to be rendered.*/ + /** \brief Height, number of rows to be rendered */ + int mHeight; + + /** \brief Intersection of current map extent and layer extent */ QgsRectangle mDrawnExtent; - // Source coordinate system + /** \brief Source coordinate system */ QgsCoordinateReferenceSystem mSrcCRS; - // Target coordinate system + /** \brief Target coordinate system */ QgsCoordinateReferenceSystem mDestCRS; }; diff --git a/src/gui/qgsrasterlayersaveasdialog.cpp b/src/gui/qgsrasterlayersaveasdialog.cpp index 3461f4860696..a550b10ff84c 100644 --- a/src/gui/qgsrasterlayersaveasdialog.cpp +++ b/src/gui/qgsrasterlayersaveasdialog.cpp @@ -797,18 +797,17 @@ void QgsRasterLayerSaveAsDialog::adjustNoDataCellWidth( int row, int column ) lineEdit->setFixedWidth( width ); } -QList QgsRasterLayerSaveAsDialog::noData() const +QgsRasterRangeList QgsRasterLayerSaveAsDialog::noData() const { - QList noDataList; + QgsRasterRangeList noDataList; if ( ! mNoDataGroupBox->isChecked() ) return noDataList; for ( int r = 0 ; r < mNoDataTableWidget->rowCount(); r++ ) { - QgsRasterNuller::NoData noData; - noData.min = noDataCellValue( r, 0 ); - noData.max = noDataCellValue( r, 1 ); + QgsRasterRange noData( noDataCellValue( r, 0 ), noDataCellValue( r, 1 ) ); noDataList.append( noData ); + } return noDataList; } diff --git a/src/gui/qgsrasterlayersaveasdialog.h b/src/gui/qgsrasterlayersaveasdialog.h index 5cda21c52471..3a5d3d4d5f28 100644 --- a/src/gui/qgsrasterlayersaveasdialog.h +++ b/src/gui/qgsrasterlayersaveasdialog.h @@ -18,7 +18,7 @@ #include "ui_qgsrasterlayersaveasdialogbase.h" #include "qgsrectangle.h" #include "qgscoordinatereferencesystem.h" -#include "qgsrasternuller.h" +#include "qgsrasterrange.h" class QgsRasterLayer; class QgsRasterDataProvider; @@ -70,7 +70,7 @@ class GUI_EXPORT QgsRasterLayerSaveAsDialog: public QDialog, private Ui::QgsRast QgsCoordinateReferenceSystem outputCrs(); QStringList createOptions() const; QgsRectangle outputRectangle() const; - QList noData() const; + QgsRasterRangeList noData() const; QList< int > pyramidsList() const; QgsRaster::RasterBuildPyramids buildPyramidsFlag() const; diff --git a/src/gui/qgsrubberband.cpp b/src/gui/qgsrubberband.cpp index 1646c14206d6..cef1a98c5575 100644 --- a/src/gui/qgsrubberband.cpp +++ b/src/gui/qgsrubberband.cpp @@ -484,16 +484,17 @@ void QgsRubberBand::updateRect() { return; } - QgsRectangle r( it->x() + mTranslationOffsetX, it->y() + mTranslationOffsetY, - it->x() + mTranslationOffsetX, it->y() + mTranslationOffsetY ); + qreal s = ( mIconSize - 1 ) / 2; + qreal p = mWidth; + + QgsRectangle r ( it->x() + mTranslationOffsetX - s - p, it->y() + mTranslationOffsetY - s - p, + it->x() + mTranslationOffsetX + s + p, it->y() + mTranslationOffsetY + s + p ); for ( int i = 0; i < mPoints.size(); ++i ) { QList::const_iterator it = mPoints.at( i ).constBegin(); for ( ; it != mPoints.at( i ).constEnd(); ++it ) { - qreal s = ( mIconSize - 1 ) / 2; - qreal p = mWidth; QgsRectangle rect = QgsRectangle( it->x() + mTranslationOffsetX - s - p, it->y() + mTranslationOffsetY - s - p, it->x() + mTranslationOffsetX + s + p, it->y() + mTranslationOffsetY + s + p ); r.combineExtentWith( &rect ); diff --git a/src/plugins/georeferencer/qgsgcpcanvasitem.cpp b/src/plugins/georeferencer/qgsgcpcanvasitem.cpp index 0c3f2727fb45..d1242018edf0 100644 --- a/src/plugins/georeferencer/qgsgcpcanvasitem.cpp +++ b/src/plugins/georeferencer/qgsgcpcanvasitem.cpp @@ -198,7 +198,7 @@ double QgsGCPCanvasItem::residualToScreenFactor() const QgsRasterLayer* rasterLayer = dynamic_cast( mapLayer ); if ( rasterLayer ) { - mapUnitsPerRasterPixel = rasterLayer->rasterUnitsPerPixel(); + mapUnitsPerRasterPixel = rasterLayer->rasterUnitsPerPixelX(); } } } diff --git a/src/plugins/georeferencer/qgsgeorefplugingui.cpp b/src/plugins/georeferencer/qgsgeorefplugingui.cpp index 2da0d46749de..d86676ecb513 100644 --- a/src/plugins/georeferencer/qgsgeorefplugingui.cpp +++ b/src/plugins/georeferencer/qgsgeorefplugingui.cpp @@ -632,7 +632,7 @@ void QgsGeorefPluginGui::showGeorefConfigDialog() // Histogram stretch slots void QgsGeorefPluginGui::fullHistogramStretch() { - mLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum ); + mLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum ); mLayer->setCacheImage( NULL ); mCanvas->refresh(); } @@ -641,7 +641,7 @@ void QgsGeorefPluginGui::localHistogramStretch() { QgsRectangle rectangle = mIface->mapCanvas()->mapRenderer()->outputExtentToLayerExtent( mLayer, mIface->mapCanvas()->extent() ); - mLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax, rectangle ); + mLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax, rectangle ); mLayer->setCacheImage( NULL ); mCanvas->refresh(); } diff --git a/src/providers/gdal/qgsgdalprovider.cpp b/src/providers/gdal/qgsgdalprovider.cpp index 5831cd01c507..722e89563864 100644 --- a/src/providers/gdal/qgsgdalprovider.cpp +++ b/src/providers/gdal/qgsgdalprovider.cpp @@ -386,7 +386,7 @@ QgsRasterBlock* QgsGdalProvider::block( int theBandNo, const QgsRectangle &theEx block->setIsNoDataExcept( subRect ); } readBlock( theBandNo, theExtent, theWidth, theHeight, block->bits() ); - block->applyNoDataValues( userNoDataValue( theBandNo ) ); + block->applyNoDataValues( userNoDataValues( theBandNo ) ); return block; } @@ -963,7 +963,7 @@ QgsRasterIdentifyResult QgsGdalProvider::identify( const QgsPoint & thePoint, Qg if (( srcHasNoDataValue( i ) && useSrcNoDataValue( i ) && ( qIsNaN( value ) || qgsDoubleNear( value, srcNoDataValue( i ) ) ) ) || - ( QgsRasterRange::contains( value, userNoDataValue( i ) ) ) ) + ( QgsRasterRange::contains( value, userNoDataValues( i ) ) ) ) { results.insert( i, QVariant() ); // null QVariant represents no data } @@ -1152,7 +1152,7 @@ bool QgsGdalProvider::hasHistogram( int theBandNo, } if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) || - userNoDataValue( theBandNo ).size() > 0 ) + userNoDataValues( theBandNo ).size() > 0 ) { QgsDebugMsg( "Custom no data values -> GDAL histogram not sufficient." ); return false; @@ -1234,7 +1234,7 @@ QgsRasterHistogram QgsGdalProvider::histogram( int theBandNo, } if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) || - userNoDataValue( theBandNo ).size() > 0 ) + userNoDataValues( theBandNo ).size() > 0 ) { QgsDebugMsg( "Custom no data values, using generic histogram." ); return QgsRasterDataProvider::histogram( theBandNo, theBinCount, theMinimum, theMaximum, theExtent, theSampleSize, theIncludeOutOfRange ); @@ -2068,7 +2068,7 @@ bool QgsGdalProvider::hasStatistics( int theBandNo, initStatistics( myRasterBandStats, theBandNo, theStats, theExtent, theSampleSize ); if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) || - userNoDataValue( theBandNo ).size() > 0 ) + userNoDataValues( theBandNo ).size() > 0 ) { QgsDebugMsg( "Custom no data values -> GDAL statistics not sufficient." ); return false; @@ -2162,7 +2162,7 @@ QgsRasterBandStats QgsGdalProvider::bandStatistics( int theBandNo, int theStats, // We cannot use GDAL stats if user disabled src no data value or set // custom no data values if (( srcHasNoDataValue( theBandNo ) && !useSrcNoDataValue( theBandNo ) ) || - userNoDataValue( theBandNo ).size() > 0 ) + userNoDataValues( theBandNo ).size() > 0 ) { QgsDebugMsg( "Custom no data values, using generic statistics." ); return QgsRasterDataProvider::bandStatistics( theBandNo, theStats, theExtent, theSampleSize ); @@ -2233,8 +2233,6 @@ QgsRasterBandStats QgsGdalProvider::bandStatistics( int theBandNo, int theStats, // if stats are found populate the QgsRasterBandStats object if ( CE_None == myerval ) { - - myRasterBandStats.bandName = generateBandName( theBandNo ); myRasterBandStats.bandNumber = theBandNo; myRasterBandStats.range = pdfMax - pdfMin; myRasterBandStats.minimumValue = pdfMin; @@ -2555,11 +2553,6 @@ bool QgsGdalProvider::setNoDataValue( int bandNo, double noDataValue ) return true; } -QStringList QgsGdalProvider::createFormats() const -{ - return QStringList(); -} - bool QgsGdalProvider::remove() { if ( mGdalDataset ) diff --git a/src/providers/gdal/qgsgdalprovider.h b/src/providers/gdal/qgsgdalprovider.h index 25e3e20583b2..9e7666262182 100644 --- a/src/providers/gdal/qgsgdalprovider.h +++ b/src/providers/gdal/qgsgdalprovider.h @@ -228,24 +228,11 @@ class QgsGdalProvider : public QgsRasterDataProvider, QgsGdalProviderBase static QMap supportedMimes(); - /** Creates a new dataset with mDataSourceURI - @return true in case of success*/ - /* - bool create( const QString& format, int nBands, - QGis::DataType type, - int width, int height, double* geoTransform, - const QgsCoordinateReferenceSystem& crs, - QStringList createOptions = QStringList() ); - */ - /**Writes into the provider datasource*/ bool write( void* data, int band, int width, int height, int xOffset, int yOffset ); bool setNoDataValue( int bandNo, double noDataValue ); - /**Returns the formats supported by create()*/ - QStringList createFormats() const; - /**Remove dataset*/ bool remove(); diff --git a/src/providers/grass/qgsgrassrasterprovider.cpp b/src/providers/grass/qgsgrassrasterprovider.cpp index a13390f79b61..5945c2b0f74d 100644 --- a/src/providers/grass/qgsgrassrasterprovider.cpp +++ b/src/providers/grass/qgsgrassrasterprovider.cpp @@ -463,7 +463,7 @@ QgsRasterIdentifyResult QgsGrassRasterProvider::identify( const QgsPoint & thePo } // Apply user no data - QgsRasterRangeList myNoDataRangeList = userNoDataValue( 1 ); + QgsRasterRangeList myNoDataRangeList = userNoDataValues( 1 ); if ( QgsRasterRange::contains( value, myNoDataRangeList ) ) { return noDataResult; diff --git a/src/providers/ogr/qgsogrprovider.cpp b/src/providers/ogr/qgsogrprovider.cpp index 20f4e87a7fad..0716d9615662 100644 --- a/src/providers/ogr/qgsogrprovider.cpp +++ b/src/providers/ogr/qgsogrprovider.cpp @@ -1850,7 +1850,7 @@ QGISEXTERN bool createEmptyDataSource( const QString &uri, char **papszOptions = NULL; if ( driverName == "ESRI Shapefile" ) { - papszOptions = CSLSetNameValue( papszOptions, "ENCODING", encoding.toLocal8Bit().data() ); + papszOptions = CSLSetNameValue( papszOptions, "ENCODING", QgsVectorFileWriter::convertCodecNameForEncodingOption( encoding ).toLocal8Bit().data() ); // OGR Shapefile fails to create fields if given encoding is not supported by its side // so disable encoding conversion of OGR Shapefile layer CPLSetConfigOption( "SHAPE_ENCODING", "" ); diff --git a/src/providers/wcs/qgswcsprovider.cpp b/src/providers/wcs/qgswcsprovider.cpp index b23b02020fd6..76364a65d7cf 100644 --- a/src/providers/wcs/qgswcsprovider.cpp +++ b/src/providers/wcs/qgswcsprovider.cpp @@ -1701,7 +1701,7 @@ QgsRasterIdentifyResult QgsWcsProvider::identify( const QgsPoint & thePoint, Qgs // Apply no data and user no data if (( srcHasNoDataValue( i ) && useSrcNoDataValue( i ) && ( qIsNaN( value ) || qgsDoubleNear( value, srcNoDataValue( i ) ) ) ) || - ( QgsRasterRange::contains( value, userNoDataValue( i ) ) ) ) + ( QgsRasterRange::contains( value, userNoDataValues( i ) ) ) ) { results.insert( i, QVariant() ); } diff --git a/src/providers/wms/qgswmsprovider.cpp b/src/providers/wms/qgswmsprovider.cpp index 8ad2a9a8e0a3..a262f2958a27 100644 --- a/src/providers/wms/qgswmsprovider.cpp +++ b/src/providers/wms/qgswmsprovider.cpp @@ -4270,9 +4270,11 @@ QgsRasterIdentifyResult QgsWmsProvider::identify( const QgsPoint & thePoint, Qgs QMap features = gml.featuresMap(); QgsDebugMsg( QString( "%1 features read" ).arg( features.size() ) ); QgsFeatureStore featureStore( fields, crs() ); - featureStore.params().insert( "sublayer", *layers ); - featureStore.params().insert( "featureType", featureTypeName ); - featureStore.params().insert( "getFeatureInfoUrl", requestUrl.toString() ); + QMap params; + params.insert( "sublayer", *layers ); + params.insert( "featureType", featureTypeName ); + params.insert( "getFeatureInfoUrl", requestUrl.toString() ); + featureStore.setParams( params ); foreach ( QgsFeatureId id, features.keys() ) { QgsFeature * feature = features.value( id ); diff --git a/src/ui/qgscomposermapwidgetbase.ui b/src/ui/qgscomposermapwidgetbase.ui index fb9d100dfdb5..f86ecc5f55d9 100644 --- a/src/ui/qgscomposermapwidgetbase.ui +++ b/src/ui/qgscomposermapwidgetbase.ui @@ -663,6 +663,23 @@ + + + + Overview blending mode + + + + + + + + + + Invert overview + + + @@ -680,6 +697,11 @@
qgscollapsiblegroupbox.h
1 + + QgsBlendModeComboBox + QComboBox +
qgsblendmodecombobox.h
+
diff --git a/src/ui/qgsdiagrampropertiesbase.ui b/src/ui/qgsdiagrampropertiesbase.ui index 7aee65f9f040..937e34306ca8 100644 --- a/src/ui/qgsdiagrampropertiesbase.ui +++ b/src/ui/qgsdiagrampropertiesbase.ui @@ -39,8 +39,8 @@ 0 0 - 752 - 613 + 743 + 644 @@ -118,17 +118,12 @@ - - - - - 0 - 0 - 713 - 394 - - - + + + 0 + + + Appearance @@ -315,16 +310,8 @@ - - - - 0 - 0 - 715 - 278 - - - + + Size @@ -393,6 +380,9 @@ QFrame::Plain + + 0 + @@ -406,32 +396,41 @@ - - - Attribute - - - - - - - - 0 - 0 - - - - - - - - Find maximum value - + + + + 0 + + + + + Attribute + + + + + + + + 0 + 0 + + + + + + + + Find maximum value + + + + + + + - - - @@ -445,7 +444,7 @@ 10000000 - 100 + 50 @@ -504,16 +503,8 @@ - - - - 0 - 0 - 713 - 271 - - - + + Position @@ -666,16 +657,8 @@ - - - - 0 - 0 - 728 - 166 - - - + + Options @@ -980,12 +963,12 @@ setEnabled(bool) - 75 - 118 + 48 + 122 - 158 - 118 + 78 + 122 @@ -996,12 +979,12 @@ setDisabled(bool) - 75 - 118 + 48 + 122 - 390 - 222 + 77 + 132 diff --git a/src/ui/qgsoptionsbase.ui b/src/ui/qgsoptionsbase.ui index 1901a8dd5711..fccf30d18fe3 100644 --- a/src/ui/qgsoptionsbase.ui +++ b/src/ui/qgsoptionsbase.ui @@ -1506,7 +1506,10 @@ - Ignore shapefile encoding + Ignore shapefile encoding declaration + + + Disable OGR on-the-fly conversion from declared encoding to UTF-8 diff --git a/tests/src/core/CMakeLists.txt b/tests/src/core/CMakeLists.txt index e1350fd849aa..6074a6f5bd45 100644 --- a/tests/src/core/CMakeLists.txt +++ b/tests/src/core/CMakeLists.txt @@ -91,6 +91,7 @@ ADD_QGIS_TEST(contrastenhancementtest testcontrastenhancements.cpp) ADD_QGIS_TEST(maplayertest testqgsmaplayer.cpp) ADD_QGIS_TEST(rendererstest testqgsrenderers.cpp) ADD_QGIS_TEST(maprenderertest testqgsmaprenderer.cpp) +ADD_QGIS_TEST(blendmodestest testqgsblendmodes.cpp) ADD_QGIS_TEST(geometrytest testqgsgeometry.cpp) ADD_QGIS_TEST(coordinatereferencesystemtest testqgscoordinatereferencesystem.cpp) ADD_DEPENDENCIES(qgis_coordinatereferencesystemtest synccrsdb) @@ -101,6 +102,7 @@ ADD_QGIS_TEST(rulebasedrenderertest testqgsrulebasedrenderer.cpp) ADD_QGIS_TEST(ziplayertest testziplayer.cpp) ADD_QGIS_TEST(dataitemtest testqgsdataitem.cpp) ADD_QGIS_TEST(composermaptest testqgscomposermap.cpp) +ADD_QGIS_TEST(composereffectstest testqgscomposereffects.cpp) ADD_QGIS_TEST(atlascompositiontest testqgsatlascomposition.cpp) ADD_QGIS_TEST(composerlabeltest testqgscomposerlabel.cpp) ADD_QGIS_TEST(stylev2test testqgsstylev2.cpp) diff --git a/tests/src/core/testqgsblendmodes.cpp b/tests/src/core/testqgsblendmodes.cpp new file mode 100644 index 000000000000..a2ccbb90375a --- /dev/null +++ b/tests/src/core/testqgsblendmodes.cpp @@ -0,0 +1,154 @@ +/*************************************************************************** + testqgsblendmodes.cpp + -------------------------------------- + Date : May 2013 + Copyright : (C) 2013 by Nyall Dawson, Tim Sutton + Email : nyall dot dawson at gmail.com + *************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ +#include +#include +#include +#include +#include +#include +#include + +//qgis includes... +#include +#include +#include +#include +#include +#include +#include +#include +//qgis test includes +#include "qgsrenderchecker.h" + +/** \ingroup UnitTests + * This is a unit test for layer blend modes + */ +class TestQgsBlendModes: public QObject +{ + Q_OBJECT; + private slots: + void initTestCase();// will be called before the first testfunction is executed. + void cleanupTestCase();// will be called after the last testfunction was executed. + void init() {};// will be called before each testfunction is executed. + void cleanup() {};// will be called after every testfunction. + + void vectorBlending(); + void rasterBlending(); + private: + bool imageCheck( QString theType ); //as above + QgsMapRenderer * mpMapRenderer; + QgsMapLayer * mpPointsLayer; + QgsMapLayer * mpPolysLayer; + QgsRasterLayer* mRasterLayer1; + QgsRasterLayer* mRasterLayer2; + QString mTestDataDir; +}; + + +void TestQgsBlendModes::initTestCase() +{ + + // init QGIS's paths - true means that all path will be inited from prefix + QgsApplication::init(); + QgsApplication::initQgis(); + QgsApplication::showSettings(); + + //create some objects that will be used in tests + + //create a point layer + QString myDataDir( TEST_DATA_DIR ); //defined in CmakeLists.txt + mTestDataDir = myDataDir + QDir::separator(); + QString myPointsFileName = mTestDataDir + "points.shp"; + QFileInfo myPointFileInfo( myPointsFileName ); + mpPointsLayer = new QgsVectorLayer( myPointFileInfo.filePath(), + myPointFileInfo.completeBaseName(), "ogr" ); + QgsMapLayerRegistry::instance()->addMapLayers( + QList() << mpPointsLayer ); + + //create a poly layer that will be used in tests + QString myPolysFileName = mTestDataDir + "polys.shp"; + QFileInfo myPolyFileInfo( myPolysFileName ); + mpPolysLayer = new QgsVectorLayer( myPolyFileInfo.filePath(), + myPolyFileInfo.completeBaseName(), "ogr" ); + QgsMapLayerRegistry::instance()->addMapLayers( + QList() << mpPolysLayer ); + + //create two raster layers + QFileInfo rasterFileInfo( mTestDataDir + "landsat.tif" ); + mRasterLayer1 = new QgsRasterLayer( rasterFileInfo.filePath(), + rasterFileInfo.completeBaseName() ); + mRasterLayer2 = new QgsRasterLayer( rasterFileInfo.filePath(), + rasterFileInfo.completeBaseName() ); + QgsMultiBandColorRenderer* rasterRenderer = new QgsMultiBandColorRenderer( mRasterLayer1->dataProvider(), 2, 3, 4 ); + mRasterLayer1->setRenderer( rasterRenderer ); + mRasterLayer2->setRenderer( rasterRenderer ); + QgsMapLayerRegistry::instance()->addMapLayers( + QList() << mRasterLayer1 ); + QgsMapLayerRegistry::instance()->addMapLayers( + QList() << mRasterLayer2); + + mpMapRenderer = new QgsMapRenderer(); +} +void TestQgsBlendModes::cleanupTestCase() +{ + +} + +void TestQgsBlendModes::vectorBlending() +{ + //Add two vector layers + QStringList myLayers; + myLayers << mpPointsLayer->id(); + myLayers << mpPolysLayer->id(); + mpMapRenderer->setLayerSet( myLayers ); + + //Set blending modes for both layers + mpPointsLayer->setBlendMode( QPainter::CompositionMode_Overlay ); + mpPolysLayer->setBlendMode( QPainter::CompositionMode_Multiply ); + mpMapRenderer->setExtent( mpPointsLayer->extent() ); + QVERIFY( imageCheck( "vector_blendmodes" ) ); +} + +void TestQgsBlendModes::rasterBlending() +{ + //Add two raster layers to map renderer + QStringList myLayers; + myLayers << mRasterLayer1->id(); + myLayers << mRasterLayer2->id(); + mpMapRenderer->setLayerSet( myLayers ); + mpMapRenderer->setExtent( mRasterLayer1->extent() ); + + // set blending mode for top layer + mRasterLayer1->setBlendMode( QPainter::CompositionMode_Plus ); + QVERIFY( imageCheck( "raster_blendmodes" ) ); +} + +// +// Private helper functions not called directly by CTest +// + +bool TestQgsBlendModes::imageCheck( QString theTestType ) +{ + //use the QgsRenderChecker test utility class to + //ensure the rendered output matches our control image + QgsRenderChecker myChecker; + myChecker.setControlName( "expected_" + theTestType ); + myChecker.setMapRenderer( mpMapRenderer ); + bool myResultFlag = myChecker.runTest( theTestType ); + return myResultFlag; +} + +QTEST_MAIN( TestQgsBlendModes ) +#include "moc_testqgsblendmodes.cxx" diff --git a/tests/src/core/testqgscomposereffects.cpp b/tests/src/core/testqgscomposereffects.cpp new file mode 100644 index 000000000000..7b152fce4854 --- /dev/null +++ b/tests/src/core/testqgscomposereffects.cpp @@ -0,0 +1,103 @@ +/*************************************************************************** + testqgscomposereffects.cpp + ---------------------- + begin : April 2013 + copyright : (C) 2013 by Marco Hugentobler, Nyall Dawson + email : nyall dot dawson at gmail.com + ***************************************************************************/ + +/*************************************************************************** + * * + * This program is free software; you can redistribute it and/or modify * + * it under the terms of the GNU General Public License as published by * + * the Free Software Foundation; either version 2 of the License, or * + * (at your option) any later version. * + * * + ***************************************************************************/ + +#include "qgsapplication.h" +#include "qgscomposition.h" +#include "qgscompositionchecker.h" +#include "qgscomposershape.h" +#include "qgsmaprenderer.h" +#include +#include +#include +#include + +class TestQgsComposerEffects: public QObject +{ + Q_OBJECT; + private slots: + void initTestCase();// will be called before the first testfunction is executed. + void cleanupTestCase();// will be called after the last testfunction was executed. + void init();// will be called before each testfunction is executed. + void cleanup();// will be called after every testfunction. + void blend_modes(); //test if composer item blending is functioning + void transparency(); //test if composer transparency is functioning + + private: + QgsComposition* mComposition; + QgsComposerShape* mComposerRect1; + QgsComposerShape* mComposerRect2; + QgsMapRenderer* mMapRenderer; +}; + +void TestQgsComposerEffects::initTestCase() +{ + QgsApplication::init(); + QgsApplication::initQgis(); + + //create composition with two rectangles + mMapRenderer = new QgsMapRenderer(); + + mComposition = new QgsComposition( mMapRenderer ); + mComposition->setPaperSize( 297, 210 ); //A4 landscape + mComposerRect1 = new QgsComposerShape( 20, 20, 150, 100, mComposition ); + mComposerRect1->setShapeType( QgsComposerShape::Rectangle ); + mComposerRect1->setBackgroundColor( QColor::fromRgb( 255, 150, 0 ) ); + mComposition->addComposerShape( mComposerRect1 ); + mComposerRect2 = new QgsComposerShape( 50, 50, 150, 100, mComposition ); + mComposerRect2->setBackgroundColor( QColor::fromRgb( 0, 100, 150 ) ); + mComposerRect2->setShapeType( QgsComposerShape::Rectangle ); + mComposition->addComposerShape( mComposerRect2 ); + +} + +void TestQgsComposerEffects::cleanupTestCase() +{ + delete mComposition; +} + +void TestQgsComposerEffects::init() +{ + +} + +void TestQgsComposerEffects::cleanup() +{ + +} + +void TestQgsComposerEffects::blend_modes() +{ + mComposerRect2->setBlendMode( QPainter::CompositionMode_Multiply ); + + QgsCompositionChecker checker( "Composer effects blending", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() + + "control_images" + QDir::separator() + "expected_composereffects" + QDir::separator() + "composereffect_blend.png" ) ); + QVERIFY( checker.testComposition() ); + // reset blending + mComposerRect2->setBlendMode( QPainter::CompositionMode_SourceOver ); +} + +void TestQgsComposerEffects::transparency() +{ + mComposerRect2->setTransparency( 50 ); + + QgsCompositionChecker checker( "Composer item transparency", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() + + "control_images" + QDir::separator() + "expected_composereffects" + QDir::separator() + "composereffect_transparency.png" ) ); + QVERIFY( checker.testComposition() ); +} + +QTEST_MAIN( TestQgsComposerEffects ) +#include "moc_testqgscomposereffects.cxx" diff --git a/tests/src/core/testqgscomposermap.cpp b/tests/src/core/testqgscomposermap.cpp index 6c0e9648ba1d..948340ba6f4d 100644 --- a/tests/src/core/testqgscomposermap.cpp +++ b/tests/src/core/testqgscomposermap.cpp @@ -37,6 +37,8 @@ class TestQgsComposerMap: public QObject void render(); //test if rendering of the composition with composr map is correct void grid(); //test if grid and grid annotation works void overviewMap(); //test if overview map frame works + void overviewMapBlending(); //test if blend modes with overview map frame works + void overviewMapInvert(); //test if invert of overview map frame works void uniqueId(); //test if map id is adapted when doing copy paste void zebraStyle(); //test zebra map border style @@ -135,6 +137,40 @@ void TestQgsComposerMap::overviewMap() QVERIFY( testResult ); } +void TestQgsComposerMap::overviewMapBlending() +{ + QgsComposerMap* overviewMapBlend = new QgsComposerMap( mComposition, 20, 130, 70, 70 ); + overviewMapBlend->setFrameEnabled( true ); + mComposition->addComposerMap( overviewMapBlend ); + mComposerMap->setNewExtent( QgsRectangle( 785462.375, 3341423.125, 789262.375, 3343323.125 ) ); //zoom in + overviewMapBlend->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3350923.125 ) ); + overviewMapBlend->setOverviewFrameMap( mComposerMap->id() ); + overviewMapBlend->setOverviewBlendMode( QPainter::CompositionMode_Multiply ); + + QgsCompositionChecker checker( "Composer map overview blending", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() + + "control_images" + QDir::separator() + "expected_composermap" + QDir::separator() + "composermap_landsat_overview_blend.png" ) ); + bool testResult = checker.testComposition(); + mComposition->removeComposerItem( overviewMapBlend ); + QVERIFY( testResult ); +} + +void TestQgsComposerMap::overviewMapInvert() +{ + QgsComposerMap* overviewMapInvert = new QgsComposerMap( mComposition, 20, 130, 70, 70 ); + overviewMapInvert->setFrameEnabled( true ); + mComposition->addComposerMap( overviewMapInvert ); + mComposerMap->setNewExtent( QgsRectangle( 785462.375, 3341423.125, 789262.375, 3343323.125 ) ); //zoom in + overviewMapInvert->setNewExtent( QgsRectangle( 781662.375, 3339523.125, 793062.375, 3350923.125 ) ); + overviewMapInvert->setOverviewFrameMap( mComposerMap->id() ); + overviewMapInvert->setOverviewInverted( true ); + + QgsCompositionChecker checker( "Composer map overview invert", mComposition, QString( QString( TEST_DATA_DIR ) + QDir::separator() + + "control_images" + QDir::separator() + "expected_composermap" + QDir::separator() + "composermap_landsat_overview_invert.png" ) ); + bool testResult = checker.testComposition(); + mComposition->removeComposerItem( overviewMapInvert ); + QVERIFY( testResult ); +} + void TestQgsComposerMap::uniqueId() { QDomDocument doc; diff --git a/tests/src/core/testqgsrasterfilewriter.cpp b/tests/src/core/testqgsrasterfilewriter.cpp index 298d2567c06b..8296a153b516 100644 --- a/tests/src/core/testqgsrasterfilewriter.cpp +++ b/tests/src/core/testqgsrasterfilewriter.cpp @@ -139,7 +139,10 @@ bool TestQgsRasterFileWriter::writeTest( QString theRasterName ) // Nuller currently is not really used QgsRasterNuller *nuller = new QgsRasterNuller(); - //nuller->setNoData( ... ); + for ( int band = 1; band <= provider->bandCount(); band++ ) + { + //nuller->setNoData( ... ); + } if ( !pipe->insert( 1, nuller ) ) { logError( "Cannot set pipe nuller" ); diff --git a/tests/src/core/testqgsrasterlayer.cpp b/tests/src/core/testqgsrasterlayer.cpp index 5ffcc2d7f09b..6094a1831061 100644 --- a/tests/src/core/testqgsrasterlayer.cpp +++ b/tests/src/core/testqgsrasterlayer.cpp @@ -152,7 +152,7 @@ void TestQgsRasterLayer::cleanupTestCase() void TestQgsRasterLayer::isValid() { QVERIFY( mpRasterLayer->isValid() ); - mpRasterLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax ); + mpRasterLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax ); mpMapRenderer->setExtent( mpRasterLayer->extent() ); QVERIFY( render( "raster" ) ); } @@ -290,7 +290,7 @@ void TestQgsRasterLayer::colorRamp4() void TestQgsRasterLayer::landsatBasic() { - mpLandsatRasterLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax ); + mpLandsatRasterLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax ); QStringList myLayers; myLayers << mpLandsatRasterLayer->id(); mpMapRenderer->setLayerSet( myLayers ); @@ -446,7 +446,7 @@ void TestQgsRasterLayer::transparency() QVERIFY( mpFloat32RasterLayer->isValid() ); QgsSingleBandGrayRenderer* renderer = new QgsSingleBandGrayRenderer( mpRasterLayer->dataProvider(), 1 ); mpFloat32RasterLayer->setRenderer( renderer ); - mpFloat32RasterLayer->setContrastEnhancementAlgorithm( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax ); + mpFloat32RasterLayer->setContrastEnhancement( QgsContrastEnhancement::StretchToMinimumMaximum, QgsRaster::ContrastEnhancementMinMax ); qDebug( "contrastEnhancement.minimumValue = %.17g", renderer->contrastEnhancement()->minimumValue() ); qDebug( "contrastEnhancement.maximumValue = %.17g", renderer->contrastEnhancement()->maximumValue() ); diff --git a/tests/src/python/CMakeLists.txt b/tests/src/python/CMakeLists.txt index cb9134b3a5fc..d9f59b894708 100644 --- a/tests/src/python/CMakeLists.txt +++ b/tests/src/python/CMakeLists.txt @@ -15,6 +15,7 @@ ADD_PYTHON_TEST(PyQgsComposerHtml test_qgscomposerhtml.py) ADD_PYTHON_TEST(PyQgsComposition test_qgscomposition.py) ADD_PYTHON_TEST(PyQgsAnalysis test_qgsanalysis.py) ADD_PYTHON_TEST(PyQgsComposerMap test_qgscomposermap.py) +ADD_PYTHON_TEST(PyQgsComposerEffects test_qgscomposereffects.py) ADD_PYTHON_TEST(PyQgsSymbolLayerV2 test_qgssymbollayerv2.py) ADD_PYTHON_TEST(PyQgsPoint test_qgspoint.py) ADD_PYTHON_TEST(PyQgsAtlasComposition test_qgsatlascomposition.py) diff --git a/tests/src/python/test_qgscomposereffects.py b/tests/src/python/test_qgscomposereffects.py new file mode 100644 index 000000000000..505dd9069b56 --- /dev/null +++ b/tests/src/python/test_qgscomposereffects.py @@ -0,0 +1,93 @@ +# -*- coding: utf-8 -*- +"""QGIS Unit tests for QgsComposerEffects. + +.. note:: This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. +""" +__author__ = '(C) 2012 by Dr. Horst Düster / Dr. Marco Hugentobler' +__date__ = '20/08/2012' +__copyright__ = 'Copyright 2012, The Quantum GIS Project' +# This will get replaced with a git SHA1 when you do a git archive +__revision__ = '$Format:%H$' + +import os +from PyQt4.QtCore import (QStringList, + QFileInfo) +from PyQt4.QtXml import QDomDocument +from PyQt4.QtGui import (QPainter, QColor) + +from qgis.core import (QgsComposerShape, + QgsRectangle, + QgsComposition, + QgsMapRenderer + ) +from utilities import (unitTestDataPath, + getQgisTestApp, + TestCase, + unittest, + expectedFailure + ) +from qgscompositionchecker import QgsCompositionChecker + +QGISAPP, CANVAS, IFACE, PARENT = getQgisTestApp() +TEST_DATA_DIR = unitTestDataPath() + + +class TestQgsComposerEffects(TestCase): + + def __init__(self, methodName): + """Run once on class initialisation.""" + unittest.TestCase.__init__(self, methodName) + + # create composition + self.mMapRenderer = QgsMapRenderer() + self.mComposition = QgsComposition(self.mMapRenderer) + self.mComposition.setPaperSize(297, 210) + + self.mComposerRect1 = QgsComposerShape(20, 20, 150, 100, self.mComposition) + self.mComposerRect1.setShapeType(QgsComposerShape.Rectangle) + self.mComposerRect1.setBackgroundColor(QColor.fromRgb(255, 150, 0)) + self.mComposition.addComposerShape(self.mComposerRect1) + + self.mComposerRect2 = QgsComposerShape(50, 50, 150, 100, self.mComposition) + self.mComposerRect2.setShapeType(QgsComposerShape.Rectangle) + self.mComposerRect2.setBackgroundColor(QColor.fromRgb(0, 100, 150)) + self.mComposition.addComposerShape(self.mComposerRect2) + + def testBlendModes(self): + """Test that blend modes work for composer items.""" + + self.mComposerRect2.setBlendMode(QPainter.CompositionMode_Multiply) + + checker = QgsCompositionChecker() + myPath = os.path.join(TEST_DATA_DIR, + 'control_images', + 'expected_composereffects', + 'composereffect_blend.png') + myTestResult, myMessage = checker.testComposition('Composer effects blending', + self.mComposition, myPath) + self.mComposerRect2.setBlendMode(QPainter.CompositionMode_SourceOver) + + assert myTestResult == True, myMessage + + def testTransparency(self): + """Test that transparency works for composer items.""" + + self.mComposerRect2.setTransparency( 50 ) + + checker = QgsCompositionChecker() + myPath = os.path.join(TEST_DATA_DIR, + 'control_images', + 'expected_composereffects', + 'composereffect_transparency.png') + myTestResult, myMessage = checker.testComposition('Composer effects transparency', + self.mComposition, myPath) + self.mComposerRect2.setTransparency( 100 ) + + assert myTestResult == True, myMessage + +if __name__ == '__main__': + unittest.main() + diff --git a/tests/src/python/test_qgscomposermap.py b/tests/src/python/test_qgscomposermap.py index 6654fe81f3e1..1c8a4383d11d 100644 --- a/tests/src/python/test_qgscomposermap.py +++ b/tests/src/python/test_qgscomposermap.py @@ -16,6 +16,7 @@ from PyQt4.QtCore import (QStringList, QFileInfo) from PyQt4.QtXml import QDomDocument +from PyQt4.QtGui import QPainter from qgis.core import (QgsComposerMap, QgsRectangle, @@ -126,7 +127,56 @@ def testOverviewMap(self): self.mComposition.removeComposerItem(overviewMap) assert myTestResult == True, myMessage - + def testOverviewMapBlend(self): + overviewMap = QgsComposerMap(self.mComposition, 20, 130, 70, 70) + overviewMap.setFrameEnabled(True) + self.mComposition.addComposerMap(overviewMap) + # zoom in + myRectangle = QgsRectangle(785462.375, 3341423.125, + 789262.375, 3343323.125) + self.mComposerMap.setNewExtent(myRectangle) + myRectangle2 = QgsRectangle(781662.375, 3339523.125, + 793062.375, 3350923.125) + overviewMap.setNewExtent(myRectangle2) + overviewMap.setOverviewFrameMap(self.mComposerMap.id()) + overviewMap.setOverviewBlendMode(QPainter.CompositionMode_Multiply) + checker = QgsCompositionChecker() + myPngPath = os.path.join(TEST_DATA_DIR, + 'control_images', + 'expected_composermap', + 'composermap_landsat_overview_blend.png') + myTestResult, myMessage = checker.testComposition( + 'Composer map overview blending', + self.mComposition, + myPngPath) + self.mComposition.removeComposerItem(overviewMap) + assert myTestResult == True, myMessage + + def testOverviewMapInvert(self): + overviewMap = QgsComposerMap(self.mComposition, 20, 130, 70, 70) + overviewMap.setFrameEnabled(True) + self.mComposition.addComposerMap(overviewMap) + # zoom in + myRectangle = QgsRectangle(785462.375, 3341423.125, + 789262.375, 3343323.125) + self.mComposerMap.setNewExtent(myRectangle) + myRectangle2 = QgsRectangle(781662.375, 3339523.125, + 793062.375, 3350923.125) + overviewMap.setNewExtent(myRectangle2) + overviewMap.setOverviewFrameMap(self.mComposerMap.id()) + overviewMap.setOverviewInverted(True) + checker = QgsCompositionChecker() + myPngPath = os.path.join(TEST_DATA_DIR, + 'control_images', + 'expected_composermap', + 'composermap_landsat_overview_invert.png') + myTestResult, myMessage = checker.testComposition( + 'Composer map overview inverted', + self.mComposition, + myPngPath) + self.mComposition.removeComposerItem(overviewMap) + assert myTestResult == True, myMessage + # Fails because addItemsFromXML has been commented out in sip @expectedFailure def testuniqueId(self): diff --git a/tests/src/python/test_qgsrasterlayer.py b/tests/src/python/test_qgsrasterlayer.py index 7d811adadcc9..877f4f16be04 100644 --- a/tests/src/python/test_qgsrasterlayer.py +++ b/tests/src/python/test_qgsrasterlayer.py @@ -89,7 +89,7 @@ def testTransparency(self): renderer = QgsSingleBandGrayRenderer(myRasterLayer.dataProvider(), 1) myRasterLayer.setRenderer(renderer) - myRasterLayer.setContrastEnhancementAlgorithm( + myRasterLayer.setContrastEnhancement( QgsContrastEnhancement.StretchToMinimumMaximum, QgsRaster.ContrastEnhancementMinMax) diff --git a/tests/testdata/control_images/expected_composereffects/composereffect_blend.png b/tests/testdata/control_images/expected_composereffects/composereffect_blend.png new file mode 100644 index 000000000000..ef44ba11bc39 Binary files /dev/null and b/tests/testdata/control_images/expected_composereffects/composereffect_blend.png differ diff --git a/tests/testdata/control_images/expected_composereffects/composereffect_transparency.png b/tests/testdata/control_images/expected_composereffects/composereffect_transparency.png new file mode 100644 index 000000000000..ab111951395d Binary files /dev/null and b/tests/testdata/control_images/expected_composereffects/composereffect_transparency.png differ diff --git a/tests/testdata/control_images/expected_composermap/composermap_landsat_overview_blend.png b/tests/testdata/control_images/expected_composermap/composermap_landsat_overview_blend.png new file mode 100644 index 000000000000..46d215cc7e52 Binary files /dev/null and b/tests/testdata/control_images/expected_composermap/composermap_landsat_overview_blend.png differ diff --git a/tests/testdata/control_images/expected_composermap/composermap_landsat_overview_invert.png b/tests/testdata/control_images/expected_composermap/composermap_landsat_overview_invert.png new file mode 100644 index 000000000000..cfc47c7e073c Binary files /dev/null and b/tests/testdata/control_images/expected_composermap/composermap_landsat_overview_invert.png differ diff --git a/tests/testdata/control_images/expected_raster_blendmodes/expected_raster_blendmodes.png b/tests/testdata/control_images/expected_raster_blendmodes/expected_raster_blendmodes.png new file mode 100644 index 000000000000..244b513c2fe4 Binary files /dev/null and b/tests/testdata/control_images/expected_raster_blendmodes/expected_raster_blendmodes.png differ diff --git a/tests/testdata/control_images/expected_vector_blendmodes/expected_vector_blendmodes.png b/tests/testdata/control_images/expected_vector_blendmodes/expected_vector_blendmodes.png new file mode 100644 index 000000000000..9082efffa791 Binary files /dev/null and b/tests/testdata/control_images/expected_vector_blendmodes/expected_vector_blendmodes.png differ
LanguageFinished %Translators
German
100.0
Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho
Danish (Denmark)
99.9
Jacob Overgaard Madsen, Preben Lisby
Bosnian (Bosnia and Herzegovina)
99.8
Almir Karabegovic
Galician (Spain)
97.6
Xan Vieiro
Czech (Czech Republic)
95.2
Martin Landa, Peter Antolik, Martin Dzurov, Jan Helebrant
Chinese (China)
85.0
Calvin Ngei, Zhang Jun
Spanish
84.0
Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo
French
81.1
Eve Rousseau, Marc Monnerat, Lionel Roubeyrie, Jean Roc Morreale, Benjamin Bohard, Jeremy Garniaux, Yves Jacolin, Benjamin Lerre, Stéphane Morel, Marie Silvestre, Tahir Tamba, Xavier M, Mayeul Kauffmann, Mehdi Semchaoui, Robin Cura, Etienne Tourigny, Mathieu Bossaert
Estonian (Estonia)
79.5
Veiko Viil
Italian
79.2
Paolo Cavallini, Flavio Rigolon, Maurizio Napolitano, Roberto Angeletti, Alessandro Fanna, Michele Beneventi, Marco Braida, Luca Casagrande, Luca Delucchi, Anne Gishla
Swedish
78.1
Lars Luthman, Magnus Homann, Victor Axbom
Dutch
77.5
Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk
Japanese
75.9
BABA Yoshihiko, Yoichi Kayama
Portuguese (Brazil)
75.5
Arthur Nanni
Russian
75.2
Artem Popov
Polish (Poland)
75.1
Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Loskot, Tomasz Paul, Andrzej Swiader
Hungarian
74.2
Zoltan Siki
Korean (Korea, Republic of)
73.4
BJ Jang
Slovenian (Slovenia)
69.4
Jože Detečnik, Dejan Gregor
Latvian
61.6
Maris Nartiss, Pēteris Brūns
Serbian ()
61.4
Goran Ivanković
Serbian ()
61.2
Goran Ivanković
Portuguese (Portugal)
59.8
Giovanni Manghi, Joana Simoes, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva
Central Khmer
57.5
Khoem Sokhem
Indonesian
52.7
Januar V. Simarmata, I Made Anombawa
Croatian (Croatia)
51.8
Zoran Jankovic
German
99.9
Jürgen E. Fischer, Stephan Holl, Otto Dassau, Werner Macho
Danish (Denmark)
99.8
Jacob Overgaard Madsen, Preben Lisby
Bosnian (Bosnia and Herzegovina)
99.6
Almir Karabegovic
Galician (Spain)
97.5
Xan Vieiro
Czech (Czech Republic)
95.1
Martin Landa, Peter Antolik, Martin Dzurov, Jan Helebrant
Chinese (China)
84.9
Calvin Ngei, Zhang Jun
Spanish
83.9
Carlos Dávila, Javier César Aldariz, Gabriela Awad, Edwin Amado, Mayeul Kauffmann, Diana Galindo
Swedish
83.0
Lars Luthman, Magnus Homann, Victor Axbom
French
81.0
Eve Rousseau, Marc Monnerat, Lionel Roubeyrie, Jean Roc Morreale, Benjamin Bohard, Jeremy Garniaux, Yves Jacolin, Benjamin Lerre, Stéphane Morel, Marie Silvestre, Tahir Tamba, Xavier M, Mayeul Kauffmann, Mehdi Semchaoui, Robin Cura, Etienne Tourigny, Mathieu Bossaert
Estonian (Estonia)
79.4
Veiko Viil
Italian
79.1
Paolo Cavallini, Flavio Rigolon, Maurizio Napolitano, Roberto Angeletti, Alessandro Fanna, Michele Beneventi, Marco Braida, Luca Casagrande, Luca Delucchi, Anne Gishla
Dutch
77.4
Richard Duivenvoorde, Raymond Nijssen, Carlo van Rijswijk
Japanese
75.8
BABA Yoshihiko, Yoichi Kayama
Portuguese (Brazil)
75.4
Arthur Nanni
Russian
75.1
Artem Popov
Polish (Poland)
75.0
Robert Szczepanek, Milena Nowotarska, Borys Jurgiel, Mateusz Loskot, Tomasz Paul, Andrzej Swiader
Hungarian
74.1
Zoltan Siki
Korean (Korea, Republic of)
73.3
BJ Jang
Slovenian (Slovenia)
69.3
Jože Detečnik, Dejan Gregor
Latvian
61.5
Maris Nartiss, Pēteris Brūns
Serbian ()
61.3
Goran Ivanković
Serbian ()
61.1
Goran Ivanković
Portuguese (Portugal)
59.7
Giovanni Manghi, Joana Simoes, Duarte Carreira, Alexandre Neto, Pedro Pereira, Pedro Palheiro, Nelson Silva
Central Khmer
57.4
Khoem Sokhem
Indonesian
52.6
Januar V. Simarmata, I Made Anombawa
Croatian (Croatia)
51.7
Zoran Jankovic
Thai
46.7
Man Chao
Ukrainian
44.2
Сергей Якунин
Turkish
41.7
Osman Yilmaz
Chinese (Taiwan, Province of China)
37.9
Nung-yao Lin
Vietnamese
35.4
Bùi Hữu Mạnh
Greek, Modern (1453-) (Greece)
34.0
Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves
Ukrainian
44.1
Сергей Якунин
Turkish
41.6
Osman Yilmaz
Chinese (Taiwan, Province of China)
37.8
Nung-yao Lin
Vietnamese
35.3
Bùi Hữu Mạnh
Greek, Modern (1453-) (Greece)
33.9
Evripidis Argyropoulos, Mike Pegnigiannis, Nikos Ves
Icelandic
31.5
Thordur Ivarsson
Mongolian
31.1
Bayarmaa Enkhtur
Romanian
28.0
Lonut Losifescu-Enescu, Bogdan Pacurar
Romanian
28.0
Lonut Losifescu-Enescu, Bogdan Pacurar
Georgian (Georgia)
21.4
Shota Murtskhvaladze, George Machitidze
Finnish
21.0
Marko Järvenpää
Slovak
18.6
Lubos Balazovic