Страница 2 из 2

Re: 1.7.4 - слои открываются только в кодировке UTF-8

Добавлено: 27 апр 2012, 15:00
Voltron
Специально для тех, кто считает, что во всем виновата QGIS и ошибка именно в ней предлагаю сделать следующее:
  1. загрузить standalone установщик QGIS 1.7.4 отсюда. Это QGIS 1.7.4 (ревизия 411aff6), собранная с GDAL 1.8.1. Убедиться, что в ней все работает как надо: слои открываются в заданной кодировке, изменение кодировки из свойств слоя работает.
  2. загрузить QGIS 1.7.4 через OSGeo4W (пакет qgis-1.7.4-5). Это тоже QGIS 1.7.4 (ревизия 8058b22), собранная с GDAL 1.9.0. Убедиться, что в ней описанные здесь проблемы присутствуют: слои открываются в utf-8, смена кодировки не возможна
  3. прогуляться по этой ссылке и найти хотя бы один коммит между 411aff6 и 8058b22, затрагивающий провайдер OGR
Полный diff между этими двумя версиями

Код: Выделить всё

diff --git a/debian/changelog b/debian/changelog
index 274cba2..110270e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+qgis (1.7.4-1) UNRELEASED; urgency=low
+
+  * new upstream bugfix release
+
+ -- Jürgen E. Fischer <jef@norbit.de>  Sun, 19 Feb 2012 22:35:23 +0100
+
 qgis (1.7.3-1) UNRELEASED; urgency=low
 
   * new upstream bugfix release
diff --git a/mac/cmake/2lib.cmake.in b/mac/cmake/2lib.cmake.in
index d2386ed..5016db3 100644
--- a/mac/cmake/2lib.cmake.in
+++ b/mac/cmake/2lib.cmake.in
@@ -111,7 +111,7 @@ ENDIF ()
 
 # libfcgi (non-system)
 
-IF ("@FCGI_LIBRARY@ MATCHES" ".*libfcgi.dylib" AND NOT "@FCGI_LIBRARY@" MATCHES "/usr/lib/.*")
+IF ("@FCGI_LIBRARY@" MATCHES ".*libfcgi.dylib" AND NOT "@FCGI_LIBRARY@" MATCHES "/usr/lib/.*")
     MESSAGE (STATUS "Copying libfcgi and updating library paths...")
     MYMESSAGE ("ditto ${QARCHS} \"@FCGI_LIBRARY@\" \"${QLIBDIR}/libfcgi.dylib\"")
     EXECUTE_PROCESS (COMMAND ditto ${QARCHS} "@FCGI_LIBRARY@" "${QLIBDIR}/libfcgi.dylib")
diff --git a/ms-windows/osgeo4w/package-nightly.cmd b/ms-windows/osgeo4w/package-nightly.cmd
index 68c7b93..2215871 100755
--- a/ms-windows/osgeo4w/package-nightly.cmd
+++ b/ms-windows/osgeo4w/package-nightly.cmd
@@ -90,10 +90,12 @@ cmake -G "Visual Studio 9 2008" ^
 	-D PEDANTIC=TRUE ^
 	-D WITH_SPATIALITE=TRUE ^
 	-D WITH_MAPSERVER=TRUE ^
-	-D WITH_INTERNAL_SPATIALITE=TRUE ^
+	-D WITH_INTERNAL_SPATIALITE=FALSE ^
 	-D CMAKE_BUILD_TYPE=%BUILDCONF% ^
 	-D CMAKE_CONFIGURATION_TYPES=%BUILDCONF% ^
 	-D GEOS_LIBRARY=%OSGEO4W_ROOT%/lib/geos_c_i.lib ^
+	-D SQLITE3_LIBRARY=%OSGEO4W_ROOT%/lib/sqlite3_i.lib ^
+	-D SPATIALITE_LIBRARY=%OSGEO4W_ROOT%/lib/spatialite_i.lib ^
 	-D PYTHON_EXECUTABLE=%O4W_ROOT%/bin/python.exe ^
 	-D PYTHON_INCLUDE_PATH=%O4W_ROOT%/apps/Python27/include ^
 	-D PYTHON_LIBRARY=%O4W_ROOT%/apps/Python27/libs/python27.lib ^
@@ -155,20 +157,6 @@ tar -C %OSGEO4W_ROOT% -cjf %PACKAGENAME%-%VERSION%-%PACKAGE%.tar.bz2 ^
 	etc/preremove/%PACKAGENAME%.bat ^
 	>>%LOG% 2>&1
 if errorlevel 1 goto error
-
-REM tar -C %OSGEO4W_ROOT% -cjf %PACKAGENAME%-grass-%VERSION%-%PACKAGE%.tar.bz2 ^
-REM 	--exclude-from exclude ^
-REM 	"apps/%PACKAGENAME%/themes/classic/grass" ^
-REM 	"apps/%PACKAGENAME%/themes/default/grass" ^
-REM 	"apps/%PACKAGENAME%/themes/gis/grass" ^
-REM 	"apps/%PACKAGENAME%/grass" ^
-REM 	"apps/%PACKAGENAME%/bin/qgisgrass.dll" ^
-REM 	"apps/%PACKAGENAME%/plugins/grassrasterprovider.dll" ^
-REM 	"apps/%PACKAGENAME%/plugins/grassplugin.dll" ^
-REM 	"apps/%PACKAGENAME%/plugins/grassprovider.dll" ^
-REM 	>>%LOG% 2>&1
-REM if errorlevel 1 goto error
-
 goto end
 
 :error
diff --git a/ms-windows/osgeo4w/package.cmd b/ms-windows/osgeo4w/package.cmd
index 390e2c3..39d0e47 100755
--- a/ms-windows/osgeo4w/package.cmd
+++ b/ms-windows/osgeo4w/package.cmd
@@ -91,10 +91,12 @@ cmake -G "Visual Studio 9 2008" ^
 	-D PEDANTIC=TRUE ^
 	-D WITH_SPATIALITE=TRUE ^
 	-D WITH_MAPSERVER=TRUE ^
-	-D WITH_INTERNAL_SPATIALITE=TRUE ^
+	-D WITH_INTERNAL_SPATIALITE=FALSE ^
 	-D CMAKE_BUILD_TYPE=%BUILDCONF% ^
 	-D CMAKE_CONFIGURATION_TYPES=%BUILDCONF% ^
 	-D GEOS_LIBRARY=%OSGEO4W_ROOT%/lib/geos_c_i.lib ^
+	-D SQLITE3_LIBRARY=%OSGEO4W_ROOT%/lib/sqlite3_i.lib ^
+	-D SPATIALITE_LIBRARY=%OSGEO4W_ROOT%/lib/spatialite_i.lib ^
 	-D PYTHON_EXECUTABLE=%O4W_ROOT%/bin/python.exe ^
 	-D PYTHON_INCLUDE_PATH=%O4W_ROOT%/apps/Python27/include ^
 	-D PYTHON_LIBRARY=%O4W_ROOT%/apps/Python27/libs/python27.lib ^
@@ -199,9 +201,6 @@ if errorlevel 1 goto error
 tar -C %OSGEO4W_ROOT% -cjf %PACKAGENAME%-%VERSION%-%PACKAGE%.tar.bz2 ^
 	--exclude-from exclude ^
 	--exclude "*.pyc" ^
-	--exclude apps/%PACKAGENAME%/themes/classic/grass ^
-	--exclude apps/%PACKAGENAME%/themes/default/grass ^
-	--exclude apps/%PACKAGENAME%/themes/gis/grass ^
 	"apps/%PACKAGENAME%/bin/qgis.exe" ^
 	"apps/%PACKAGENAME%/bin/qgis.reg.tmpl" ^
 	"apps/%PACKAGENAME%/i18n/" ^
@@ -230,7 +229,6 @@ tar -C %OSGEO4W_ROOT% -cjf %PACKAGENAME%-%VERSION%-%PACKAGE%.tar.bz2 ^
 	"apps/%PACKAGENAME%/python/" ^
 	"apps/%PACKAGENAME%/resources/context_help/" ^
 	"apps/%PACKAGENAME%/resources/qgis_help.db" ^
-	"apps/%PACKAGENAME%/themes/" ^
 	"bin/%PACKAGENAME%.bat.tmpl" ^
 	"etc/postinstall/%PACKAGENAME%.bat" ^
 	"etc/preremove/%PACKAGENAME%.bat" ^
@@ -240,9 +238,6 @@ if errorlevel 1 goto error
 tar -C %OSGEO4W_ROOT% -cjf %PACKAGENAME%-grass-plugin-%VERSION%-%PACKAGE%.tar.bz2 ^
 	--exclude-from exclude ^
 	--exclude "*.pyc" ^
-	"apps/%PACKAGENAME%/themes/classic/grass" ^
-	"apps/%PACKAGENAME%/themes/default/grass" ^
-	"apps/%PACKAGENAME%/themes/gis/grass" ^
 	"apps/%PACKAGENAME%/grass" ^
 	"apps/%PACKAGENAME%/bin/qgisgrass.dll" ^
 	"apps/%PACKAGENAME%/plugins/grassrasterprovider.dll" ^
diff --git a/python/pyspatialite/CMakeLists.txt b/python/pyspatialite/CMakeLists.txt
index 8353dd9..4384d60 100644
--- a/python/pyspatialite/CMakeLists.txt
+++ b/python/pyspatialite/CMakeLists.txt
@@ -1,7 +1,11 @@
-INCLUDE_DIRECTORIES(
-  ../../src/core/spatialite/headers
-  ../../src/core/spatialite/headers/spatialite
+IF(WITH_INTERNAL_SPATIALITE)
+  INCLUDE_DIRECTORIES(
+    ../../src/core/spatialite/headers
+    ../../src/core/spatialite/headers/spatialite
+  )
+ENDIF(WITH_INTERNAL_SPATIALITE)
 
+INCLUDE_DIRECTORIES(
   ${PYTHON_INCLUDE_PATH}
   ${GEOS_INCLUDE_DIR}
   ${PROJ_INCLUDE_DIR}
@@ -33,6 +37,10 @@ ENDIF (NOT APPLE)
 
 TARGET_LINK_LIBRARIES(pyspatialite ${EXTRA_LINK_LIBRARIES})
 
+IF(NOT WITH_INTERNAL_SPATIALITE)
+  TARGET_LINK_LIBRARIES(pyspatialite ${SPATIALITE_LIBRARY})
+ENDIF(NOT WITH_INTERNAL_SPATIALITE)
+
 IF (APPLE)
   SET_TARGET_PROPERTIES(pyspatialite PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
 ENDIF (APPLE)
diff --git a/src/app/qgspluginmanager.cpp b/src/app/qgspluginmanager.cpp
index 070bc3f..22926b1 100644
--- a/src/app/qgspluginmanager.cpp
+++ b/src/app/qgspluginmanager.cpp
@@ -250,7 +250,10 @@ void QgsPluginManager::getPluginDescriptions()
   QString myPaths = settings.value( "plugins/searchPathsForPlugins", "" ).toString();
   if ( !myPaths.isEmpty() )
   {
-    myPathList.append( myPaths.split( "|" ) );
+    foreach( QString path, myPaths.split( "|" ) )
+    {
+      myPathList.append( path );
+    }
   }
 
   for ( int j = 0; j < myPathList.size(); ++j )
diff --git a/src/plugins/offline_editing/CMakeLists.txt b/src/plugins/offline_editing/CMakeLists.txt
index ec94559..32b2178 100644
--- a/src/plugins/offline_editing/CMakeLists.txt
+++ b/src/plugins/offline_editing/CMakeLists.txt
@@ -40,6 +40,7 @@ IF (WITH_INTERNAL_SPATIALITE)
 ELSE (WITH_INTERNAL_SPATIALITE)
   INCLUDE_DIRECTORIES(${SPATIALITE_INCLUDE_DIR})
   INCLUDE_DIRECTORIES(${SQLITE3_INCLUDE_DIR})
+  TARGET_LINK_LIBRARIES(offlineeditingplugin ${SPATIALITE_LIBRARY})
   ADD_DEFINITIONS(-DEXTERNAL_SPATIALITE)
 ENDIF (WITH_INTERNAL_SPATIALITE)
 
diff --git a/src/providers/grass/qgsgrass.cpp b/src/providers/grass/qgsgrass.cpp
index ae34d80..71710c3 100644
--- a/src/providers/grass/qgsgrass.cpp
+++ b/src/providers/grass/qgsgrass.cpp
@@ -450,14 +450,21 @@ QString GRASS_EXPORT QgsGrass::openMapset( QString gisdbase, QString location, Q
   {
     return QObject::tr( "%1 is not a GRASS mapset." ).arg( mapsetPath );
   }
+  QString lock = mapsetPath + "/.gislock";
+
+#ifndef _MSC_VER
+  int pid = getpid();
+#else
+  int pid = GetCurrentProcessId();
+#endif
+
+  QgsDebugMsg( QString( "pid = %1" ).arg( pid ) );
 
 #ifndef Q_OS_WIN
-  QString lock = mapsetPath + "/.gislock";
   QFile lockFile( lock );
   QProcess *process = new QProcess();
   QString lockProgram( gisBase + "/etc/lock" );
 
-  int pid = getpid();
   QgsDebugMsg( QString( "pid = %1" ).arg( pid ) );
 
   process->start( lockProgram, QStringList() << lock << QString::number( pid ) );
@@ -488,13 +495,17 @@ QString GRASS_EXPORT QgsGrass::openMapset( QString gisdbase, QString location, Q
     QFileInfo dirInfo( mTmp );
     if ( !dirInfo.isWritable() )
     {
+#ifndef Q_OS_WIN
       lockFile.remove();
+#endif
       return QObject::tr( "Temporary directory %1 exists but is not writable" ).arg( mTmp );
     }
   }
   else if ( !dir.mkdir( mTmp ) )
   {
+#ifndef Q_OS_WIN
     lockFile.remove();
+#endif
     return QObject::tr( "Cannot create temporary directory %1" ).arg( mTmp );
   }
 
@@ -508,7 +519,9 @@ QString GRASS_EXPORT QgsGrass::openMapset( QString gisdbase, QString location, Q
   QFile out( mGisrc );
   if ( !out.open( QIODevice::WriteOnly ) )
   {
+#ifndef Q_OS_WIN
     lockFile.remove();
+#endif
     return QObject::tr( "Cannot create %1" ).arg( mGisrc );
   }
   QTextStream stream( &out );
@@ -566,12 +579,14 @@ QString GRASS_EXPORT QgsGrass::openMapset( QString gisdbase, QString location, Q
 
   active = true;
 
+#ifndef Q_OS_WIN
   // Close old mapset
   if ( mMapsetLock.length() > 0 )
   {
     QFile file( mMapsetLock );
     file.remove();
   }
+#endif
 
   mMapsetLock = lock;

Re: 1.7.4 - слои открываются только в кодировке UTF-8

Добавлено: 27 апр 2012, 18:49
SS_Rebelious
Voltron писал(а):прогуляться по этой ссылке и найти хотя бы один коммит между 411aff6 и 8058b22, затрагивающий провайдер OGR
Так может в этом и проблема: в GDAL произошли серьёзные изменения, а в QGIS они просто не были учтены?

Re: 1.7.4 - слои открываются только в кодировке UTF-8

Добавлено: 28 апр 2012, 16:11
beard
Похоже, что проблема достаточно глубока...
Описание по ссылке:
http://alexbruy.blogspot.com/2011/09/gd ... icode.html

Re: 1.7.4 - слои открываются только в кодировке UTF-8

Добавлено: 28 апр 2012, 20:35
beard
Решили приспособиться к новым условиям и перекодировать рабочие карты.
Описание процедуры:
1. Ставим параллельно две версии -
- 1.7.4 из ссылки в посте Voltron от 27 апреля (выше) или 1.7.3;
- 1.9.90 из OSGeo4W (в нашем случае уже была установлена);
2. Создаем каталог для проекта с UTF-8, например PROJ_UTF;
3. Открываем в 1.7.4 карту с кириллицей;
4. Каждый слой сохраняем с тем же именем, но в PROJ_UTF в кодировке UTF-8;
5. Закрываем 1.7.4;
6. Копируем все файлы стилей в PROJ_UTF;
7. Создаем файлы .cpg с именами слоев, вписывая в них строку "utf-8" (без кавычек) (65001 работать не будет...);
8. Открываем 1.9.90 и создаем новый проект с необходимыми параметрами, сохраняем в PROJ_UTF;
9. Подключаем по очереди все слои, включаем отображение подписей.
PS
Получается не очень быстро, но все работает в новых и старых версиях QGIS при выборе UTF-8.
Если стили не были сохранены, следует предварительно сохранить стиль для каждого слоя.
Новая и старая версия QGIS могут стоять на разных компах (придется переносить каталог PROJ_UTF).
Работаем в OS Windows 7
Для перекодировки старых карт необходимо держать старую версию QGIS.
PS2
Странно, что файлы .cpg нужны для utf-8 и работают с ней, а 1251 игнорируют...

Re: 1.7.4 - слои открываются только в кодировке UTF-8

Добавлено: 28 апр 2012, 22:26
Дмитрий Барышников
beard писал(а): Странно, что файлы .cpg нужны для utf-8 и работают с ней, а 1251 игнорируют...
Не игнорируют, просто по умолчанию в GDAL перекодировка из 1251 в UTF не поддерживается. А UTF в UTF и перекодировать-то не надо, надо только при помощи файлика .cpg GDAL-у "подсказать" в какой кодировке у вас данные.
Проблема в процессе решения - я бы не торопился данные корежить.

Re: 1.7.4 - слои открываются только в кодировке UTF-8

Добавлено: 29 апр 2012, 09:13
beard
Bishop писал(а): Не игнорируют, просто по умолчанию в GDAL перекодировка из 1251 в UTF не поддерживается. А UTF в UTF и перекодировать-то не над.
Это наводит на мысль, что перекодировать в utf-8 слои с большим объемом текстовых данных все же есть смысл (GDAL не будет тратить время и ресурсы на перекодировку при работе со слоями), а проблема только подтолкнула к действиям. Эффект уже замечен при работе с преобразованными проектами...

Перекодировка из CP1251 в UTF-8

Добавлено: 29 апр 2012, 10:19
bolotoved
beard писал(а):Это наводит на мысль, что перекодировать в utf-8 слои с большим объемом текстовых данных все же есть смысл
При перекодировке из CP1251 в UTF-8 обрезаются поля.

Re: Перекодировка из CP1251 в UTF-8

Добавлено: 29 апр 2012, 12:16
Voltron
bolotoved писал(а):При перекодировке из CP1251 в UTF-8 обрезаются поля.
Естественно, UTF-8 же двухбайтовая в отличие от. А размер полей при перекодировке не меняется, что тоже правильно

Re: 1.7.4 - слои открываются только в кодировке UTF-8

Добавлено: 02 май 2012, 13:02
Максим Дубинин
Это не совсем про 1.7.4, но сборку последней версии с исправленной проблемой с кириллицей можно взять вот здесь: viewtopic.php?t=10464