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…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
以光量子为例,详解量子获取方式
光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学(silicon photonics)的光波导(optical waveguide)芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中,光既是波又是粒子。光子本…...
中医有效性探讨
文章目录 西医是如何发展到以生物化学为药理基础的现代医学?传统医学奠基期(远古 - 17 世纪)近代医学转型期(17 世纪 - 19 世纪末)现代医学成熟期(20世纪至今) 中医的源远流长和一脉相承远古至…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
