Sistema de información WebGIS-Implementación del sistema

Módulo básico de interfaz principal

(1) Panorámica: haga clic en el botón para colocar el mouse en el estado de panorámica, que se puede usar para borrar el estado de la herramienta de operación de gráficos actual.
(2) Acercar: haga clic en el botón para acercar el mapa (o presione el botón central del mouse).
(3) Alejar: haga clic en el botón para alejar el mapa (o utilice el botón central del ratón).
(4) Imagen completa: haga clic en el botón para mostrar la imagen completa.
(5) Guardar: haga clic en el botón para actualizar los datos del mapa modificados en la base de datos.
(6) Eliminar: haga clic en el botón para eliminar el elemento del mapa.
(7) Añadir: Añadir para dibujar nuevas carreteras.
(8) Atributo: haga clic para ver la información de atributos del tramo de carretera.
(9) Cortar: seleccione para cortar la carretera.
(10) Unidos: Unidos caminos diferentes.
(11) Deshacer: Deshacer la operación anterior.
(12) Restaurar: Restaura la operación anterior.
Los códigos de implementación clave para importar funciones y archivos de biblioteca relacionados con ArcGIS son los siguientes:

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/

Módulo de Gestión Básica de Mapas

Las funciones básicas de operación de gráficos GIS incluyen visualización multicapa, acercamiento, alejamiento, visualización de mapa completo, navegación con ojo de águila y
funciones de control de capas. 1. Inicialización
Los códigos clave para la inicialización del mapa son los siguientes:

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. Exploración de mapas La
    exploración de mapas incluye acercamiento y alejamiento del mapa, control de capas, navegación a ojo de águila, visualización completa del mapa y visualización de latitud y longitud. Los códigos clave son los siguientes:
//地图初始化
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();

propiedades del mapa

La función de visualización de atributos se utiliza para ver información específica de atributos de carreteras. El diagrama de casos de uso del
inserte la descripción de la imagen aquí
módulo de posicionamiento móvil y la aplicación de posicionamiento móvil en la interfaz de la ventana de atributos de carreteras se muestra en la figura. Las funciones principales incluyen exploración de mapas, búsqueda de ubicación, consulta de ruta , posicionamiento móvil y navegación de rutas.
8  6-3

Vista de contorno de la interfaz principal

Abra el archivo del proyecto, expanda el directorio de carpetas res/layout, haga clic en la carpeta de diseño, cree un nuevo archivo xml y asígnele el nombre main.xml. En la figura se muestra una vista esquemática de la interfaz.
A través de la vista de diseño gráfico, puede ver el efecto de la interfaz de la siguiente manera:
Figura 8. 4 4
inserte la descripción de la imagen aquí

Como se muestra, se establece un botón de posicionamiento en la esquina superior izquierda y se establece un control de etiqueta junto a él para mostrar la información de latitud y longitud de la ubicación. La barra de navegación en la parte inferior de la interfaz se compone de 3 controles de botón. Encima de la barra de navegación se encuentran los botones de acercar y alejar del mapa. El área vacía se usa para cargar el mapa electrónico Control de vista de mapa. Diseñe otras interfaces secundarias de la misma manera.
inserte la descripción de la imagen aquí

El área en blanco es el área de carga del mapa. Cabe señalar que el cuadro de entrada del punto de inicio se cargará en forma de cuadro de diálogo en lugar de Actividad cuando se esté ejecutando.

Cree un nuevo archivo fuente Java en el paquete com.esri.arcgis.android.samples.helloworld en la carpeta src y asígnele el nombre MainActivity.iava Como interfaz principal del programa, se deben realizar las siguientes funciones: Carga de mapas, Realización Posicionamiento, cambiar entre diferentes tipos de mapas a través del menú, iniciar la interfaz secundaria a través del botón de control, etc. Para implementar el menú de opciones para cambiar entre diferentes tipos de mapas, debe declarar la opción de cambio de mapa en las propiedades de la clase, el código es el siguiente:

//菜单的地图切换选项
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);

Menú de opciones de creación de implementos

Implemente el método onCrea teOptionsMenu para crear el menú de opciones, el código es el siguiente:

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;

Agregar evento de clic

Agregue un evento de clic al elemento del menú del menú de opciones, de modo que la función de cambiar el tipo de mapa se pueda realizar usando el menú. El código específico es el siguiente:

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”/>

Implementar la carga de capas de mapa base y capas de posicionamiento

Agregue el siguiente código en este tipo de archivo para cargar la capa de mapa base y la capa de posicionamiento, instanciando

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();

Complete este archivo de clase

Después de realizar la función de posicionamiento, este archivo de clase debe mejorarse aún más. Dado que es la clase principal del programa, debemos agregar la población y las funciones para llamar a otras interfaces secundarias. Se agregaron tres llamadas al archivo de diseño de la interfaz principal. botón main.xml, por lo que en el archivo MainActivity.java, debe encontrar el botón a través de la identificación del control y luego vincular el evento correspondiente. Cabe señalar que la llamada entre actividades utiliza una clase de paso de mensajes como Int e nt, y el código específico es el siguiente:

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);

Supongo que te gusta

Origin blog.csdn.net/leva345/article/details/131434295
Recomendado
Clasificación