WebGIS 信息系统-系统实现

WebGIS 信息系统-系统实现

    • 主界面基本模块
    • 地图基本管理模块
    • 地图属性
    • 主界面大纲视图
    • 实现创建选项菜单
    • 添加点击事件
    • 实现加载底图图层和定位图层
    • 完善这个类文件

主界面基本模块

(1 )平移:单击按钮将鼠标置于平移状态,可用来清除当前图形操作工具的状态。
(2 )放大: 单击按钮对地图进行放大操作(或者通过鼠标中键进行)。
(3 )缩小: 单击按钮对地图进行缩小操作(或者通过鼠标中键进行)。
(4 )全图: 单击按钮显示全图。
(5 )保存: 单击按钮将发生改变的地图数据更新到数据库。
(6 )删除: 单击按钮删除地图要素。
(7 )添加:添加绘制新的道路。
(8 )属性: 单击查看道路段属性信息。
(9 )剪切: 选择剪切道路。
(10 )联合: 联合不同的道路。
(11 )撤销:撤销之前的操作。
(12 )恢复:恢复之前的操作。
导人ArcGIS 相关库文件以及功能的关键实现代码如下:

require( [
” esri/urlUtils”,
” esri/map”,
” esri/tasks/GeometryService” ,
” esri/toolbars/edit” ,
” esri/layers/ArcGISTiledMapServiceLayer”,
” esr i/ layers/FeatureLayer",
” esri/graphic”,
” esri/tasks/RouteTask”,
” esri/tasks/RouteParameters” ,
” esri/tasks/FeatureSet”,
dojo/on”,
” di] it/registry”,
” esri/geometry/Extent”,
飞sri/layers/ArcGISDynamicMapServiceLayer ”,
” esri/symbols/PictureMarkerSymbol”,
” dojo/_base/array”,
” dojo/dom”,
” esri/Color”,
” esri/symbols/SimpleMarkerSymbol”,
飞sri/symbols/SimpleLineSymbol ”,
” esri/dijit/editing/Editor",
” esri/dijit/HomeButton”,
” esri/dijit/Measurement”,
” esri/dijit/Directions”,
” esri/dijit/editing/TemplatePicker”,
” esri/config”,
” dojo/i18n!esri/nls/jsapi”,
” dojo/_base/array”,”dojo/parser”,”dojo/keys”,
” dijit/layout/BorderContainer”,”dijit/layout/ContentPane”,
” dijit/TitlePane”,
” dijit/form/CheckBox”,
” di〕it/form/H口rizontalSlider",
” dijit/form/HorizontalRuleLabels”,
” dojo/domReady1 ”
] , function (
urlUtils,
Map, GeometryService, Edit,
ArcGISTiledMapServiceLayer, FeatureLayer,
Graphic,RouteTask, RouteParameters,FeatureSet,on,
registry,Extent,ArcGISDynamicMapServiceLayer,
PictureMarkerSymbol,array,dom,
Color, SimpleMarkerSymbol, SimpleLineSymbol,
Editor, HomeButton,Measurement,Directions,TemplatePicker,
esriConfig, jsapiBundle,
arrayUtils, parser, keys
){
parser. parse();
//代理设置
//use a proxy to access the routing service, which requires credits
/ 替urlUtils.addProxyRule({
urlPref ix ” route.arcgis.com”,
proxyUrl ”/sproxy/

地图基本管理模块

基本GIS 图形操作功能包括多图层显示、放大、缩小、全图显示、鹰眼导航和图层控制
功能,1 .初始化
地图初始化关键代码如下:

map = new Map (”map ”,{
center: [ 120. 179787 , 30 . 263478],
图8. 4-1 图形操作用例图
zoom : 16,
slider ;”small”,
logo: false,
navigationMode :’classic ’, Extent
( {xmin: - 20098296, ymin: - 2804413, xmax: 5920428, ym皿: 15813776,
spatia1Reference:{wkid:S4032}})
var basemap = new esri. layers. ArcGISTiledMapServiceLayer
(” http://cachel. 缸cgisonline.cn/ArcGIS/rest/services/
China1归lineCommunity/MapServer”);
map.addLayer(bas 四ap);
map.on (勺ayers - add - result”, initEditor);
  1. 地图浏览
    地图浏览包括地图放大、缩小、图层控制、鹰眼导航、全图显示、经纬度显示,关键代码如下:
//地图初始化
function initEditor( evt) {
map . disableDouble ClickZoom();
//模版选择器
var templateLayers = arrayUtils. map( evt. layers, function (result) {
return result. layer;
., ) }
var templatePicker = new TemplatePicker( {
featureLayers: templateLayers,
grouping: true,
rows. ” auto",
columns : 2
},”templateDiv ”);
templatePicker. startup();
V缸layers = arrayUtils. map( evt. layers, function (result) {
return { featureLayer: result. layer } ;
, ) }
var settings = {
map : map,
templatePicker: templatePicker,
layerlnfos: layers,
toolbarVisible: true,
enableUndoRedo: true,
createOptions : {
polylineDrawTools : [ Editor. CREA四_TOOL_FREEl诅ND_POLYLI阻],
polygonDra旷reals: [
Editor . CREATE_τ。OL_FREEHAND_POLYGON,
Editor.CREATE TOOL CIRCLE,
Editor.CREATE_TOOL_TRIANGLE,
Editor . CREAτ'E TOOL RECTANGLE
},
toolbarOptions : {
cutVisible: true,
mergeVisible : true,
reshapeVisible : true
layer Info: {
showGlobalID : true,
showObjectID: true,
var params = (settings: settings} ;
V缸myEditor = new Editor(p缸ams ,’ editorDiv'};
I I define snapping options
var symbol = new SimpleMarkerSymbol (
SimpleMarkerSymbol. STYLE_ CROSS, 15,
new SimpleLineSymbol(
SimpleLineSymbol. STYLE_ SOLID,
newColor([255, 0, 0, 0 . 5]), 5
null
map. enableSnapping((
snapPointSymbol: symbol,
tolerance : 20,
snapKey : keys . ALT
} ) .,
myEditor. startup();

地图属性

属性查看功能用于查看具体的道路属性信息,道路属性窗口界面
在这里插入图片描述
手机定位模块
手机定位APP 的用例图如图8 . 6-3
所示,主要功能包括地图浏览、地点搜索、路径查询、手机定位、路径导航。

主界面大纲视图

打开工程文件,依次展开文件夹目录res /layout ,在l ayout 文件夹上有击,新建一个xm l 文件,命名为m a in. xml 。界面的大纲视图如图所示。
通过图形布局视图可以看到界面的效果如
图8. 4 4
在这里插入图片描述

所示,左上角设置了一个定位按钮,旁边设置了一个标签控件用于显示位置的经纬度信息,界面底部是导航条,由3 个按钮控件组成,导航条上方是地图的放大和缩小按钮,布局中的空内区域用于加载电子地图Map Vi ew 控件。用同样的方式来设计其他二级界面.
在这里插入图片描述

空白区域为地图加载区。需要注意的是,起始点输入框在运行的时候会以Dialog 对话框的形式加载而不是以Activity 的形式加载。

在src 文件夹下的包com. esri. arcgis. android. samples.helloworld 中新建一个J ava 源文件,命名为Ma i nActivi ty.iava ,作为程序的主界面,需要实现如下功能: 地图加载,实现定位,通过菜单切换不同类型的地图,通过按钮控件启动二级界面等。要实现选项菜单切换不同类型的地图,需要在类的属性中声明地图切换选项,代码如下:

//菜单的地图切换选项
MenuitemmStreetsMenuitem = null ;
MenuitemmTopoMenuitem = null;
MenuitemmGrayMenultem = null;
MenuitemmOceansMenultem = null ;
MenuitemmHybridMenultem = null;
MenultemmNationalMenuitem = null;
MenuitemmOsmMenuitem = null;
MenuitemmSattliteitem = null;
//为每种地阁选项创建地图类型
finalMapOptionsmTopoBasemap = newMapOpt ions ( MapType.
TOPO);
finalMa向tionsmStreetsBasemap = newMapOptions ( Map'fype.
STREETS);
finalMapOptionsmGrayBasemap = newMapOptions(MapType. GRAY);
finalMapOptionsmOceansBasemap = newMapOptions(MapType. OCEANS);
finalMapOptionsmHybridBasemap = newMapOptions(MapType. HYBRID);
finalMapOptionsmNationalBasemap = newMapOptions(
MapType.NATIONAL_GERAPHIC);
finalMapOptionsmOsmBasemap = newMapOptions(MapType. OSM);
finalMapOptionsmSattliteBasemap = newMapOptions(MapType. SATELLITE);

实现创建选项菜单

实现创建选项菜单的方法onCrea teOptionsMenu ,代码如下:

public booleanonCreateOptionsMen叫Menu阴阳){
getMenuinflater(). inflate(R. menu. basemap_menu,menu);
mStreetsMenuitem = menu. getitem( 0);
mTopoMenuitem = menu. getit四( 1) i
mGrayMenuitem = menu. getitem(2);
mOceansMenuitem = menu. getitem(3);
mHybr idMenuI tern = menu. get Item ( 4) ;
mNationalMenuitem = m四u . getit四( 5);
mOsmMenuitem = menu. getrtem(6);
mSattliteitem = menu. getitem(7);
mTopoMenuitem.setChecked(true);
return true;

添加点击事件

为选项菜单的菜单项添加点击事件,这样可以实现用菜单来切换地图类型的功能。具体代码如下:

p由lie booleanonOptionsitemSelected( Mem山emitem) {
mCurrentMapExtent = mMapView. getExtent();
//处理菜单选中的事件
switch (item. getitemid()) {
case R. id. 四orld_Street_Map:
mMapView. setMapOptions(mStreetsBasemap);
mStreetsMenuitem.setChecked(true);
return true;
case R. id. World_Topo:
mMapView. setl:lapOptions(mTopoBasemap);
mTopoMenuitem. setChecked(true);
return true;
case R. id. Gray:
mMapView.setMapOptions(mGrayBasemap);
mGrayMenuitem. setChecked(true);
return true;
case R. id. Ocean_Basemap:
mMapView. setMapOptions(mOceansBasemap);
mOceansMenuitem.setChecked(true);
return true;
case R. id. Hybrid:
mMapView. setMapOptions(mHybridBaserr呻);
mHybridMenultem. setChecked{true);
return true;
case R. id. Osm :
mMapView. setMapOptions(mOsmBasemap);
mOsmMenultem.setChecked(true);
return true;
case R. id. National :
mMapView.setMapOptions{mNationalBasemap);
mNationalMenultem. setChecked(true);
return true;
case R. id. Satellite :
mMapView. setMapOptions(rr臼ttliteBasemap);
mSattliteltem. setChecked(true);
return true;
default :
return super. onOptionsltemSelected( item);

<uses - permissionandroid: name =”android. permission. INTERNET”/>
<uses - permissionandroid : name =” android.permission.WR!咀-阻TERNAL_STORAGE”/〉
<uses - permissionandroid: name = ” android.permission.ACCESS_FINE_LOCATION”/>

实现加载底图图层和定位图层

在该类文件中添加如下代码,实现加载底图图层和定位图层,通过实例化

LocationDisplayManager 这个类来调用该类的GPS 定位功能。
MapViewmMapView;
GraphicsLayergLayerGps;
Locationloc;
public void onCreate{BundlesavedlnstanceState) {
super.onCreate(savedlnstanceState);
setContentView(R.layout. main);
mMapView = {MapView) findViewByld(R . id. map);
gLayerGps = newGraphicsLayer();
mMapView.addLayer(gLayerGps);
f i nalLocationDisplayManagerlocdisplayMag;
locdisplayMag = mMapView. getLocationDisplayManager();
locdisplayMag. setLocationListener{newLocationListener() {
@Override
public void onStatusChanged( String provider, intstatt冉
Bundleextras) {
@Override
public void onProviderEnabled(String provider) {
Toast . makeText(getApplicationContext (),” GPS 己启用. ”,
Toast.LENG四_ SHORT) . show();
@Override
public void onProviderDisabled(String provider) {
Toast.makeText(getApplicationContext (),” GPS 未启用, 请开启”,
Toast . LENGTH _SHORT) . show();
@Override
public void onLocationChanged( Locationl) {
if (1 != null) {
PointptLatLon = newPoint( 1. getLongitude (), 1
. getLatitude());
Spatia1Referencesr4326 = SpatialRefer enc e . create ( 4326),
PointptMap = (Point) GeometryEngi ne . pr oject( ptLatLon,
sr4326,耐apView.getSpatialReferenc e());
时也pView . centerAt(ptMap, true);
t飞rloc . setText (Lon :+ 1. getLongi t ude() +, Lat+ 1. getLatitude());
//启动定位服务
locdisplayMag. start();

完善这个类文件

实现了定位功能之后,还需要进一步完善这个类文件,由于是程序的主类, 因此我们需要添加调用其他二级界面的人口和功能,主界面布局文件ma in. xml 中已经添加了3 个调用按钮,因此在MainActivity. java 文件中,需要通过控件id 找到按钮, 然后绑定相应的事件。需要注意的是, Activity 之间的调用使用的是Int e nt 这样一个消息传递类, 具体代码如下:

private Buttonbtnearby =口ull;
private Buttonbtrouter = null;
private Buttonbtnavigation = null;
btnearby = (Button) findViewByid(R. id. btnear);
btrouter = (Button) findViewByid(R. id. btrouter) ;
btnavigation = (Button) findViewByid(R. id. btnavigation);
//为搜索按钮设置按钮监昕器
btnearby. setOnClickListener(newOnClickListener() {
@Override
public void onClick(Vi ewv) {
Intentintent = newintent();
intent. setClassName(getApplicationContext(),com. esri. arcgis . android. samples . helloworld. PlaceSea r chActivity”),
startActivity(intent);
});
// 为路径按钮设置按钮监听器
btrouter. setOnClickListener(newOnClickListener() {
@Override
public void onClick(Viewv) {
Intentintent = newintent();
intent.setClassName(getApplicationContext(),
”com.esri.arcgis . android. s四ples.routing.RoutingActivity”);
startActivity(intent );
}),
//为导航按钮设置监听事件
btnavigation.setOnClickListener(newOnClickListener() {
@Override
public void onClick(Viewv) {
Intentintent = newintent();
intent. setClassName(getApplicationContext(),com.esri. arcgis.android.samples.routing.RoutingActivity);
startActivity(intent);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/32590.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人工智能 | 技能人才评价证书分析及人工智能/计算机类证书推荐

目录 简介技能人才评价证书相关介绍1. 国家职业资格证书2. 职业技能等级证书 推荐证书目录1. 计算机类的国家职业资格证书a. 证书推荐b. “软高***”和“PMP”的区别 2. 计算机类的职业技能等级证书a. 工信部认证b. 中国人工智能学会证书 专业证书的作用1. 抵税2. 领取职业技能…

全志V3S嵌入式驱动开发(USB camera驱动)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 soc和mcu的一个重要区别&#xff0c;就是soc会涉及到大量的音视频操作&#xff0c;当然音视频也就包括了camera摄像头这部分。v3s本身支持csi接口和…

ChatGPT:开放AI平台的最新进展和功能

第一章&#xff1a;引言 在过去的几年中&#xff0c;人工智能技术取得了长足的发展&#xff0c;其在各个领域的应用也日益广泛。而在AI技术中&#xff0c;自然语言处理&#xff08;NLP&#xff09;一直是备受关注的领域之一。ChatGPT作为OpenAI的开放AI平台上的一项重要技术&am…

慕课:笔记

课程链接&#xff1a;直面JavaScript中的30个疑难杂症_JavaScript面试题-慕课网 第二章&#xff1a;数据类型 数据类型是每门编程语言的必修之课&#xff0c;你是否对JavaScript的数据类型和检测存在困惑&#xff0c;本章节将为你揭晓其中的奥秘&#xff0c;让你对数据类型有…

【Tableau案例】神奇宝贝属性及实力强弱|数据可视化

提前声明&#xff1a;神奇宝贝的数据分析仅供参考&#xff0c;不涉及对于神奇宝贝的各种评价&#xff0c;另外我是初学tableau&#xff0c;涉及到使用的tableau操作可能很简单&#xff0c;复杂的还掌握不熟练&#xff0c;之后会拿时间系统学习tabelau。 数据预处理 该数据集有…

CODESYS模拟量超限报警功能块

博途PLC模拟量超限报警功能块详细介绍请参看下面文章链接: PLC模拟量超限报警功能块_RXXW_Dor的博客-CSDN博客模拟量偏差报警功能块请参看下面文章:模拟量偏差报警功能块(SCL代码)_RXXW_Dor的博客-CSDN博客工业模拟量采集的相关基础知识,可以查看专栏的系列文章,这里不再赘…

OSPF故障定位没思路?照这篇抄就行

我的网工朋友大家好。 好久没聊OSPF技术了&#xff0c;相关基础且经典的内容&#xff0c;公众号陆陆续续分享过一些&#xff0c;趣味科普&#xff0c;面试考题&#xff0c;实验操作&#xff0c;都有涉及。 按照惯例&#xff0c;先给你整一波优质的往期内容&#xff1a; 《 5个…

Spring Boot之静态资源映射 | 超级详细,建议收藏

写在前面&#x1f525; 上几期&#xff0c;我们重点讲解了Spring Boot集成Swagger-UI实现在线API文档及美化UI界面&#xff0c;而这期&#xff0c;在 Web 应用中会都会涉及到大量的静态资源&#xff0c;例如 图片、JS、CSS 和 HTML 等。我们知道&#xff0c;Spring MVC 导入静态…

WebGIS 信息系统-主界面基本模块功能设计

文章目录 系统文件夹结构主界面地图基本管理模块功能设计手机定位模块功能设计经纬度路径生成功能设计导航模块功能设计用户管理模块功能设计 系统文件夹结构 为了使项目容易管理和维护&#xff0c;在开发之前需要确定项目的系统文件夹结构&#xff0c;即系统文件夹结构设计。…

C++ / QT 旅游产品管理系统

一、项目介绍 旅游产品管理系统 你是一家旅行社的 IT 主管&#xff0c;现在需要你设计并实现一个旅游产品管理系统。 1 &#xff09; 基本功能要求 * 实现基础界面&#xff1a; 参照现有的旅游产品管理系统&#xff1a;查看产品、选择产品、使用说明等内容 * 支持旅游产品…

用Python搭建监控平台详解

概要 监控和运维&#xff0c;是互联网工业链上非常重要的一环。监控的目的就是防患于未然。通过监控&#xff0c;我们能够及时了解到企业网络的运行状态。一旦出现安全隐患&#xff0c;你就可以及时预警&#xff0c;或者是以其他方式通知运维人员&#xff0c;让运维监控人员有时…

Springboot 核心注解和基本配置解读

目录 1. Springboot 入门与原理 1.1 Springboot 简介 1.1.1 什么是Springboot 1.1.2 Springboot 主要优点 1.2 Springboot 相关注解 1.2.1 元注解 1.2.1.1 Target 1.2.1.2 Retention 1.2.2 Configuration 1.2.3 Import 1.2.3.1 直接注入 1.2.3.2 实现 ImportSelector…

Error: Cannot find module ‘webpack‘ 问题解决办法

这句话的意思是&#xff1a;没有找到webpack模块。 就算之前你装了webpack&#xff0c;那肯定是非全局安装 所以要全局安装 npm install --save-dev webpack 问题解决

4.蜂鸣器

1.了解蜂鸣器&#xff1a; 蜂鸣器在使用3.3V无法驱动&#xff0c;需要借助到三极管的放大特性(IcβIb)将蜂鸣器驱动&#xff1b;本次原理图中&#xff0c;接R33电阻是因为当STM32单片机复位时处于浮空状态&#xff0c;防止小电流让蜂鸣器响而添加的。 2.蜂鸣器原理图&#xf…

剖析Linux文件系统

Linux 文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。通过使用一组通用的 API 函数&#xff0c;Linux 可以在许多种存储设备上支持许多种文件系统。例如&#xff0c;read 函数调用可以从指定的文件描述符读取一定数量的字节。read 函数不了解文件系统的类型&#xff…

Java——《面试题——Redis篇》

前文 java——《面试题——基础篇》 Java——《面试题——JVM篇》 Java——《面试题——多线程&并发篇》 Java——《面试题——Spring篇》 Java——《面试题——SpringBoot篇》 Java——《面试题——MySQL篇》​​​​​​ Java——《面试题——SpringCloud》 Java…

使用Nginx的反向代理来访问服务器例子——Nginx笔记

因为网站上的视频加载过慢&#xff0c;想使用nginx服务器实现HLS视频播放服务。顺便记录一下通过Nginx的方向代理来访问服务器。这里在原先的项目上进行改造。原先的项目已经部署在公网&#xff0c;使用tomcat服务器&#xff0c;可以直接用地址进行访问。 1.这里使用的8080端口…

阿里飞猪三面

&#xff08;有许多人是用青春的幸福作成功的代价的。——莫扎特&#xff09; 背景 该岗位是阿里飞猪的前端部门&#xff0c;岗位名称是node.js高级/专家开发工程师。主要负责用NodeJs作为后端技术&#xff0c;向上层Java&#xff0c;Node等业务服务&#xff0c;提供中间层基础…

ChatGPT对未来编程语言发展的影响与展望

目录 一、引言1.ChatGPT的介绍与背景介绍背景 2.编程语言发展的重要性和挑战重要性挑战 二、ChatGPT在编程领域的应用1.自然语言处理技术在编程中的应用现状2. ChatGPT作为编程辅助工具的潜力与优势 三、ChatGPT对编程语言发展的影响1. 创新编程模式的涌现2. 语言设计与交互方式…

【问题记录】如何使用 pip 在 linux 上安装 pytorch

一、进入 pytorch 官网 pytorch 官网&#xff1a;https://pytorch.org/ 二、在页面选择环境 三、复制官网弹出的命令并运行即可 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118