国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Qgis二次開(kāi)發(fā)-QgsMapTool地圖交互工具詳解

這篇具有很好參考價(jià)值的文章主要介紹了Qgis二次開(kāi)發(fā)-QgsMapTool地圖交互工具詳解。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1.簡(jiǎn)介

QgsMapTool地圖工具是用于操作地圖畫(huà)布的用戶交互式工具。例如,地圖平移和縮放功能被實(shí)現(xiàn)為地圖工具。

QgsMapTool是抽象基類,以下是類的繼承關(guān)系:

Qgis二次開(kāi)發(fā)-QgsMapTool地圖交互工具詳解,Qgis,qt,qgis,QgsMapTool,地圖交互

  • QgsMapToolEdit:用于編輯矢量幾何圖形的映射工具的基類?
  • QgsMapToolEmitPoint:一個(gè)地圖工具,當(dāng)單擊地圖時(shí),它只是發(fā)出一個(gè)點(diǎn)。
    將一個(gè)槽連接到它的canvasClicked()信號(hào)將允許您為傳入點(diǎn)實(shí)現(xiàn)自定義行為。
  • QgsMapToolExtent:地圖畫(huà)布上繪制矩形發(fā)出一個(gè)范圍。
  • QgsMapToolIdentify :用于識(shí)別圖層特征的映射工具。
  • QgsMapToolPan:用于平移地圖的地圖工具。
  • QgsMapToolZoom :用于放大/縮小地圖的地圖工具。

2.常用接口

virtual void canvasDoubleClickEvent (QgsMapMouseEvent *e) 重寫(xiě)鼠標(biāo)雙擊事件
virtual void?canvasMoveEvent (QgsMapMouseEvent *e) 重寫(xiě)鼠標(biāo)移動(dòng)事件
virtual void canvasPressEvent (QgsMapMouseEvent *e) 重寫(xiě)鼠標(biāo)按下事件
virtual void canvasReleaseEvent (QgsMapMouseEvent *e) 重寫(xiě)鼠標(biāo)抬起事件
virtual void?setCursor (const QCursor &cursor) 設(shè)置光標(biāo)
QgsPointXY toMapCoordinates (QPoint point) 將點(diǎn)從屏幕坐標(biāo)轉(zhuǎn)換為地圖坐標(biāo)。

3.示例?

示例1:畫(huà)布移動(dòng)、放大、縮小

Qgis二次開(kāi)發(fā)-QgsMapTool地圖交互工具詳解,Qgis,qt,qgis,QgsMapTool,地圖交互

源碼:

#pragma once

#include <QtWidgets/QMainWindow>
#include "ui_GisCtrl.h"
#include <QDebug>
#include <QFileInfo>
#include <qgsmaptoolpan.h>
#include <qgsrasterlayer.h>
#include <qgsmapcanvas.h>
#include <qgspoint.h>
#include <QMouseEvent>
#include <qgsmaptoolzoom.h>
#include <QActionGroup>

class GisCtrl : public QMainWindow
{
    Q_OBJECT

public:
    GisCtrl(QWidget *parent = Q_NULLPTR);

private:
    Ui::GisCtrlClass ui;

private slots:
	void slotXyCoordinates(const QgsPointXY &p);
	void slotMove();
	void slotZoomIn();
	void slotZoomOut();

private:
	QgsMapCanvas *m_mapCanvas = nullptr;
	QList<QgsMapLayer *> m_layers;
	QgsMapToolPan *m_toolPan = nullptr;	// 新建移動(dòng)工具
	QgsMapToolZoom *m_toolZoomIn = nullptr;//放大
	QgsMapToolZoom *m_toolZoomOut = nullptr;//縮小

	QActionGroup *m_actionGroup = nullptr;
};



#include "GisCtrl.h"
#include <qgsrasterlayer.h>
#include <qgsrubberband.h>
#pragma execution_character_set("utf-8")

GisCtrl::GisCtrl(QWidget *parent)
    : QMainWindow(parent)
{
    ui.setupUi(this);

	//創(chuàng)建畫(huà)布
	m_mapCanvas = new QgsMapCanvas(this);

	QString url = "F:/arcgis/TMS.xml";

	m_mapCanvas->setCanvasColor(QColor(255, 255, 255));

	//加載瓦片地圖
	QgsRasterLayer *layer = new QgsRasterLayer(url);
	if (!layer->isValid())
	{
		qDebug() << "load map faild";
	}

	m_layers.append(layer);

	// 新建移動(dòng)工具
	m_toolPan = new QgsMapToolPan(m_mapCanvas);

	m_mapCanvas->setExtent(layer->extent());
	m_mapCanvas->enableAntiAliasing(true);
	m_mapCanvas->setLayers(m_layers);
	m_mapCanvas->setMapTool(m_toolPan);

	m_toolZoomIn = new QgsMapToolZoom(m_mapCanvas, false);
	m_toolZoomOut = new QgsMapToolZoom(m_mapCanvas, true);

	m_actionGroup = new QActionGroup(this);
	m_actionGroup->addAction(ui.actionMove);
	m_actionGroup->addAction(ui.actionZoomIn);
	m_actionGroup->addAction(ui.actionZoomOut);
	m_actionGroup->setExclusive(true);

	connect(m_mapCanvas, &QgsMapCanvas::xyCoordinates, this, &GisCtrl::slotXyCoordinates);
	connect(ui.actionMove, &QAction::triggered, this, &GisCtrl::slotMove);
	connect(ui.actionZoomIn, &QAction::triggered, this, &GisCtrl::slotZoomIn);
	connect(ui.actionZoomOut, &QAction::triggered, this, &GisCtrl::slotZoomOut);

	setCentralWidget(m_mapCanvas);

	ui.actionMove->setChecked(true);
	ui.actionLineManager->setVisible(false);
	ui.actionLayer->setVisible(false);
	ui.actionSelect->setVisible(false);
	ui.actionItem->setVisible(false);
}

void GisCtrl::slotXyCoordinates(const QgsPointXY &p)
{
	QString str = QString("經(jīng)度= %1,緯度=%2").arg(QString::number(p.x(), 'f', 6)).arg(QString::number(p.y(), 'f', 6));
	this->statusBar()->showMessage(str);
}

void GisCtrl::slotMove()
{
	m_mapCanvas->setMapTool(m_toolPan);
}

void GisCtrl::slotZoomIn()
{
	m_mapCanvas->setMapTool(m_toolZoomIn);
}

void GisCtrl::slotZoomOut()
{
	m_mapCanvas->setMapTool(m_toolZoomOut);
}

示例2:鼠標(biāo)點(diǎn)擊畫(huà)矩形。

Qgis二次開(kāi)發(fā)-QgsMapTool地圖交互工具詳解,Qgis,qt,qgis,QgsMapTool,地圖交互

自定義一個(gè)地圖交互工具繼承QgsMapToolIdentify

源碼:

#pragma once
#include <QObject>
#include <QList>
#include <QScopedPointer>
#include <qgsmapcanvas.h>
#include <qgsmaptoolidentify.h>
#include <qgsrubberband.h>
#include <qgsmapmouseevent.h>


class QgsMapToolSelectFeatures : public QgsMapToolIdentify
{
	Q_OBJECT
public:
	QgsMapToolSelectFeatures(QgsMapCanvas *mapCanvas);

protected:
	//重寫(xiě)鼠標(biāo)移動(dòng)
	void canvasMoveEvent(QgsMapMouseEvent *e) override;
	//重寫(xiě)鼠標(biāo)按下
	void canvasPressEvent(QgsMapMouseEvent *e) override;

	void initRubberBand();

private:
	// 是否正在選擇
	bool mSelectionActive = false;
	QScopedPointer<QgsRubberBand> mSelectionRubberBand;
	QColor mFillColor = QColor(255, 255, 0, 63);
	QColor mStrokeColor = QColor(255, 255, 0, 100);
	QPoint mInitDragPos;
};


//cpp
#include "QgsMapToolSelectFeatures.h"
#include "QgsMapToolIdentify.h"

QgsMapToolSelectFeatures::QgsMapToolSelectFeatures(QgsMapCanvas *mapCanvas)
	: QgsMapToolIdentify(mapCanvas)
{
}

void QgsMapToolSelectFeatures::canvasMoveEvent(QgsMapMouseEvent * e)
{
	if (e->buttons() != Qt::LeftButton)
		return;

	QRect rect;
	if (!mSelectionActive)
	{
		mSelectionActive = true;
		rect = QRect(e->pos(), e->pos());
	}
	else
	{
		rect = QRect(e->pos(), mInitDragPos);
	}
	if (mSelectionRubberBand)
		mSelectionRubberBand->setToCanvasRectangle(rect);
}

void QgsMapToolSelectFeatures::canvasPressEvent(QgsMapMouseEvent * e)
{
	if (!mSelectionRubberBand)
		initRubberBand();

	mInitDragPos = e->pos();
}

void QgsMapToolSelectFeatures::initRubberBand()
{
	mSelectionRubberBand.reset(new QgsRubberBand(mCanvas, QgsWkbTypes::PolygonGeometry));
	mSelectionRubberBand->setFillColor(mFillColor);
	mSelectionRubberBand->setStrokeColor(mStrokeColor);
}

使用

QgsMapToolSelectFeatures *m_tool = new QgsMapToolSelectFeatures(m_mapCanvas);
m_mapCanvas->setMapTool(m_tool);

示例3:右鍵彈出菜單標(biāo)注地點(diǎn)。

Qgis二次開(kāi)發(fā)-QgsMapTool地圖交互工具詳解,Qgis,qt,qgis,QgsMapTool,地圖交互

#pragma once
#include <QObject>
#include <QList>
#include <QScopedPointer>
#include <qmath.h>
#include <qgsmapcanvas.h>
#include <qgsmaptoolidentify.h>
#include <qgsrubberband.h>
#include <qgsmapmouseevent.h>
#include <qgsgeometry.h>
#include <QMenu>

class QgsRubberBand;
class QgsAnnotationPointTextItem;
class QgsMapToolAddItem : public QgsMapToolIdentify
{
	Q_OBJECT
public:
	QgsMapToolAddItem(QgsMapCanvas *mapCanvas);

	typedef struct _mark
	{
		QgsRubberBand *rubberBand;	//svg圖標(biāo)item
		QgsGeometry geo;				//區(qū)域
		QgsAnnotationPointTextItem *text;//字體
		QgsAnnotationLayer *layer;
	}Mark;

protected:
	//重寫(xiě)鼠標(biāo)按下
	void canvasPressEvent(QgsMapMouseEvent *e) override;

private slots:
	void slotAdd();
	void slotDel();
	void slotShowScale(double scale);
	void slotZoomLastStatusChanged(bool);

private:
	// 是否正在選擇
	bool mSelectionActive = false;

	QMenu *m_menu = nullptr;

	QAction *m_add = nullptr;
	QAction *m_del = nullptr;

	QgsMapCanvas *m_canvas;

	QList<Mark> m_lstMark;
};


#include "QgsMapToolAddItem.h"
#include "QgsMapToolIdentify.h"
#include "qgsapplication.h"
#include "qgsvectorlayer.h"
#include <QMessageBox>
#include <qgsfeature.h>
#include <qgsvectorlayer.h>
#include <qgsrectangle.h>
#include <QMouseEvent>
#include <QMessageBox>
#include "BaseFunc.h"
#include <qgsannotationlayer.h>
#include <qgsannotationpointtextitem.h>

#pragma execution_character_set("utf-8")

extern bool g_is3857crs;
extern QList<QgsMapLayer *> g_layers;

static QgsPointXY g_point;
static int g_index = -1;
QgsMapToolAddItem::QgsMapToolAddItem(QgsMapCanvas *mapCanvas)
	: QgsMapToolIdentify(mapCanvas)
	, m_canvas(mapCanvas)
{
	this->setCursor(Qt::CrossCursor);

	m_menu = new QMenu();
	m_add = m_menu->addAction(QIcon(QPixmap(":/GisCtrl/image/add.png")),"添加");
	m_del = m_menu->addAction(QIcon(QPixmap(":/GisCtrl/image/del.png")),"刪除");

	connect(m_add, &QAction::triggered, this, &QgsMapToolAddItem::slotAdd);
	connect(m_del, &QAction::triggered, this, &QgsMapToolAddItem::slotDel);
	connect(mapCanvas, &QgsMapCanvas::zoomLastStatusChanged,
		this, &QgsMapToolAddItem::slotZoomLastStatusChanged);
}

void QgsMapToolAddItem::canvasPressEvent(QgsMapMouseEvent * e)
{
	if (e->buttons() == Qt::RightButton)
	{
		g_point = e->mapPoint();
		bool isHaveItem = false;
		const QgsMapToPixel *mtransform = m_canvas->getCoordinateTransform();
		for (int i = 0; i < m_lstMark.size(); i++)
		{
			Mark item = m_lstMark.at(i);
			QgsVector qgsVector;

			QgsPointXY p2 = item.geo.asPoint();
			QgsPointXY curPoint = mtransform->transform(g_point.x(), g_point.y());
			QgsPointXY itemPoint = mtransform->transform(p2.x(), p2.y());

			qgsVector = curPoint - itemPoint;

			if ((-10 < qgsVector.x() && qgsVector.x() < 15) &&
				(-10 < qgsVector.y() && qgsVector.y() < 15))
			{
				isHaveItem = true;
				g_index = i;
				break;
			}
		}

		if (!isHaveItem)
			g_index = -1;
	
		QPoint point = e->pos();
		point.setY(point.y() + 80);

		m_del->setVisible(isHaveItem);
	
		m_menu->exec(point);
	}
	else
	{
		m_menu->hide();
	}
}

void QgsMapToolAddItem::slotAdd()
{
	//添加點(diǎn)
	QgsRubberBand *rb = new QgsRubberBand(m_canvas, QgsWkbTypes::PointGeometry);
	//rb->setOpacity(0.8);
	rb->setIcon(QgsRubberBand::IconType::ICON_SVG);    //設(shè)置圖標(biāo)類型
	rb->setIconSize(5);														//設(shè)置圖標(biāo)尺寸 
	rb->setSvgIcon(":/GisCtrl/image/water.svg", QPoint(-16, -16));        //設(shè)置圖標(biāo)文件路徑和偏移

	QgsGeometry geo = QgsGeometry::fromPointXY(g_point);	//經(jīng)緯度
	rb->addGeometry(geo);                              //繪制
	
	//添加文字
	QgsCoordinateTransformContext coordinateTransformContext;
	//先構(gòu)造出一個(gè)能加注記的圖層
	QgsAnnotationLayer *textLayer = new QgsAnnotationLayer("annotationLayer",
		QgsAnnotationLayer::LayerOptions(coordinateTransformContext));

	double lon = 0, lat = 0;
	BaseFunc::WebMercatorToWGS84(g_point.x(), g_point.y(), &lon, &lat);

	//構(gòu)造時(shí)傳入地理坐標(biāo),有必要后期改成鼠標(biāo)事件點(diǎn)擊來(lái)創(chuàng)建QgsAnnotationMarkerItem
	const QgsMapToPixel *mtransform = m_canvas->getCoordinateTransform();
	//轉(zhuǎn)換到屏幕坐標(biāo)
	QgsPointXY offsetPoint = mtransform->transform(g_point.x(), g_point.y());
	int yOffset = 25;
	offsetPoint.setY(offsetPoint.y() + yOffset);
	//轉(zhuǎn)回去到地圖坐標(biāo)
	offsetPoint = mtransform->toMapCoordinates(offsetPoint.x(), offsetPoint.y());

	QString showText = QString("%1,%2").arg(QString::number(lon, 'f', 6)).arg(QString::number(lat, 'f', 6));
	QgsAnnotationPointTextItem* textItem = new QgsAnnotationPointTextItem(showText, QgsPoint(offsetPoint.x(), offsetPoint.y()));
	textItem->setAlignment(Qt::AlignHCenter);
	QgsTextFormat format;
	QFont font;
	font.setBold(true);
	font.setPointSize(13);
	format.setFont(font);
	format.setColor(QColor(Qt::yellow));
	textItem->setFormat(format);
	textLayer->addItem(textItem);//畫(huà)布添加Item

	Mark mark;
	mark.rubberBand = rb;
	mark.geo = geo;
	mark.text = textItem;
	mark.layer = textLayer;

	m_lstMark.append(mark);

	g_layers.push_front(textLayer);
	m_canvas->setLayers(g_layers);
	m_canvas->refresh();
}

void QgsMapToolAddItem::slotDel()
{
	if (g_index < 0)
		return;

	Mark mark = m_lstMark.at(g_index);
	g_layers.removeOne(mark.layer);

	delete mark.layer;

	mark.rubberBand->reset();
	delete mark.rubberBand;

	m_lstMark.removeAt(g_index);

	m_canvas->setLayers(g_layers);
	m_canvas->refresh();
}

void QgsMapToolAddItem::slotShowScale(double scale)
{
	qDebug() << "scale = " << scale;
}

void QgsMapToolAddItem::slotZoomLastStatusChanged(bool)
{
	for (int i = 0; i < m_lstMark.size(); i++)
	{
		QgsPointXY xy = m_lstMark.at(i).geo.asPoint();

		const QgsMapToPixel *mtransform = m_canvas->getCoordinateTransform();

		//轉(zhuǎn)換到屏幕坐標(biāo)
		QgsPointXY offsetPoint = mtransform->transform(xy.x(), xy.y());

		int yOffset = 25;
		offsetPoint.setY(offsetPoint.y() + yOffset);

		//轉(zhuǎn)回去到地圖坐標(biāo)
		offsetPoint = mtransform->toMapCoordinates(offsetPoint.x(), offsetPoint.y());

		m_lstMark.at(i).text->setPoint(QgsPoint(offsetPoint.x(), offsetPoint.y()));
	}
}

4.更多參考

Qgis二次開(kāi)發(fā)-QgsAnnotationItem(添加文字、圖片標(biāo)注(支持svg、png、jpg等常用圖片格式))_Mr.codeee的博客-CSDN博客

Qgis二次開(kāi)發(fā)-QgsMapCanvas畫(huà)布簡(jiǎn)介_(kāi)Mr.codeee的博客-CSDN博客?

Qgis二次開(kāi)發(fā)-QgsRubberBand詳解(畫(huà)線、畫(huà)多邊形)_Mr.codeee的博客-CSDN博客?

Qgis二次開(kāi)發(fā)-QgsAnnotationItem(添加文字、圖片標(biāo)注(支持svg、png、jpg等常用圖片格式))_Mr.codeee的博客-CSDN博客?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-599802.html

到了這里,關(guān)于Qgis二次開(kāi)發(fā)-QgsMapTool地圖交互工具詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • QGIS二次開(kāi)發(fā)四:實(shí)現(xiàn)圖層列表

    QGIS二次開(kāi)發(fā)四:實(shí)現(xiàn)圖層列表

    在實(shí)際開(kāi)發(fā)中我們通常會(huì)遇到同時(shí)顯示多個(gè)圖層,并且還要實(shí)時(shí)顯示和隱藏各圖層的需求,如同 ArcGIS 的圖層列表那樣,界面左側(cè)顯示圖層列表,列出當(dāng)前已加載的所有圖層,同時(shí)每個(gè)圖層前面有復(fù)選框可以控制圖層的顯示/隱藏;界面右側(cè)為畫(huà)布,按圖層列表的適當(dāng)順序顯示

    2024年02月13日
    瀏覽(22)
  • QGIS3.28的二次開(kāi)發(fā)一:編譯工程

    QGIS3.28的二次開(kāi)發(fā)一:編譯工程

    更新:最近寫(xiě)了個(gè)3.18.3版本的編譯教程,沒(méi)有出現(xiàn)任何問(wèn)題。 QGIS3.18編譯教程_程序員班長(zhǎng)的博客-CSDN博客 環(huán)境:VS2019+OSGeo4W+CMake_3.26+Cygwin64+QGIS_3.28 注意:一定要按照步驟順序來(lái)! VS2019下載鏈接 https://my.visualstudio.com/Downloads?q=visual%20studio%202019wt.mc_id=o~msft~vscom~older-downloads 下載完

    2024年02月15日
    瀏覽(32)
  • Ubuntu 22.04 配置 QGIS二次開(kāi)發(fā)環(huán)境

    源碼地址: https://github.com/qgis/QGIS/releases QGIS 官方指導(dǎo)文檔地址: https://github.com/qgis/QGIS/blob/release-3_26/INSTALL.md(此處為3.26的指導(dǎo)文檔,可以自行修改查看) sudo apt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev l

    2024年02月16日
    瀏覽(101)
  • QGIS二次開(kāi)發(fā):集成二維CAD控件MxDraw

    QGIS二次開(kāi)發(fā):集成二維CAD控件MxDraw

    本文記錄在QGIS中集成MxDraw控件的方法。 參見(jiàn)筆者博文“FreeCAD二次開(kāi)發(fā):集成二維CAD控件MxDraw”所述的安裝方法。 參見(jiàn)筆者博文\\\"Windows 10下編譯安裝QGIS\\\"所述的編譯安裝方法。 按照QGIS的管理,Qt ui文件可放到src/ui目錄及其子目錄下。因此,可將MxDrawView.ui拷貝到src/ui/gd目錄下,

    2024年02月15日
    瀏覽(25)
  • QGIS3.28的二次開(kāi)發(fā)九:添加矢量要素

    QGIS3.28的二次開(kāi)發(fā)九:添加矢量要素

    對(duì)矢量要素的編輯是 GIS 軟件很重要的功能點(diǎn)之一,也是最難實(shí)現(xiàn)的功能點(diǎn)之一。編輯矢量要素涉及到很多方面的考慮,包括且不限于矢量要素的幾何類型,拓?fù)潢P(guān)系,構(gòu)成要素的節(jié)點(diǎn)的增刪改,編輯會(huì)話 (session) 的啟動(dòng)、回溯和提交,要素屬性的增刪改等。本文不會(huì)也不可能

    2024年02月12日
    瀏覽(28)
  • Qt下開(kāi)發(fā)基于QGIS的應(yīng)用程序

    Qt下開(kāi)發(fā)基于QGIS的應(yīng)用程序

    由于有在背景地圖上進(jìn)行動(dòng)態(tài)軌跡(曲線)顯示的需要,故采用Qt+QGIS的方案! Qt5.12.12,VS2015編譯器,QGIS3.10.1。 在配置之前,電腦是新裝機(jī)的系統(tǒng),沒(méi)有任何相關(guān)軟件版本。 在Qt官網(wǎng)(https://download.qt.io/)或國(guó)內(nèi)鏡像網(wǎng)站(https://mirrors.tuna.tsinghua.edu.cn/qt/archive/qt)或網(wǎng)絡(luò)搜索

    2024年02月14日
    瀏覽(89)
  • C# Solidworks二次開(kāi)發(fā):程序工具界面和選項(xiàng)相關(guān)API詳解

    C# Solidworks二次開(kāi)發(fā):程序工具界面和選項(xiàng)相關(guān)API詳解

    大家好,今天要講的是關(guān)于程序工具相關(guān)的API介紹。 下面是要介紹的API: (1)第一個(gè)為GetAutoPartSimplification,這個(gè)API的含義為獲取簡(jiǎn)化配置的指針,下面是官方具體解釋: 其輸入?yún)?shù)的類型在上一篇文章中已經(jīng)介紹過(guò)了gtError_e,返回值為指向簡(jiǎn)化配置的指針。 (2)第二個(gè)為Ge

    2024年04月17日
    瀏覽(18)
  • QGIS開(kāi)發(fā)五:VS使用QT插件創(chuàng)建UI界面

    QGIS開(kāi)發(fā)五:VS使用QT插件創(chuàng)建UI界面

    前面我們說(shuō)了在創(chuàng)建項(xiàng)目時(shí)創(chuàng)建的是一個(gè)空項(xiàng)目,即不使用 Qt 提供的綜合開(kāi)發(fā)套件 Qt Creator,也不使用 Qt Visual Studio Tools 這類工具。 但是后面發(fā)現(xiàn),如果我想要有更加滿意的界面布局,還是要自己寫(xiě)一個(gè)UI文件,如果不使用QT插件,在VS中導(dǎo)入自己的UI文件編譯起來(lái)不是那么容

    2024年02月13日
    瀏覽(31)
  • 【ArcGIS Pro二次開(kāi)發(fā)】(57):地圖系列

    【ArcGIS Pro二次開(kāi)發(fā)】(57):地圖系列

    在ArcGIS Pro中,有一個(gè)地圖系列,可以在一個(gè)布局中導(dǎo)出多個(gè)地圖。 在SDK中為ArcGIS.Desktop.layout.MapSeries類和映射系列導(dǎo)出選項(xiàng),可以以支持多頁(yè)導(dǎo)出。 MapSeries類提供了一個(gè)靜態(tài)CreateSpatialMapSeries方法,該方法使用指定的索引層(作為參數(shù)傳遞)為給定布局生成空間地圖系列。 使

    2024年02月14日
    瀏覽(19)
  • openlayers [六] 地圖交互 interaction 詳解

    地圖的交互功能包含很多,如地圖雙擊放大,鼠標(biāo)滾輪縮放,矢量要素點(diǎn)選,地圖上繪制圖形等等。只要是涉及到與地圖的交互,就會(huì)涉及到 intercation 類,它定義了用戶與地圖進(jìn)行交互的基本要素和事件。 在 OpenLayers 6 中,表達(dá)交互功能的基類是 interaction,它是一個(gè)虛基類,

    2024年01月19日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包