当前位置: 首页 > news >正文

TatukGIS Developer Kernel使用教程:如何为FMX创建第一个应用程序

概述:TatukGIS Developer Kernel(DK)是一个用于开发自定义地理信息系统(GIS)应用程序以及解决方案的综合性软件开发工具包(SDK)。本篇文章主要介绍用DK11为FMX创建一个应用程序,现在就跟着小编来了解一下吧~

# 31款JAVA开发必备控件和工具 # 界面/文档管理/报表/IDE等4000款产品火热销售中 >>

TatukGIS Developer Kernel(DK)是一个用于开发自定义地理信息系统(GIS)应用程序以及解决方案的综合性软件开发工具包(SDK)。其功能强大,价格适中,个人、公司及政府等客户都需喜欢使用。感兴趣的朋友可以下载来用一下哦^-^

点击下载TatukGIS Developer Kernel免费版

本篇文章主要介绍用DK11为FMX创建一个应用程序,现在就跟着小编来了解一下吧~

创建新项目

创建多设备应用程序。然后选择空白应用程序。

image1.png

设计形式

打开“设计”选项卡并在空白表单上添加控件。从工具选项板中选择控件。

工具选项板包含设计表单的所有组件。专用TatukGIS组件包含在“TatukGIS”类别中。

image2.png

对象检查器包含与指定对象关联的属性和事件。在本节中,您可以设置:标题、名称、对齐、位置、大小等。

image3.png

1、添加TStatusBar并将TLabel放在上面。更改lblPosition的标签名称,并将其文本设置为“Position:”。

2、添加TGIS_ViewerWND。将其名称更改为“GIS”。在对象检查器中,将“对齐”设置为“客户端”。

3、添加TToolBar,将对齐设置为“顶部”。

4、向TToolBar添加四个按钮(TButton):

  • 名称:btnOpen,文本:打开

  • 名称:btnSelect,文本:选择

  • 名称:btnDrag,文本:拖动

  • 名称:btnZoom,文本:缩放

设置每个按钮对齐到“左边”。

5、添加TGIS_ControlLegend。在对象检查器中将GIS_Viewer设置为“GIS”并将“对齐”设置为“左”。双击图例中的图层调用“可视化属性”对话框。

6、将TGIS_ControlScale和TGIS_ControlNorthArrow添加到GIS(在Structure窗口中,您可以拖放组件以设置层次结构)。在对象检查器中,将“GIS”指定为GIS_Viewer。

最终结果应如下所示:

image4.png

添加代码

设计表单后,转到“代码”选项卡。

在实现部分的{$ R * .fmx}下方添加“使用System.IOUtils,GisLicense,GisTypes,GisAllLayers,GisUtils,GisLayerVector”。

  • System.IOUtils 

    返回用户的主路径或应用程序的可写临时目录或存储,如TPath.GetDocumentsPath。

  • GisLicense 

    包含有关TatukGIS许可证的信息。

  • Mistypes 

    常见的常量和类型,如TGIS_Point。经常被客户端代码频繁使用并包含它几乎是一个要求。

  • GisAllLayers 

    允许使用TatukGIS Samples数据文件夹中的图层。

  • GisUtils 

    GisPoint()等常用方法包含在TGIS_Utils类方法中。经常被客户端代码使用并包含它几乎是一个要求。

GisLayerVector - 包含类似TGIS_Shape、TGIS_LayerVector的类型。

附加事件

接下来将事件附加到组件。要附加事件处理程序,请在“对象检查器”中选择“事件”选项卡,然后双击该事件。如果要调用“OnClick”事件,也可以双击组件。在此示例中,我们使用以下事件:

  • btnaopenclick 

procedure TForm2.btnOpenClick(Sender: TObject);
beginGIS.RotationAngle := 0 ;{$IFDEF WIN32}GIS.Open( TGIS_Utils.GisSamplesDataDir + '/world/worldDCW/world.shp');{$ELSEIF Defined(MACOS) and Defined(IOS)}GIS.Open( TPath.GetDocumentsPath + PathDelim + 'world.shp')  ;{$ELSE ANDROID}GIS.Open( TPath.GetDocumentsPath + PathDelim + 'ne_10m_admin_0_countries.shp')  ;{$ENDIF}
end;
  • btnSelectClick

procedure TForm2.btnSelectClick(Sender: TObject);
beginGIS.Mode := TGIS_ViewerMode.Select ;
end;
  • btnDragClick 

procedure TForm2.btnDragClick(Sender: TObject);
beginGIS.Mode := TGIS_ViewerMode.Drag ;
  • btnZoomClick 

procedure TForm2.btnZoomClick(Sender: TObject);
beginGIS.Mode := TGIS_ViewerMode.Zoom ;
end;
  • GISTapSimpleEvent 

    点击简单事件在所选形状上闪烁,并在状态栏中显示光标的位置。要调用该事件,请使用以下代码:

 procedure TForm2.GISTapSimpleEvent(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Single);
varptg : TGIS_Point ;shp : TGIS_Shape ;
beginif GIS.IsEmpty thenexit ;if GIS.Mode <> TGIS_ViewerMode.Select thenexit ;ptg := GIS.ScreenToMap( Point(Round(X), Round(Y)) ) ;shp := TGIS_Shape( GIS.Locate( ptg, 5 / GIS.Zoom ) ) ;if not Assigned( shp ) then exit ;shp.Flash ;
lblPosition.Text := Format( 'x: %.4f, y: %.4f ', [ptg.X,  ptg.Y] ) ;
end;

将文件添加到部署

在部署中添加文件和设置路径。

使用“项目/部署”菜单项,选择Android和iOS设备平台,并为每个平台添加要与应用程序一起部署的文件,并设置“远程路径”列值:

  • 设置Android的远程路径:assets \ internal \ 

image5.png

  • 设置iOS的远程路径:StartUp \ Documents \ 

如果要同时为几个文件设置远程路径,请单击图标DK11

image7.png

 。

测试

编译并运行项目。

源代码

最终代码应如下所示:

unit Unit2;interfaceusesSystem.SysUtils,
System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types,
FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
FMX.GisControlNorthArrow, FMX.GisControlScale, FMX.Layouts, FMX.TreeView,
FMX.GisControlLegend, GisTypesUI, FMX.GisViewerWnd, FMX.Controls.Presentation ;typeTForm2 = class(TForm)ToolBar1: TToolBar;statusBar: TStatusBar;GIS: TGIS_ViewerWnd;GIS_ControlLegend1: TGIS_ControlLegend;GIS_ControlScale1: TGIS_ControlScale;GIS_ControlNorthArrow1: TGIS_ControlNorthArrow;btnOpen: TButton;btnSelect: TButton;btnDrag: TButton;btnZoom: TButton;lblPosition: TLabel;procedure GISTapSimpleEvent(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Single);procedure btnOpenClick(Sender: TObject);procedure btnSelectClick(Sender: TObject);procedure btnDragClick(Sender: TObject);procedure btnZoomClick(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm2: TForm2;implementation{$R *.fmx}uses System.IOUtils, GisLicense, GisTypes, GisAllLayers, GisUtils, GisLayerVector;procedure TForm2.btnDragClick(Sender: TObject);
beginGIS.Mode := TGIS_ViewerMode.Drag ;
end;procedure TForm2.btnOpenClick(Sender: TObject);
beginGIS.RotationAngle := 0 ;{$IFDEF WIN32}GIS.Open( TGIS_Utils.GisSamplesDataDir + '/world/worldDCW/world.shp' );{$ELSEIF Defined(MACOS) and Defined(IOS)}GIS.Open( TPath.GetDocumentsPath + PathDelim + 'world.shp' )  ;{$ELSE ANDROID}GIS.Open( TPath.GetDocumentsPath + PathDelim + 'ne_10m_admin_0_countries.shp' )  ;{$ENDIF}
end;procedure TForm2.btnSelectClick(Sender: TObject);
beginGIS.Mode := TGIS_ViewerMode.Select ;
end;procedure TForm2.btnZoomClick(Sender: TObject);
beginGIS.Mode := TGIS_ViewerMode.Zoom ;
end;procedure TForm2.GISTapSimpleEvent(Sender: TObject; Button: TMouseButton;Shift: TShiftState; X, Y: Single);
varptg : TGIS_Point ;shp : TGIS_Shape ;
beginif GIS.IsEmpty thenexit ;if GIS.Mode <> TGIS_ViewerMode.Select thenexit ;ptg := GIS.ScreenToMap( Point(Round(X), Round(Y) ) ) ;shp := TGIS_Shape( GIS.Locate( ptg, 5/GIS.Zoom ) ) ;if not Assigned( shp ) then exit ;shp.Flash ;lblPosition.Text := Format( 'x: %.4f, y: %.4f', [ptg.X, ptg.Y] ) ;
end;end.

相关文章:

TatukGIS Developer Kernel使用教程:如何为FMX创建第一个应用程序

概述&#xff1a;TatukGIS Developer Kernel&#xff08;DK&#xff09;是一个用于开发自定义地理信息系统&#xff08;GIS&#xff09;应用程序以及解决方案的综合性软件开发工具包&#xff08;SDK&#xff09;。本篇文章主要介绍用DK11为FMX创建一个应用程序&#xff0c;现在…...

Ant Design Vue设置表格滚动 宽度自适应 不换行

Ant Design Vue设置表格滚动 宽度自适应 不换行 添加以下属性即可解决这个问题&#xff1a; <a-table :columns"columns" :data-source"list":pagination"false"bordered:scroll"{ x: max-content }" >...

在Linux上开启文件服务,需要安装并配置Samba

在Linux上开启文件服务&#xff0c;需要安装并配置Samba。以下是具体步骤&#xff1a; 安装Samba软件包&#xff1a;在终端中输入以下命令进行安装&#xff1a; 复制代码 sudo apt-get update && sudo apt-get install samba 配置Samba&#xff1a;编辑Samba配置文件…...

TypeScript 类型兼容性

TypeScript 类型兼容性 在前端开发中&#xff0c;使用 TypeScript 可以提供更强大的类型检查和类型安全。然而&#xff0c;了解 TypeScript 中的类型兼容性是至关重要的&#xff0c;因为它涉及如何处理不同类型之间的关系&#xff0c;以及在这些类型之间进行无缝的交互。本文将…...

【多线程】线程的状态

我们可以通过下面的这段代码来查看线程一共有哪几种状态 //线程的状态是一个枚举类型 Thread.State for(Thread.State state : Thread.State.values()){System.out.println(state); }NEW&#xff08;新建状态&#xff09;&#xff1a; 当线程对象已经被创建&#xff0c;但是 s…...

pytorch 对图片进行归一化处理

如题&#xff0c;神经网络通常使用浮点数张量作为输入&#xff0c;我们要做的第一件事情就是将图片转化为浮点数&#xff0c;并且做归一化操作。 import torch import imageio import osdata_dirF:\\work\\deep_learning\\pytorch\\dlwpt-code-master\\data\\p1ch4\\image-cat…...

零售数据分析师熬夜整理:人、货、场、供、财这样做

在零售数据分析中&#xff0c;人、货、场、供、财数据分析非常重要&#xff0c;它们分别是指人员、商品、场所、供应和财务&#xff0c;对这些要素进行数据分析&#xff0c;可以更好地了解市场需求、优化商品供应链、调整销售策略和提高盈利能力。零售数据量大、分析指标多且复…...

基于SSM的学生选课管理系统

基于SSM的高校校园学生选课系统的设计与实现~ 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringSpringMVCMyBatisVue工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 登录界面 专业管理 教师管理 课程管理 成绩管理 摘要 基于SSM的学生选课管…...

SQL注入漏洞

0x01 漏洞介绍 泛微e-office系统是标准、易用、快速部署上线的专业协同OA软件&#xff0c;国内协同OA办公领域领导品牌&#xff0c;致力于为企业用户提供专业OA办公系统、移动OA应用等协同OA整体解决方案。泛微e-office深谙改革之道以迎变革之机&#xff0c;沉心产品研发数十载…...

C++ wpf自制软件打包安装更新源码实例

程序示例精选 C wpf自制软件打包安装更新源码实例 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对《C wpf自制软件打包安装更新源码实例》编写代码&#xff0c;代码整洁&#xff0c;规则&…...

8月19日PMP成绩,预计10月16日公布!附查询入口、流程

PMP的考试成绩一般在考后6-8周即可查询&#xff0c;8月PMP的成绩预计会在北京时间10月16日晚上公布&#xff0c;具体时间以官方公告为准。 如何查询8月考试成绩&#xff1f; 渠道一&#xff1a;收到PMI邮件提醒 当你注册PMI所使用的邮箱收到一封PMI发来的&#xff0c;标题为…...

简易LDO设计(包含原理图、PCB和实验)

一、前置知识 ①该电路是通过三极管&#xff08;BJT&#xff09;来实现的&#xff0c;所以需要知晓三极管的工作原理和特性。 ②三极管有三种状态&#xff1a;放大、饱和、截止。本文是利用三极管的放大状态来模拟LDO芯片的功能。 二、原理图 ①稳压二极管要想稳定到某个电压范…...

SpringBoot面试题5:SpringBoot Starter的工作原理是什么?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:SpringBoot Starter的工作原理是什么? Spring Boot Starter 是一种便捷的方式来为 Spring Boot 应用程序引入一组特定功能的依赖项。它简化了项目…...

Leetcode 2902. Count of Sub-Multisets With Bounded Sum

Leetcode 2902. Count of Sub-Multisets With Bounded Sum 1. 解题思路2. 代码实现3. 算法优化 题目链接&#xff1a;2902. Count of Sub-Multisets With Bounded Sum 1. 解题思路 这一题有点惭愧&#xff0c;因为没有搞定&#xff0c;遇上了超时问题…… 我的思路其实还是…...

ARP协议(地址解析协议) 的作用和操作过程

目录 1.问题: &#xff08;在同一个LAN局域网内&#xff09;如何在已知目的接口的IP地址前提下确定其MAC地址&#xff1f;2.问题&#xff1a;现在假设主机A要向目的主机B发送一个数据报&#xff0c;怎么发送呢&#xff1f;2.1在一个局域网内时2.1.1情况一&#xff1a;2.1.2情况…...

轻游戏风格虚拟资源付费下载模板Discuz论坛模板

轻游戏风格虚拟资源付费下载模板Discuz论坛模板&#xff0c;游戏资讯付费VIP源码模板。 模板说明&#xff1a; 1、模板名称&#xff1a;"qing游戏风格"&#xff0c;版本支持&#xff1a;discuzx3.0版本&#xff0c;discuzx3.1版本&#xff0c;discuzx3.2版本&#…...

MongoDB索引操作

1、创建索引 语句&#xff1a; db.collection.createIndex(keys, options, commitQuorum) 选项参数名类型描述keys 包含排序字段和排序方式的对象&#xff0c; 值&#xff1a; 1为升序索引 -1为降序索引 options参数控制对象backgroundboolean 可选&#xff0…...

AMEYA360:君正低功耗AIoT图像识别处理器—X1600/X1600E

• 高性能 XBurst 1 CPU&#xff0c;主频1.0GHz • 超低功耗 • 内置LPDDR2(X1600&#xff1a;32MB&#xff0c;X1600E&#xff1a;64MB) • 实时控制核XBurst 0&#xff0c;面向安全管理和实时控制 • 丰富的外设接口 应用领域 • 基于二维码的智能商业 • 智能物联网 • 高端…...

EM@圆和圆锥曲线的参数方程

文章目录 abstract圆的参数方程匀速圆周运动的轨迹从普通方程直接转化为参数方程 任意位置圆心的方程参数方程一般方程例 交点问题的参数方程法 圆锥曲线的参数方程椭圆参数方程例椭圆内接矩形的最大面积问题 抛物线参数方程一般位置的抛物线例 双曲线的参数方程点到双曲线的最…...

uniapp 微信小程序 vue3.0+TS手写自定义封装步骤条(setup)

uniapp手写自定义步骤条&#xff08;setup&#xff09; 话不多说 先上效果图&#xff1a; setup.vue组件代码&#xff1a; <template><view class"stepBox"><viewclass"stepitem"v-for"(item, index) in stepList":key"i…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言&#xff1a;语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域&#xff0c;文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量&#xff0c;支撑着搜索引擎、推荐系统、…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...