深入浅出 Javascript API(二)--地图显示与基本操作

简介:
深入浅出 Javascript API(二)--地图显示与基本操作
地图显示与基本操作(放大、缩小、移动、坐标显示)是JavascriptAPI的基本功能,也是一个WebGIS应用的基本内容,Javascript提供了非常便捷的开发方法,当然在线浏览需要Ags服务器支持,如果自己电脑上没有配置Server服务,可以使用ArcGIS Online在线服务。
    内容目录:

1.Cache和非Cache地图展示
2.地图基本操作,如放大、缩小、移动,并和鼠标键盘按键关联
3.客户端显示鼠标当前地理位置

    直接使用在线地图查看最终效果:
http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/demos/Map/AddMapShowXYCoords.html


    使用过Dojo的开发人员应该很熟悉整个页面结构:

1.使用dojo提供的样式表

<style type="text/css">
    @import "http://serverapi.arcgisonline.com/jsapi/arcgis/1/js/dojo/dijit/themes/tundra/tundra.css";
</style>

2.引用脚本文件
<script type="text/javascript" src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=1">
</script>


    这里可能会有一个疑问,为什么是这样的目录结构,里面包含了dojo和javascriptapi所需要的js库吗?其实部署javascriptapi时,针对不同类型服务器端代码(Java、.Net、php)会有不同的Default页面,以.Net为例,Default.ashx引用了三个文件:
context.Response.WriteFile(context.Server.MapPath("js""esri""esri.js"));
context.Response.WriteFile(context.Server.MapPath(
"js""dojo""dojo""dojo.xd.js"));
context.Response.WriteFile(context.Server.MapPath(
"js""esri""jsapi.js"));

将该页面设为起始页后,访问"http://ip/js/arcgis"时会直接将这三个js文件合并下载,大概300多KB。

3.接下来,就要对页面中所添加的地图元素与功能进行定制,同样是在脚本中完成,使用javascript api
<script type="text/javascript">
    dojo.require(
"esri.map");
   
var myMap, myTiledMapServiceLayer;
   
function init() {
        myMap
=
new esri.Map("mapDiv");
        myTiledMapServiceLayer
=
new esri.layers.ArcGISTiledMapServiceLayer
(
"http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer");
        myMap.addLayer(myTiledMapServiceLayer);
    }

    dojo.addOnLoad(init);
</script>

   dojo.require引入所需的包,其中的esri.Map类实现了图层、Graphics、消息窗口(查询属性)、其他导航控制的方法,这里在指定的div中创建了一个地图。esri.layers.ArcGISTiledMapServiceLayer的作用是获取REST API所提供的cache地图服务,这是一个在线服务,REST所能提供的其他服务可以查看RESTAPI文档。esri.layers.ArcGISTiledMapServiceLayer继承于esri.layers.ArcGISMapServiceLayer,该父类下还有另外一个子类ArcGISDynamicMapServiceLayer,用于获取非cache地图服务。

    最后通过esri.Map的addLayer方法将该服务中的图层添加到当前地图中显示。

    dojo.addOnLoad(init)等价于<body onload=init>,页面加载的时候将执行init()脚本。

4.页面body区域
<body>
   
<div id="mapDiv" class="tundra" style="width:900px; height:600px; border:1px solid #000;"></div>
   
<h4>Work flow:</h4>
   
<ul>
        
<li>Create a map.</li>
        
<li>Add an ArcGISTiledMapServiceLayer.</li>
   
</ul>
</body>

    最终地图将在mapDiv区域绘出。

5.放大缩小平移

   esri.Map类包含地图放大缩小平移等基本功能的实现,可以将这些操作和业务应用绑定。通过esri.Map构造方法生成的地图对象实际已经包含一些基础操作的快捷方式,如键盘方向键上下左右完成地图上下左右的固定单位移动,鼠标滚轮实现地图放大缩小,"shift+单击"为居中,"shift+双击"为居中放大,"+"放大一级,"-"缩小一级。

6.动态显示当前鼠标位置的经纬度坐标

    动态显示鼠标经纬度坐标大体上有两种方式,一是服务器端生成坐标,二是客户端生成坐标,孰优孰劣都很清楚了,服务器生成坐标值会消耗大量服务器资源,onMouseMove总是在不停向服务器发送请求,这种模式下经常会碰到鼠标移动已经停止了,但是状态栏上的坐标信息还在变化,这就是服务器计算造成的延时造成的,因此对于真正上线的webgis网站更多使用客户端方式,通过获取屏幕坐标,在投影参考系下换算地理坐标,显示在页面。

    Javascript API提供了一套API获取地理坐标:
function showCoordinates(evt) {
   
var mp = evt.mapPoint;
    dojo.byId(
"info").innerHTML = mp.x +
", "
+ mp.y;
}


    mapPoint是地理坐标,screenPoint是屏幕坐标。

7.通过dojo.connect建立对鼠标事件的监听

dojo.connect(map, "onMouseMove", showCoordinates);
dojo.connect(map, "onMouseDrag", showCoordinates);

    同时监听鼠标拖拽事件,添加到map.onLoad中就可以了,当然body区域中要加入显示坐标的div
<div id="info" style="padding:5px; margin:5px; background-color:#eee;"></div>

    完工!显示效果,界面很简单,但包含了鼠标和键盘的快捷键操作:


    博客园链接:http://www.cnblogs.com/flyingis/archive/2008/07/20/1246963.html
 
 
本文转自温景良(Jason)博客园博客,原文链接: http://www.cnblogs.com/wenjl520/archive/2009/06/02/1494597.html,如需转载请自行联系原作者
相关文章
|
1月前
|
编解码 数据可视化 前端开发
如何使用 D3.js 创建一个交互式的地图可视化?
如何使用 D3.js 创建一个交互式的地图可视化?
|
2月前
|
编解码 数据可视化 前端开发
如何使用 D3.js 创建一个交互式的地图可视化?
如何使用 D3.js 创建一个交互式的地图可视化?
109 6
|
1月前
|
JSON 缓存 JavaScript
深入浅出:使用Node.js构建RESTful API
在这个数字时代,API已成为软件开发的基石之一。本文旨在引导初学者通过Node.js和Express框架快速搭建一个功能完备的RESTful API。我们将从零开始,逐步深入,不仅涉及代码编写,还包括设计原则、最佳实践及调试技巧。无论你是初探后端开发,还是希望扩展你的技术栈,这篇文章都将是你的理想指南。
|
23天前
|
JSON JavaScript 前端开发
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发作为连接用户与数据的桥梁,扮演着至关重要的角色。本文将引导您步入Node.js的奇妙世界,通过实践操作,掌握如何使用这一强大的JavaScript运行时环境构建高效、可扩展的RESTful API。我们将一同探索Express框架的使用,学习如何设计API端点,处理数据请求,并实现身份验证机制,最终部署我们的成果到云服务器上。无论您是初学者还是有一定基础的开发者,这篇文章都将为您打开一扇通往后端开发深层知识的大门。
38 12
|
1月前
|
JavaScript NoSQL API
深入浅出Node.js:从零开始构建RESTful API
在数字化时代的浪潮中,后端开发如同一座灯塔,指引着数据的海洋。本文将带你航行在Node.js的海域,探索如何从一张白纸到完成一个功能完备的RESTful API。我们将一起学习如何搭建开发环境、设计API结构、处理数据请求与响应,以及实现数据库交互。准备好了吗?启航吧!
|
1月前
|
JavaScript 前端开发 API
Vue.js 3:探索组合式API带来的新变革
Vue.js 3:探索组合式API带来的新变革
|
1月前
|
JavaScript 前端开发 API
Vue.js 3中的Composition API:提升你的组件开发体验
Vue.js 3中的Composition API:提升你的组件开发体验
|
1月前
|
JSON JavaScript API
深入浅出Node.js:从零开始构建RESTful API
【10月更文挑战第39天】 在数字化时代的浪潮中,API(应用程序编程接口)已成为连接不同软件应用的桥梁。本文将带领读者从零基础出发,逐步深入Node.js的世界,最终实现一个功能完备的RESTful API。通过实践,我们将探索如何利用Node.js的异步特性和强大的生态系统来构建高效、可扩展的服务。准备好迎接代码和概念的碰撞,一起解锁后端开发的新篇章。
|
1月前
|
JavaScript 中间件 API
Node.js进阶:Koa框架下的RESTful API设计与实现
【10月更文挑战第28天】本文介绍了如何在Koa框架下设计与实现RESTful API。首先概述了Koa框架的特点,接着讲解了RESTful API的设计原则,包括无状态和统一接口。最后,通过一个简单的博客系统示例,详细展示了如何使用Koa和koa-router实现常见的CRUD操作,包括获取、创建、更新和删除文章。
51 4
|
1月前
|
JavaScript 前端开发 API
Vue.js 3:深入探索组合式API的实践与应用
Vue.js 3:深入探索组合式API的实践与应用