QGis QgsVectorLayer 图层加载(mysql)

您所在的位置:网站首页 svl1 QGis QgsVectorLayer 图层加载(mysql)

QGis QgsVectorLayer 图层加载(mysql)

#QGis QgsVectorLayer 图层加载(mysql)| 来源: 网络整理| 查看: 265

之前写了一篇文章关于 QGis开发的 shpfile文件加载。这里我通过mysql连接的方式加载矢量图层。

CMakeLists.txt

cmake_minimum_required(VERSION 3.8.0) project(QGisSQLConnectDemo) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC ON) SET(QT_USE_QTMAIN TRUE) find_package(Qt5 COMPONENTS Core Widgets Xml Sql REQUIRED) set(qgis_path "NOT-FOUND" CACHE PATH "In QGis SDK install path") if(qgis_path STREQUAL "NOT-FOUND") message(FATAL_ERROR "need download qgis sdk from Run Geo4w.exe") endif() message(STATUS "qgis_path >>${qgis_path}") set(QGIS_INC "${qgis_path}/include") set(QGIS_LIB "${qgis_path}/lib") set(QGIS_BIN "${qgis_path}/bin") message(STATUS "QGIS_INC >> ${QGIS_INC}") message(STATUS "QGIS_LIB >> ${QGIS_LIB}") file(GLOB ALL_LIBS ${QGIS_LIB}/*.lib) message(STATUS "ALL_LIBS >>${ALL_LIBS}") include_directories(${QGIS_INC} F:/OSGeo4W64/apps/Qt5/include) link_directories(${GIS_LIB}) link_libraries(${ALL_LIBS}) add_definitions(-D_USE_MATH_DEFINES) aux_source_directory(${CMAKE_SOURCE_DIR} SRC_ALL) #add_executable(${PROJECT_NAME} WIN32 ${SRC_ALL}) #no console add_executable(${PROJECT_NAME} ${SRC_ALL} ${ALL_UI}) #no console target_link_libraries(${PROJECT_NAME} Qt5::Widgets Qt5::Xml Qt5::Sql) file(WRITE ${CMAKE_BUILD_RPATH}/pathCmd.cmd "@echo off set PATH=%PATH%;${QGIS_BIN};F:/OSGeo4W64/apps/Qt5/bin;F:/OSGeo4W64/bin; ${PROJECT_NAME} echo application begin... ::pause>nul" ) install(TARGETS ${PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_INSTALL_PREFIX}/bin ARCHIVE DESTINATION ${CMAKE_INSTALL_PREFIX}/lib LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX}/lib) install(DIRECTORY ${CMAKE_BUILD_RPATH} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin FILES_MATCHING PATTERN "*.cmd") main.cpp #include #include #include #include #include #include #include #include #include #include #include #include #include #define pluginsPath "F:\\OSGeo4W64\\apps\\qgis-dev\\plugins" //using namespace QgsGuiUtils; int main(int argc, char* argv[]) { QgsApplication myApp(argc, argv, true); myApp.setPrefixPath("F:\\OSGeo4W64\\apps\\qgis", true); QgsProviderRegistry::instance("F:\\OSGeo4W64\\apps\\qgis\\plugins"); QList listVecLayer; QString uri("MySQL:beijing_map,host=192.168.2.205,port=3306,user=root,password=root,tables=testmap|layername=testmap"); QgsVectorLayer sqlVecLayer; sqlVecLayer.setProviderEncoding("UTF-8"); sqlVecLayer.setDataSource(uri, "beijing_road", "ogr", true); listVecLayer.append(&sqlVecLayer); QgsProject::instance()->addMapLayers(listVecLayer); QgsMapCanvas QGSMC; QGSMC.setLayers(listVecLayer); QGSMC.setExtent(sqlVecLayer.extent()); QGSMC.enableAntiAliasing(true); QGSMC.freeze(false); QGSMC.setDragMode(QGraphicsView::RubberBandDrag); QGSMC.setVisible(true); QGSMC.zoomToFullExtent(); QGSMC.refresh(); QGSMC.show(); return myApp.exec(); } 运行结果

总结

这个demo的使用还是不好找的,无奈不能翻墙,只能必应国际版搜索 "connect mysql from Qgis load vector layer",然后在一个错误求助中找到这个使用方法,最后我打开qgis desktop 找到我界面上链接的数据库链接,进行相应的改变。如下

"MySQL:beijing_map,host=192.168.2.205,port=3306,user=root,password=root,tables=testmap|layername=testmap"

自带的QgsDataSoueceUri 类不太好使,我昨天在查看qgis源码的时候发现了后面也有相应的字符转换,只是当时没这么敏感。

最后如果实在不知道这个mysql uri是怎么样的 可以先QGis桌面程序先链接sql,然后在属性中会存在这样的详细信息。如下:

 

另外,遇到cmake工程上的问题可以加我的cmake技术交流Q群 870836798。

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3