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 的用例图如图

所示,主要功能包括地图浏览、地点搜索、路径查询、手机定位、路径导航。

主界面大纲视图

打开工程文件,依次展开文件夹目录res /layout ,在l ayout 文件夹上有击,新建一个xm l 文件,命名为m a in. xml 。界面的大纲视图如图所示。

通过图形布局视图可以看到界面的效果如

所示,左上角设置了一个定位按钮,旁边设置了一个标签控件用于显示位置的经纬度信息,界面底部是导航条,由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_GE伺RAPHIC);
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);


目录
相关文章
|
1月前
|
监控 安全
从 Racket 语言出发,创新员工网络监控软件的框架
在数字化企业环境中,员工网络监控软件对于保障信息安全和提升效率至关重要。Racket 语言凭借其独特特性和强大功能,为开发创新的监控软件提供了新可能。通过捕获和分析网络数据包、记录员工网络活动日志,甚至构建复杂的监控框架,Racket 能够满足企业的定制化需求,为企业信息安全和管理提供强有力支持。未来,基于 Racket 的创新解决方案将不断涌现。
41 6
|
6月前
|
XML Java 数据库连接
WebGIS 信息系统-数据库设计
WebGIS 信息系统-数据库设计
94 0
|
29天前
|
数据采集 数据挖掘 BI
专业考勤系统选型,要从哪几方面去对比?
本文介绍了选择专业考勤系统的关键因素,包括实时考勤数据、排班与调班管理、多种打卡方式、加班与延时管理、假期与考勤报表等。利唐i人事系统凭借其在这些方面的卓越表现,如实时数据采集、智能排班、灵活打卡、精准加班管理及详尽的考勤报表,成为企业高效管理的优选方案。
专业考勤系统选型,要从哪几方面去对比?
|
6月前
|
关系型数据库 程序员 BI
程序员中医诊所管理软件开发模块分析
将系统划分为患者管理模块、医生管理模块、药材药方管理模块、财务管理模块、报表统计模块和系统设置模块。
58 2
|
4月前
|
数据库管理 Python
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
在停车场管理系统工程中,我们可能会涉及到硬件设计、软件编程、数据库管理、用户界面设计等多个方面
|
6月前
|
数据采集 前端开发 关系型数据库
WebGIS 信息系统
WebGIS 信息系统
73 5
|
11月前
|
数据采集 安全
医院手术麻醉信息系统商业源码,自主版权,支持二次开发
系统主要是针对麻醉师在术前对患者的病史以及检查信息的记录,记录术前参考条件、心血管、神经系统、各内脏器官、循环系统情况,选择麻醉方法、制定麻醉方案,预见术中困难及防范措施。 麻醉医生可以通过系统快速记录手术麻醉过程中发生的各种临床事件,包括麻药、用药、事件、输氧、插管、拔管、输液、输血、呼吸等其他事件,结合数据采集功能同步得到的生命体征参数,形成麻醉记录单; 根据术中麻醉记录,对麻醉过程、麻醉效果进行术后麻醉总结,提供临床质量评估;对于室外手术室登记,另可做为突发事件后的手术补录功能;支持术后随访的记录,生成术后随访记录单;最终形成查看病人术前访视、患者信息、手术信息、麻醉记录、麻醉总结、术后
|
监控 测试技术
LIMS系统的优点 LIMS实验室管理系统的特点
LIMS系统用于实验室中更静态的工作流程。它不仅仅是一种记录保存类型的软件,它还可以生成报告并帮助您管理实验室中的所有流程。此外,它还可以协助计费、发票以及财务规划和管理。以下是 LIMS 支持实验室工作并帮助提高生产力、效率和盈利能力的一些详细方法。
|
数据采集 运维 数据可视化
LIMS软件定制 LIMS实验室管理系统定制开发
白码LIMS软件是一款基于白码低代码平台开发的实验室信息管理系统,旨在提供全面的实验室管理解决方案。通过可视化开发工具和预定义模块,白码LIMS软件可以快速定制开发,以满足不同实验室的需求。
|
6月前
|
安全 BI
大型医院安全(不良)事件报告系统源码(支持二次开发)
大型医院安全(不良)事件报告系统源码(支持二次开发)
63 0
下一篇
无影云桌面