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创建一个应用程序,现在就跟着小编来了解一下吧~
创建新项目
创建多设备应用程序。然后选择空白应用程序。
设计形式
打开“设计”选项卡并在空白表单上添加控件。从工具选项板中选择控件。
工具选项板包含设计表单的所有组件。专用TatukGIS组件包含在“TatukGIS”类别中。
对象检查器包含与指定对象关联的属性和事件。在本节中,您可以设置:标题、名称、对齐、位置、大小等。
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。
最终结果应如下所示:
添加代码
设计表单后,转到“代码”选项卡。
在实现部分的{$ 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 \
-
设置iOS的远程路径:StartUp \ Documents \
如果要同时为几个文件设置远程路径,请单击图标DK11
。
测试
编译并运行项目。
源代码
最终代码应如下所示:
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创建第一个应用程序
概述:TatukGIS Developer Kernel(DK)是一个用于开发自定义地理信息系统(GIS)应用程序以及解决方案的综合性软件开发工具包(SDK)。本篇文章主要介绍用DK11为FMX创建一个应用程序,现在…...

Ant Design Vue设置表格滚动 宽度自适应 不换行
Ant Design Vue设置表格滚动 宽度自适应 不换行 添加以下属性即可解决这个问题: <a-table :columns"columns" :data-source"list":pagination"false"bordered:scroll"{ x: max-content }" >...
在Linux上开启文件服务,需要安装并配置Samba
在Linux上开启文件服务,需要安装并配置Samba。以下是具体步骤: 安装Samba软件包:在终端中输入以下命令进行安装: 复制代码 sudo apt-get update && sudo apt-get install samba 配置Samba:编辑Samba配置文件…...
TypeScript 类型兼容性
TypeScript 类型兼容性 在前端开发中,使用 TypeScript 可以提供更强大的类型检查和类型安全。然而,了解 TypeScript 中的类型兼容性是至关重要的,因为它涉及如何处理不同类型之间的关系,以及在这些类型之间进行无缝的交互。本文将…...

【多线程】线程的状态
我们可以通过下面的这段代码来查看线程一共有哪几种状态 //线程的状态是一个枚举类型 Thread.State for(Thread.State state : Thread.State.values()){System.out.println(state); }NEW(新建状态): 当线程对象已经被创建,但是 s…...
pytorch 对图片进行归一化处理
如题,神经网络通常使用浮点数张量作为输入,我们要做的第一件事情就是将图片转化为浮点数,并且做归一化操作。 import torch import imageio import osdata_dirF:\\work\\deep_learning\\pytorch\\dlwpt-code-master\\data\\p1ch4\\image-cat…...

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

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

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

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

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

简易LDO设计(包含原理图、PCB和实验)
一、前置知识 ①该电路是通过三极管(BJT)来实现的,所以需要知晓三极管的工作原理和特性。 ②三极管有三种状态:放大、饱和、截止。本文是利用三极管的放大状态来模拟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. 算法优化 题目链接:2902. Count of Sub-Multisets With Bounded Sum 1. 解题思路 这一题有点惭愧,因为没有搞定,遇上了超时问题…… 我的思路其实还是…...

ARP协议(地址解析协议) 的作用和操作过程
目录 1.问题: (在同一个LAN局域网内)如何在已知目的接口的IP地址前提下确定其MAC地址?2.问题:现在假设主机A要向目的主机B发送一个数据报,怎么发送呢?2.1在一个局域网内时2.1.1情况一:2.1.2情况…...

轻游戏风格虚拟资源付费下载模板Discuz论坛模板
轻游戏风格虚拟资源付费下载模板Discuz论坛模板,游戏资讯付费VIP源码模板。 模板说明: 1、模板名称:"qing游戏风格",版本支持:discuzx3.0版本,discuzx3.1版本,discuzx3.2版本&#…...
MongoDB索引操作
1、创建索引 语句: db.collection.createIndex(keys, options, commitQuorum) 选项参数名类型描述keys 包含排序字段和排序方式的对象, 值: 1为升序索引 -1为降序索引 options参数控制对象backgroundboolean 可选࿰…...

AMEYA360:君正低功耗AIoT图像识别处理器—X1600/X1600E
• 高性能 XBurst 1 CPU,主频1.0GHz • 超低功耗 • 内置LPDDR2(X1600:32MB,X1600E:64MB) • 实时控制核XBurst 0,面向安全管理和实时控制 • 丰富的外设接口 应用领域 • 基于二维码的智能商业 • 智能物联网 • 高端…...

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

uniapp 微信小程序 vue3.0+TS手写自定义封装步骤条(setup)
uniapp手写自定义步骤条(setup) 话不多说 先上效果图: setup.vue组件代码: <template><view class"stepBox"><viewclass"stepitem"v-for"(item, index) in stepList":key"i…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

让AI看见世界:MCP协议与服务器的工作原理
让AI看见世界:MCP协议与服务器的工作原理 MCP(Model Context Protocol)是一种创新的通信协议,旨在让大型语言模型能够安全、高效地与外部资源进行交互。在AI技术快速发展的今天,MCP正成为连接AI与现实世界的重要桥梁。…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
ip子接口配置及删除
配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)
本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...
C语言中提供的第三方库之哈希表实现
一. 简介 前面一篇文章简单学习了C语言中第三方库(uthash库)提供对哈希表的操作,文章如下: C语言中提供的第三方库uthash常用接口-CSDN博客 本文简单学习一下第三方库 uthash库对哈希表的操作。 二. uthash库哈希表操作示例 u…...
从面试角度回答Android中ContentProvider启动原理
Android中ContentProvider原理的面试角度解析,分为已启动和未启动两种场景: 一、ContentProvider已启动的情况 1. 核心流程 触发条件:当其他组件(如Activity、Service)通过ContentR…...