关于ArcGIS api for JavaScript的一些内容
2018-3-19
ArcGIS api for JavaScript 在3.4之后就已经抛弃了过时的写法,采用了AMD的写法,AMD规范即异步模块加载机制,这种规范让JS就像其它面向对象语言(比如Java)一样,通过模块去管理代码。dojo的模块有点像java的包,而我们所需要的类就是在不同的模块中。
我现在有点纠结了,公司GIS模块的代码使用的是过时的写法,同时还自己写了很多类,看起来非常复杂,而公司部署的api版本是3.2的,注意不是3.2x版本哈,这个版本是很老的了;现在官网的Demo全是用的AMD规范写的,我真还不晓得该怎么办了。
但是无非就是两种:1将公司的代码使用AMD规范重写一遍(工作量非常之大,还容易出错);
2在官方学到的内容,在自己本上用AMD规范写,之后转换成过时写法,如果公司有需要将转换过后的内容添加上去(表面上要简单些,实际上不清楚,重点是对于公司的代码该怎么加上去是个问题);
今天就第二种先在本地实际操作了一下发现的坑:
先附上代码
//AMD规范写法
var map;
require(["esri/map","esri/layers/ArcGISDynamicMapServiceLayer","esri/layers/FeatureLayer",
"esri/symbols/SimpleFillSymbol","esri/symbols/SimpleLineSymbol","esri/renderers/SimpleRenderer","esri/InfoTemplate","esri/graphic","dojo/on","dojo/_base/Color", "dojo/domReady!"], function(Map,ArcGISDynamicMapServiceLayer,FeatureLayer,SimpleFillSymbol,SimpleLineSymbol,SimpleRenderer,InfoTemplate,Graphic,on,Color) {
map = new Map("map", {
//basemap: "streets", //For full list of pre-defined basemaps, navigate to http://arcg.is/1JVo6Wd
//center: [-96.45, 39.75], // longitude, latitude
zoom: 4,
sliderStyle:"small",
logo:false
}); var dynamicMapLayer1 = new ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/V1/CityFeature/MapServer"); map.addLayer(dynamicMapLayer1); //map加载事件,鼠标移除清空绘制的图形(高亮)和信息框
map.on("load",function(){
map.graphics.on("mouse-out",function(evt){
map.graphics.clear();
map.infoWindow.hide();
});
}); //创建一个特征图层并选出符合条件的要素
var olderStates = new FeatureLayer("http://localhost:6080/arcgis/rest/services/V1/CityFeature/MapServer/6",{
mode:FeatureLayer.Mode_SNAPSHOT,
outFields:["OBJECTID","name","floors","BianHao"]
});
//olderStates.setDefinitionExpression("floors<=20");
//创建一个符号,用来渲染符合条件的要素
var symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID,new Color([255,255,255,0.35]),1),new Color([125,125,125,0.35]));
olderStates.setRenderer(new SimpleRenderer(symbol));
//将特征图层加载到地图中
map.addLayer(olderStates); //创建一个信息框
var infoTemplate = new InfoTemplate();
infoTemplate.setTitle("${OBJECTID}");
infoTemplate.setContent("<b>名称:</b>${name}<br/>"+"<b>楼层数:</b>${floors}<br/>"+"<b>编号:</b>${BianHao}");
//设置信息框的大小
map.infoWindow.resize(245,125); //创建一个高亮符号
var highlightSymbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID,
new SimpleLineSymbol(SimpleLineSymbol.STYLE_SOLID, new Color([255,0,0]), new Color([125,125,125,0.35]))); //鼠标经过事件,将目标图形(evt对象中)高亮渲染并显示信息框信息
olderStates.on("mouse-over",function(evt){
map.graphics.clear();
evt.graphic.setInfoTemplate(infoTemplate);
var content = evt.graphic.getContent();
map.infoWindow.setContent(content);
var title = evt.graphic.getTitle();
map.infoWindow.setTitle(title);
var highlightGraphic = new Graphic(evt.graphic.geometry,highlightSymbol);
map.graphics.add(highlightGraphic);
map.infoWindow.show(evt.screenPoint,map.getInfoWindowAnchor(evt.screenPoit)); //evt的中心点 }); });
然后是
//过时的写法
dojo.require("esri/map");
dojo.require("esri/layers/ArcGISDynamicMapServiceLayer");
dojo.require("esri/layers/FeatureLayer");
dojo.require("esri/symbols/SimpleFillSymbol");
dojo.require("esri/symbols/SimpleLineSymbol");
dojo.require("esri/renderers/SimpleRenderer");
dojo.require("esri/InfoTemplate");
dojo.require("esri/graphic");
dojo.require("dojo/on");
dojo.require("dojo/_base/Color");
dojo.require("dojo/domReady!"); var map; function init(){
map = new esri.Map("map",{
zoom:4,
logo:false
}); var dynamicMapLayer1 = new esri.layers.ArcGISDynamicMapServiceLayer("http://localhost:6080/arcgis/rest/services/V1/CityFeature/MapServer"); map.addLayer(dynamicMapLayer1); //map加载事件,鼠标移除清空绘制的图形(高亮)和信息框
map.on("load",function(){
map.graphics.on("mouse-out",function(evt){
map.graphics.clear();
map.infoWindow.hide();
});
}); //创建一个特征图层并选出符合条件的要素
var olderStates = new esri.layers.FeatureLayer("http://localhost:6080/arcgis/rest/services/V1/CityFeature/MapServer/6",{
mode:esri.layers.FeatureLayer.Mode_SNAPSHOT,
outFields:["OBJECTID","name","floors","BianHao"]
}); //创建一个符号,用来渲染符合条件的要素
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,
new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID,
new dojo.Color([255,255,255,0.35]),1),new dojo.Color([125,125,125,0.35]));
olderStates.setRenderer(new esri.renderer.SimpleRenderer(symbol));
//将特征图层加载到地图中
map.addLayer(olderStates); //创建一个信息框
var infoTemplate = new esri.InfoTemplate();
infoTemplate.setTitle("${OBJECTID}");
infoTemplate.setContent("<b>名称:</b>${name}<br/>"+"<b>楼层数:</b>${floors}<br/>"+"<b>编号:</b>${BianHao}");
//设置信息框的大小
map.infoWindow.resize(245,125); //创建一个高亮符号
var highlightSymbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID,
new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255,0,0]), new dojo.Color([125,125,125,0.35]))); //鼠标经过事件,将目标图形(evt对象中)高亮渲染并显示信息框信息
olderStates.on("mouse-over",function(evt){
map.graphics.clear();
evt.graphic.setInfoTemplate(infoTemplate);
var content = evt.graphic.getContent();
map.infoWindow.setContent(content);
var title = evt.graphic.getTitle();
map.infoWindow.setTitle(title);
var highlightGraphic = new esri.Graphic(evt.graphic.geometry,highlightSymbol);
map.graphics.add(highlightGraphic);
map.infoWindow.show(evt.screenPoint,map.getInfoWindowAnchor(evt.screenPoit)); //evt的中心点 }); }
dojo.addOnLoad(init);
我将不同的地方用红色标出来了,可以发现,过时的写法大体上和AMD规范没得什么区别,需要注意的是require的引用,还有之后调用esri资源中的对象时要加上些东西;
坑在有些和引用的不太一样,比如说FeatureLayer 和SimpleFillSymbol 的调用就是有区别,一个是esri.layers. 一个是esri.symbol. 还有color : dojo.Color 没有资源上的_base;
这些以后还有,得注意一下。
关于ArcGIS api for JavaScript的一些内容的更多相关文章
- [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-widgets简介
[官方文档:https://developers.arcgis.com/javascript/latest/sample-code/intro-widgets/index.html] 一.Intro ...
- ArcGIS API for JavaScript 4.2学习笔记[5] 官方API大章节概述与内容转译
内容如上,截图自ESRI官网,连接:ArcGIS API for JavaScript 4.2 [Get Started] 类似于绪论一样的东西,抽取了最需要关注的几个例子.如:加载Map和View, ...
- ArcGIS API for JavaScript开发环境搭建及第一个实例demo
原文:ArcGIS API for JavaScript开发环境搭建及第一个实例demo ESRI公司截止到目前已经发布了最新的ArcGIS Server for JavaScript API v3. ...
- ArcGIS API for JavaScript FeatureLayer服务属性编辑
首先说一下感想吧,刚入行时感觉深似海,掉到了GIS开发的陨石大坑里了,首先是学了小半年的Flex,用到了ArcGIS API for Flex,接着又是半年的ArcEngine开发,现在终于摸到了一点 ...
- ArcGIS API for JavaScript 4.2学习笔记[0] AJS4.2概述、新特性、未来产品线计划与AJS笔记目录
放着好好的成熟的AJS 3.19不学,为什么要去碰乳臭未干的AJS 4.2? 4.2全线基础学习请点击[直达] 4.3及更高版本的补充学习请关注我的博客. ArcGIS API for JavaScr ...
- [ArcGIS API for JavaScript 4.8] Sample Code-Get Started-MapView,SceneView简介
[官方文档:https://developers.arcgis.com/javascript/latest/sample-code/index.html] 一.Intro to MapView(2D ...
- 转:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述
原文地址:ArcGIS API For JavaScript官方文档(二十)之图形和要素图层——①Graphics概述 ArcGIS JavaScript API允许在地图上绘制graphic(图形) ...
- ArcGIS API for JavaScript开发初探——HelloMap
1.前言 在开始ArcGIS API for JavaScript开发之前我们需要了解一些基本的知识: 1.开发工具选什么? 前端技术的开发工具选择是一个仁者见仁智者见智的问题,有人喜欢Hbuilde ...
- ArcGIS API for JavaScript开发初探——基础知识
1.前言 在ArcGIS Web API开发体系中一共有四大类,分别为: ArcGIS API for Flex ArcGIS API for JavaScript ArcGIS API for RE ...
随机推荐
- QTcpSocket 对连接服务器中断的不同情况进行判定(六种情况,其中一种使用IsNetworkAlive API方法)
简述 对于一个C/S结构的程序,客户端有些时候需要实时得知与服务器的连接状态.而对于客户端与服务器断开连接的因素很多,现在就目前遇到的情况进行一下总结. 分为下面六种不同情况 客户端网线断开 客户端网 ...
- python常用数据结构(2)
1.有名字的元组——namedtuple >>> from collections import namedtuple >>> Point = namedtuple ...
- 3014C语言_运算符
第四章 运算符 4.1 分类 C语言的运算符范围很广,可分为以下几类: 1.算术运算符:用于各类数值运算.包括加(+).减(-).乘(*).除(/).求余(%).自增(++).自减(--)共七种. 2 ...
- Android WebView设置背景透明
Adndroid 2.x的设置 在Android 2.x下,设置webview背景为透明的方法: wvContent.setBackgroundColor(0); Adndroid 4.0 由于硬件加 ...
- 零基础配置Hadoop集群——Ambari安装及配置详解
1. 准备工作 1.1. 系统环境 主机列表: IP地址 HostName 描述 192.168.610.153 ambari.server Ambari服务器 192.168.10.152 had ...
- CS代码代写, 程序代写, java代写, python代写, c/c++代写,csdaixie,daixie,作业代写,代写
互联网一线工程师程序代写 微信联系 当天完成特色: 互联网一线工程师 24-48小时完成.用心代写/辅导/帮助客户CS作业. 客户反馈与评价 服务质量:保证honor code,代码原创.参考课程sl ...
- MyBatis从入门到精通(三):MyBatis XML方式的基本用法之多表查询
最近在读刘增辉老师所著的<MyBatis从入门到精通>一书,很有收获,于是将自己学习的过程以博客形式输出,如有错误,欢迎指正,如帮助到你,不胜荣幸! 1. 多表查询 上篇博客中,我们示例的 ...
- TCP/IP协议与OSI体系结构总结
什么是TCP/IP协议?TCP/IP协议不是一个简单的TCP和IP协议,而是个协议族的统称,是网络通信的一套协议集合. TCP/IP协议与OSI七层模型在模块分布上具有一定的区别,OSI参考模型通信协 ...
- leadcode的Hot100系列--62. 不同路径--简单的动态规划
题目比较清晰,简单来说就是: A B C D E F G H I J K L 只能往右或者往下,从A到L,能有几种走法. 这里使用动态规划的方法来做一下. 动态规划最重要的就是动态方程,这里简单说下这 ...
- 源码阅读 - java.util.concurrent (二)CAS
背景 在JDK 5之前Java语言是靠synchronized关键字保证同步的,这会导致有锁 锁机制存在以下问题: (1)在多线程竞争下,加锁.释放锁会导致比较多的上下文切换和调度延时,引起性能问题. ...