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

Здесь нужно сообщать об ошибках в QGIS, с подробным описанием шагов и версии ПО.
Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

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

Сообщение Voltron » 27 апр 2012, 15:00

Специально для тех, кто считает, что во всем виновата 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;

Аватара пользователя
SS_Rebelious
Гуру
Сообщения: 1304
Зарегистрирован: 24 фев 2009, 16:51
Репутация: 99
Ваше звание: GIS pro-fan
Откуда: Lahti / Газ-ПУТИНбург
Контактная информация:

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

Сообщение SS_Rebelious » 27 апр 2012, 18:49

Voltron писал(а):прогуляться по этой ссылке и найти хотя бы один коммит между 411aff6 и 8058b22, затрагивающий провайдер OGR
Так может в этом и проблема: в GDAL произошли серьёзные изменения, а в QGIS они просто не были учтены?
Look for something long enough, and you will find it. Look for something without understanding, and it will find you...
"All paid jobs absorb and degrade the mind." Aristotle
If you take 1 step towards freedom it'll take 2 steps towards you!

beard
Новоприбывший
Сообщения: 14
Зарегистрирован: 27 апр 2012, 12:55
Репутация: 1
Откуда: Москва

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

Сообщение beard » 28 апр 2012, 16:11

Похоже, что проблема достаточно глубока...
Описание по ссылке:
http://alexbruy.blogspot.com/2011/09/gd ... icode.html
Никогда не поздно, если еще не рано...

beard
Новоприбывший
Сообщения: 14
Зарегистрирован: 27 апр 2012, 12:55
Репутация: 1
Откуда: Москва

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

Сообщение beard » 28 апр 2012, 20:35

Решили приспособиться к новым условиям и перекодировать рабочие карты.
Описание процедуры:
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 игнорируют...
Последний раз редактировалось beard 30 апр 2012, 16:54, всего редактировалось 1 раз.
Никогда не поздно, если еще не рано...

Аватара пользователя
Дмитрий Барышников
Гуру
Сообщения: 2572
Зарегистрирован: 17 ноя 2009, 19:17
Репутация: 261
Откуда: Москва

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

Сообщение Дмитрий Барышников » 28 апр 2012, 22:26

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

beard
Новоприбывший
Сообщения: 14
Зарегистрирован: 27 апр 2012, 12:55
Репутация: 1
Откуда: Москва

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

Сообщение beard » 29 апр 2012, 09:13

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

bolotoved
Гуру
Сообщения: 920
Зарегистрирован: 30 дек 2008, 14:11
Репутация: 236
Откуда: Ханты-Мансийск
Контактная информация:

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

Сообщение bolotoved » 29 апр 2012, 10:19

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

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

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

Сообщение Voltron » 29 апр 2012, 12:16

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

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

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

Сообщение Максим Дубинин » 02 май 2012, 13:02

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

Ответить

Вернуться в «Ошибки QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей