达叔

 

[置顶] 在windows下使用linux命令

摘要: 使用过linxu的伙计估计都会喜欢上linux各种各样强大的命令如:grep, sed,awk,diff和patch。cygwin是一个windows下的linux模拟器,对于想在windows下使用linux命令的人来说是一个选择。但是cygwin过于复杂庞大,下载比较费劲,本人最终没有下载,也没有用过。个人感觉GunWin32是一个不错的选择,GnuWin32使windows用户可以在命令行窗口中使用各种各样的linux命令,就跟使用普通的windows命令一样简单。1.下载GnuWin32,GnuWin32的安装文件(GetGnuWin32-0.6.3.exe)下载地址:http://s 阅读全文

posted @ 2011-07-16 11:52 达叔 阅读(28448) 评论(9) 推荐(2)

2018年5月11日

pyqgis学习

1.
错误:ImportError: No module named qgis.core
解决方法:python的qgis,初始化变量:
D:\PROGRA~1\QGIS3~1.0\OSGeo4W.bat
D:\PROGRA~1\QGIS3~1.0\bin\py3_env.bat
D:\PROGRA~1\QGIS3~1.0\bin\qt5_env.bat
SET PYTHONPATH=D:\PROGRA~1\QGIS3~1.0\apps\qgis\python;D:\PROGRA~1\QGIS3~1.0\apps\Qt5\plugins
SET PATH=D:\PROGRA~1\QGIS3~1.0\apps\Qt5\plugins;%PATH%

2.
错误:This application failed to start because it could not find or load the Qt platform plugin "windows"
in "".
解决方法:把 包含qwindows.dll的目录platform复制到 D:\Program Files\QGIS 3.0\bin

3.
错误:QgisProject.read和QgisVectorLayer构造失败
解决方法:
环境变量没有设定好,在qgis.bat基础上去掉启动qgis,增加环境变量PYTHONPATH

4.
错误:QtCore.pyqtSignal信号发射接收问题解决
解决方法:
1.QtCore.pyqtSignal必须声明为类的变量
2.所在类必须继承与QtObject
3.构造函数必须直接调用QtCore.QObject.__init__(self)

5.
错误:在qtthread中启动httpserver崩溃的问题
解决方法:
1.原因python的httpserver模块默认打印到控制台,会导致qgis应为同步问题崩溃
2.重载BaseHTTPRequestHandler的log_message方法,去掉打印

5.
多线程使用HTTPServer服务,并和主线程通讯的例子

from http.server import BaseHTTPRequestHandler
from http.server import HTTPServer
from PyQt5 import QtCore
import time

class MyHttpServer(HTTPServer):
    def log_message(self, format, *args):
        pass

class TodoHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path != '/':
            self.send_error(404, "File not found.")
            return
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(b"{}")

        self.server.request_.emit( 5.0, 5.0 )
 
    def log_message(self, format, *args):
        pass

class TestRun(QtCore.QObject):

    request_ = QtCore.pyqtSignal(float, float)

    def __init__(self):
        QtCore.QObject.__init__(self)

    def run(self):
        #for i in range(0,100):
        #    time.sleep(0.1)
        #    print(i)
        #print('-- server running --')
        server = MyHttpServer(('localhost', 8888), TodoHandler)
        server.request_ = self.request_
        server.serve_forever()

class TestRev(QtCore.QObject):
    def __init__(self):
        QtCore.QObject.__init__(self)

    def onRequest(self, x, y):
        ext = iface.mapCanvas().extent()
        ext += QgsVector(int(x),int(y))
        iface.mapCanvas().setExtent(ext)

    def onError(self, e, exception_string):
        print('Worker thread raised an exception:\n'.format(exception_string))
    
a = TestRev()

r = TestRun()
t = QtCore.QThread()
r.moveToThread(t)
r.request_.connect(a.onRequest)
t.started.connect(r.run)
t.start()

 





 

posted @ 2018-05-11 15:44 达叔 阅读(1278) 评论(0) 推荐(0)

2011年7月20日

使用sqlite扩展,避免在sql语句中使用不易看懂和难以维护的数字或名称缩写

摘要: 本人最近使用C/C++操作sqlite数据库进行GIS数据转换时,感觉sqlite有个不方便的地方就是不能在sql中定义枚举量和常量。相比C/C++就提供了宏定义,枚举和常量定义来帮助程序员避免在代码使用无意义的数字。本人操作的GIS数据库中有很多枚举量,如道路表中道路类型列就是枚举量:0表示高速,1表示国道,2表示省道,3表示县道等。如果不能在sql中定义这些枚举量,那么在根据道路类型选择道路时我们就必须在sql中使用数字,如:选出所有高速的sql将是select * from road_table where road_type = 0,这种sql太恶心了,你根本不知道0代表什么意义。通过 阅读全文

posted @ 2011-07-20 01:03 达叔 阅读(2045) 评论(3) 推荐(2)

2011年7月15日

使用windows命令和iconv.exe批量转换文件编码

摘要: iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt > utf-8.txt。其中 -f gbk 指明转换前的文件编码是gbk,-t utf-8 指明转换后的文件编码是utf-8,gbk.txt 是转换前文件的名称,> utf-8.txt指明把转换结果输出到utf-8.txt文件中。当我们要转换大量文件时,我们可以结合windows命令和iconv.exe批量编码转换。用法:for /r dir_name %i in (*.txt) d 阅读全文

posted @ 2011-07-15 23:32 达叔 阅读(20207) 评论(1) 推荐(1)

使用sed转化linx和windows换行符号

摘要: windows换行符(\n\r)格式的文本:windows.txtlinux换行符(\n)格式的文本:linux.txtwindows换行符变成linux换行符: cat windows.txt | sed 's/\n\r$/\n/' > linux.txtlinux换行符变成windows换行符: cat linux.txt | sed 's/\n$/\n\r/' > windows.txt 阅读全文

posted @ 2011-07-15 15:50 达叔 阅读(1786) 评论(1) 推荐(1)

windows下编译64位程序时没有没_WIN32定义

摘要: _WIN32定义的初衷是为了区分16位和32位程序,但是目前很多项目的代码都是使用_WIN32来判定是否是windows平台,所以目前在windows平台下编译32位和64位程序时,编译器都会预定义了_WIN32。 阅读全文

posted @ 2011-07-15 13:35 达叔 阅读(480) 评论(0) 推荐(0)

导航

统计

点击右上角即可分享
微信分享提示