忘记从QGIS3哪个版本开始,在MAC中打开目录对话框就速度奇慢,导致我一开始都是直接将文件的绝对路径直接键入进来,避免打开文件对话框。搜索发现,此bug已有用户汇报了,且给出了一个解决方法:
在系统偏好设置->安全性与隐私->隐私->辅助功能中,将QGIS3.6的选项给去掉即可。
参考:https://gis.stackexchange.com/questions/310280/qgis-very-slow-when-browsing-files-on-macos
technology backup/share
忘记从QGIS3哪个版本开始,在MAC中打开目录对话框就速度奇慢,导致我一开始都是直接将文件的绝对路径直接键入进来,避免打开文件对话框。搜索发现,此bug已有用户汇报了,且给出了一个解决方法:
在系统偏好设置->安全性与隐私->隐私->辅助功能中,将QGIS3.6的选项给去掉即可。
参考:https://gis.stackexchange.com/questions/310280/qgis-very-slow-when-browsing-files-on-macos
在全国地理信息资源目录服务系统上可以下载最新版本(2017年,1:1百万比例尺)的全国各要素基础数据,具体包括:
我们现在就需要其中的行政边界数据,本来以为下载后可以很方便的使用(有点想当然了),经过一番艰苦的处理后,数据终于是可用状态了。
在mac系统下进行了数据处理,使用了gdal/ogr、QGIS3,主要处理过程记录如下。
for i in `ls -d *.gdb`;do ogr2ogr -f "ESRI Shapefile" -lco ENCODING=UTF-8 -append shp $i;done
ogr2ogr -f "ESRI Shapefile" output1.shp -lco ENCODING=UTF-8 -dialect sqlite -sql "select st_union(geometry) as geometry,PAC,NAME from 'BOUA' group by PAC,NAME order by PAC,NAME" shp/BOUA.shp
ogr2ogr -f "ESRI Shapefile" output2.shp -lco ENCODING=UTF-8 -where "PAC>100000 and PAC<>250100" output1.shp
但这样生成的城市边界仅包括陆地边界,对于内陆型城市,在使用中问题不大,但对于沿海城市,则很多人类活动轨迹可能会超出陆地边界(比如舟山),因此还需要一个融合近海边界的城市边界。手头上有一个2012年版本的含海洋边界的城市边界数据,需要将其海洋边界数据融合到新的全国边界数据集中。
处理过程为:
因数据问题,此数据集中不含港澳台的海洋边界。
本文假定:
1. 采用qgis官方发布的安装程序(如QGIS-OSGeo4W-2.18.13-1-Setup-x86.exe安装包)
2. 使用默认的安装位置,即C:\Program Files\QGIS 2.18,如指定到其他目录,请修改对应的设定。
3. 假定示例数据目录为D:\QGIS\数据\
第一:设定环境变量
SET OSGEO4W_ROOT=C:\Program Files\QGIS 2.18 SET QGIS_PREFIX=%OSGEO4W_ROOT%\apps\qgis SET PATH=%QGIS_PREFIX%\bin;%OSGEO4W_ROOT%\bin SET PYTHONPATH=%QGIS_PREFIX%\python;%OSGEO4W_ROOT%\apps\Python27 SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27 SET GDAL_DATA=%OSGEO4W_ROOT%\share\gdal
即在cmd下执行上述命令,若路径不一致,请自行修改。
第二:运行一个样例
# -*- coding: utf-8 -*- import os,os.path,sys from qgis.gui import * from qgis.core import * from PyQt4 import QtGui app = QtGui.QApplication([]) QgsApplication.setPrefixPath(os.environ['QGIS_PREFIX'],True) QgsApplication.initQgis() main_win = QtGui.QMainWindow() frame = QtGui.QFrame(main_win) main_win.setCentralWidget(frame) grid_layout = QtGui.QGridLayout(frame) map_canvas=QgsMapCanvas() grid_layout.addWidget(map_canvas) map_canvas.setCanvasColor(QtGui.QColor(255,255,255)) layer=QgsVectorLayer(ur'D:\qgis\数据\bou2_4p.shp','border','ogr') QgsMapLayerRegistry.instance().addMapLayer(layer) canvas_layer=QgsMapCanvasLayer(layer) map_canvas.setLayerSet([canvas_layer]) map_canvas.zoomToFullExtent() main_win.show() # Need the following statement if running as a script app.exec_()
可在前述cmd环境下运行python,将此代码粘贴进来运行。
第三,说明:
layer=QgsVectorLayer(ur'D:\qgis\数据\bou2_4p.shp','border','ogr')
这个语句,如目录名称中不含中文,则路径前的u可以移除。当然,也可以这样写:
layer=QgsVectorLayer(u'D:\\qgis\\数据\\bou2_4p.shp','border','ogr')
同时,建议在python下逐行执行来理解代码。
“Control feature rendering order”是QGIS一个很好的特性,特别是在点位密集的时候,若要根据不同属性展示重要性程度的时候。
但在点位数据量较大的时候,会引起QGIS崩溃。之前也遇到了一次,但当时是想办法绕过了(让点位按照真实世界的尺寸进行绘制,从而避免重叠问题)。这次遇到同样的问题,就仔细测试了一下,看看到底是什么问题。
1. 是否是数据格式的问题
原始数据是csv格式,尝试将其转换为shape file以及导入到postgis数据库。发现依旧是崩溃。
2. 是否是数据排序的问题
将原始数据按照期望的顺序进行事先排序,在不选择control feature rendering order时,绘图结果是满足需求了。但选择此绘图特性后,结果依旧。
3. 是否是数据大小的问题
将原始数据逐步缩小数据量,发现在3.05万行-3.1万行之间是个分水岭(大约1M数据量)。3.05万行不崩溃,3.1万行崩溃。说明此问题和内存相关?
4. 是否版本的影响?
尝试了2.18-0,2.18-2两个版本,以及mac sierra 10.12.2, 10.12.3两个版本,不影响测试结果。
5. 是否受操作系统的影响?
在virtualbox虚拟机里的ubuntu 16.04,QGIS 2.14版本,虽然很慢,但不崩溃。
尝试将此bug汇报给qgis开发组,但找了很久file bug的地方,最终发现还需要osgeo的账号,幸亏很久之前注册过账号,找回密码后提交了:
http://hub.qgis.org/issues/16025
BTW:祝新年快乐!
在QGIS中使用TimeManager时遇到一个问题,即满足时空要素要求后,时空数据展示不出来。点击数据的layer查看发现其对应的sql语句大概是:
dbname='citybigdata' host=localhost port=5432 sslmode=disable key='id' srid=4326 type=Point table="qqheat"."milocal" (geom) sql=cast("ts" as character) < '2016-11-09 21:05:00' AND cast("ts" as character) >= '2016-11-09 21:00:00'
将类似的语句直接在psql中发现执行的时候有问题,无法返回结果。但将语句修改一下即可解决:
dbname='citybigdata' host=localhost port=5432 sslmode=disable key='id' srid=4326 type=Point table="qqheat"."milocal" (geom) sql=cast("ts" as text) < '2016-11-09 21:05:00' AND cast("ts" as text) >= '2016-11-09 21:00:00'
即将其中的character改成text即可。
为了使插件工作正常,就需要修改timemanager的代码,使用grep工具找到该代码的位置:
cd .qgis2/python/plugins/timemanger
grep -rnw ‘.’ -e ‘character’
发现是如下代码的问题:
./.git/hooks/pre-commit.sample:26:# printable range starts at the space character and ends with tilde.
./CONTRIBUTING.md:13:* Go to http://www.loc.gov/standards/iso639-2/php/code_list.php and find the 2-character ISO 639-1
./docs/Doxyfile:586:# This tag can be used to specify the character encoding of the source files
./query_builder.py:9:STRINGCAST_FORMAT = ‘cast(“{}” as character) {} \'{}\’ AND cast(“{}” as character) >= \'{}\’ ‘
./query_builder.py:56: return ‘ cast(“{}” as character) LIKE \’%BC\”.format(attr)
./query_builder.py:63: return ‘ cast(“{}” as character) LIKE \’%AD\”.format(attr)
./query_builder.py:79: return ” ‘{}’ {} cast(\”{}\” as character) “.format(val, comparison, col)
./query_builder.py:87: return ” ‘{}’ {} cast(\”{}\” as character) “.format(val, comparison, col)
将具体的代码修改,然后重启qgis,即可工作正常。
开始用QGIS调用标注功能(label)时,发现若是multipolygon,则会显示多个相同的标注,导致显示混乱。后来在搜索中发现:
使用新的label功能(即在工具条中的标注,而不是在layer-属性中的标注)后则不会产生问题。
感觉旧功能应该彻底移走,在邮件列表中也有相应的计划:
估计在2.0版本中会实现吧。
在做专题图的时候,经常需要使用一些背景地图(通常是地形地貌数据),而这些背景数据准备起来还特别麻烦:
1. 多数数据有可能涉密,导致很难获取(即使是之前的1:400万地形图,现在网上公开的数据也找不到了!)
2. 数据获取后在配色、标注等方面还需要仔细考虑,也是比较难的。
因此就想到能否利用网上这些公开的地图商的数据作为背景数据,比如google maps、openstreetmap等。
首先想到的WMS服务,QGIS自身支持WMS服务,网上搜索了一些对应的WMS服务提供商,发现最大的问题:速度太慢,而且现在可用的WMS服务也很少。无意中看到TMS服务(tile map server):
发现gdal支持这个,利用一个xml文件就可以将其封装为一个图像文件,可以直接在QGIS中打开,最重要的是速度很快!
openstreetmap的封装xml,参考OSM Help:
<GDAL_WMS> <Service name="TMS"> <ServerUrl>http://tile.openstreetmap.org/${z}/${x}/${y}.png</ServerUrl> </Service> <DataWindow> <UpperLeftX>-20037508.34</UpperLeftX> <UpperLeftY>20037508.34</UpperLeftY> <LowerRightX>20037508.34</LowerRightX> <LowerRightY>-20037508.34</LowerRightY> <TileLevel>18</TileLevel> <TileCountX>1</TileCountX> <TileCountY>1</TileCountY> <YOrigin>top</YOrigin> </DataWindow> <Projection>EPSG:900913</Projection> <BlockSizeX>256</BlockSizeX> <BlockSizeY>256</BlockSizeY> <BandsCount>3</BandsCount> <Cache /> </GDAL_WMS>
google maps的tms封装文件:
<GDAL_WMS> <!-- Data is subject to term of use detailed at http://code.google.com/intl/nl/apis/maps/terms.html and http://www.google.com/intl/en_ALL/help/terms_maps.html --> <Service name="TMS"> <ServerUrl>http://mt.google.com/vt/lyrs=m&x=${x}&y=${y}&z=${z}</ServerUrl> <!-- Map --> <!-- <ServerUrl>http://mt.google.com/vt/lyrs=s&x=${x}&y=${y}&z=${z}</ServerUrl> --> <!-- Satellite --> <!-- <ServerUrl>http://mt.google.com/vt/lyrs=y&x=${x}&y=${y}&z=${z}</ServerUrl> --> <!-- Hybrid --> <!-- <ServerUrl>http://mt.google.com/vt/lyrs=t&x=${x}&y=${y}&z=${z}</ServerUrl> --> <!-- Terrain --> <!-- <ServerUrl>http://mt.google.com/vt/lyrs=p&x=${x}&y=${y}&z=${z}</ServerUrl> --> <!-- Terrain, Streets and Water --> </Service> <DataWindow> <UpperLeftX>-20037508.34</UpperLeftX> <UpperLeftY>20037508.34</UpperLeftY> <LowerRightX>20037508.34</LowerRightX> <LowerRightY>-20037508.34</LowerRightY> <TileLevel>20</TileLevel> <TileCountX>1</TileCountX> <TileCountY>1</TileCountY> <YOrigin>top</YOrigin> </DataWindow> <Projection>EPSG:900913</Projection> <BlockSizeX>256</BlockSizeX> <BlockSizeY>256</BlockSizeY> <BandsCount>3</BandsCount> <MaxConnections>5</MaxConnections> <Cache/> </GDAL_WMS>
同时,在使用TMS服务,如同此blog所言,也要注意其存在如下问题:
1. TMS是分辨率固定的图片文件组合起来的瓦片式图像,因此其图像不能无极缩放(在QGIS感觉是无极缩放,其实不是)
2. Google Maps & OSM 的TMS服务,其投影方式是固定的,投影代码是EPSG:900913(Mercator)
参考:
http://qgis.org/content/view/143/99/
It is our great pleasure to announce the immediate availability of Quantum GIS (QGIS) Version 0.8.1. The release includes numerous bug fixes and stability improvements to the 0.8 code base. QGIS is available is source form, and will be available as binary executables for Microsoft Windows, Mac OS X, and GNU/Linux. All versions can be obtained from our download page. If the version for your platform is not available please check back in a day or two as some packages are still being built. Many thanks to all the developers who worked so hard to make this release a reality.
新特性:
Whats New in 0.8.1
Version 0.8.1 is primarily a bug fix release. Some of the changes include:* Numerous bug fixes
* Improvements in how segment lengths appear in the measure tool. The current segment length is shown/updated in the list of segments
* Improvement to zoom-in speed for rasters
* Improve line/area measuring behaviour when the user has been informed that they are probably using the wrong projection for the map canvas
* Added tooltips to the scale and coordinate position displays in the status bar
* Removed ugly console on WIN32 when not debugging
* Added icons to all GRASS tools. All GRASS tools are now on the toolbar
* New GRASS modules added to the GRASS toolbox
* The GRASS plugin is now fully internationalized
* Launcher plugin added to core plugins
下载:http://download.qgis.org/qgis/
在QGIS如何自定义投影?如何设置动态投影?
因为一个朋友想在QGIS实现中国地图的显示,如普通教科书上的地图显示方式。
从国家基础地理数据中心下载来的中国行政区划的shp文件,到底应该选择哪种project,才能使它显示如我们常见的中国地图?
通常这种小比例尺地图在中国的投影都是使用的是albers等积投影。而投影的具体参数是:
中央经线105
标准纬线是27和45
而在QGIS中是采用proj4的投影参数定义方式的,就可以这样写:
+proj=aea +lat_1=27n +lat_2=45n +lon_0=105e +x_0=0 +y_0=0 +ellps=clrk66
具体要如何操作呢?
继续阅读“在QGIS中设置动态投影”
参考:http://wlxblog.westgis.ac.cn/195/
拷贝qgis-0.7.4的debian目录,按照下面的diff进行修改
debian/control
5c5
< Build-Depends: debhelper (>= 4.0.0), libgdal1-1.3.1-dev (>= 1.2.6-1), libqt4-dev , libcfitsio-dev (>= 2.460-1), libpq-dev | postgresql-dev, libhdf4g-dev (>= 4.1r4-17), libungif4-dev (>= 4.1.0b1-6), unixodbc-dev (>= 2.2.4-6), libxerces27-dev (>= 2.1.0-5), libjasper-1.701-dev (>= 1.701.0-2), libtiff4-dev (>= 3.6.1-1.1), netcdfg-dev (>= 3.5.0-7.1), libgeos-dev (>= 2.0.1-1), dpatch, libgrass-dev (>= 6.0.0-1), libsqlite3-dev, libgsl0-dev, proj, libexpat1-dev
—
> Build-Depends: debhelper (>= 4.0.0), libgdal1-1.3.1-dev (>= 1.2.6-1), libqt3-mt-dev (>= 3:3.2.1-6), libqt3-compat-headers (>= 3:3.2.3-2), libcfitsio-dev (>= 2.460-1), libpq-dev | postgresql-dev, libhdf4g-dev (>= 4.1r4-17), libungif4-dev (>= 4.1.0b1-6), unixodbc-dev (>= 2.2.4-6), libxerces26-dev (>= 2.1.0-5), libjasper-1.701-dev (>= 1.701.0-2), libtiff4-dev (>= 3.6.1-1.1), netcdfg-dev (>= 3.5.0-7.1), libgeos-dev (>= 2.0.1-1), dpatch, libgrass-dev (>= 6.0.0-1), libsqlite3-dev, libgsl0-dev, proj, libexpat1-dev
26,27c26,27
< Depends: qgis (= ${Source-Version}), libgdal1-1.3.1-dev (>= 1.2.6-1), libqt4-dev , , libcfitsio-dev (>= 2.460-1), libpq-dev | postgresql-dev, libhdf4g-dev (>= 4.1r4-17), libungif4-dev (>= 4.1.0b1-6), unixodbc-dev (>= 2.2.4-6), libxerces27-dev (>= 2.1.0-5), libjasper-1.701-dev (>= 1.701.0-2), libtiff4-dev (>= 3.6.1-1.1), netcdfg-dev (>= 3.5.0-7.1), libgeos-dev (>= 2.0.1-1), libgrass-dev (>= 6.0.0-1), libsqlite3-dev, libgsl0-dev, proj, libexpat1-dev
< Suggests: qt4-designer --- > Depends: qgis (= ${Source-Version}), libgdal1-dev (>= 1.2.6-1), libqt3-mt-dev (>= 3:3.2.1-6), libqt3-compat-headers (>= 3:3.2.3-2), libcfitsio-dev (>= 2.460-1), libpq-dev | postgresql-dev, libhdf4g-dev (>= 4.1r4-17), libungif4-dev (>= 4.1.0b1-6), unixodbc-dev (>= 2.2.4-6), libxerces26-dev (>= 2.1.0-5), libjasper-1.701-dev (>= 1.701.0-2), libtiff4-dev (>= 3.6.1-1.1), netcdfg-dev (>= 3.5.0-7.1), libgeos-dev (>= 2.0.1-1), libgrass-dev (>= 6.0.0-1), libsqlite3-dev, libgsl0-dev, proj, libexpat1-dev
> Suggests: qt3-designer
38c38
< Depends: qgis (= ${Source-Version}), libgdal1-1.3.1-grass (>= 1.2.6-0)
—
> Depends: qgis (= ${Source-Version}), libgdal1-grass (>= 1.2.6-0)
debian/qgis-dev.install
17a18
> usr/lib/qgis/designer/*.*a
debian/qgis.install
0a1
> usr/bin/gridmaker
2c3
< usr/lib/libqgis_*.so.* --- > usr/lib/libqgis.so.*
15a17
> usr/lib/qgis/designer/*.so
debian/rules
35c35
< --with-qtdir=/usr/share/qt4 \ --- > –with-qtdir=/usr/share/qt3 \