SuperMap iClient 8C(2017) for JavaScript 是一款在服务式 GIS 架构体系中,面向 HTML5 的应用开发,支持多终端,跨浏览器的客户端开发平台。 通过 SuperMap iClient 8C(2017) for JavaScript,无需任何插件,便可以在浏览器上实现美观的地图展现,内容丰富的地图应用。
随着Surface 平板电脑的兴起,借助SuperMap iClient for JavaScript开发平台,我们可以快捷地开发Windows 8下Metro风格的地图应用程序,订制期望的地图应用功能等。
该文档介绍了基于SuperMap iClient for JavaScript 平台如何开发Windows 8下Metro风格的地图应用程序,该地图包含基本的地图浏览、缩放、量算和定位功能。 二次开发人员或用户可以在此基础上增加自己的业务需求,丰富地图应用。同时我们会在开发范例中提供Metro风格的地图应用的源码和打包后的应用程序, 用户可自行下载安装包试用。
在新建项目对话框中左侧在已安装的模板中找到JavaScript Windows应用商店,同时在右侧选择导航布局应用程序(当然您也可以选择空白应用程序)。 在下方名称一栏中输入应用程序名称(JavaScript for WinRT),在位置一栏中选择应用程序保存的位置(E:\WinRT\)。单击确定按钮即创建了导航布局应用程序。 创建好的解决方案目录结构如下:
.homepage section[role=main] { margin-left: 120px; } .funcDiv { z-index: 9999; position: absolute; top: 0; right: 10px; } ul { list-style-type: none; } ul li { display: inline-block; } #map { width: 100%; height: 100%; } @media screen and (-ms-view-state: snapped) { .homepage section[role=main] { margin-left: 20px; } } @media screen and (-ms-view-state: portrait) { .homepage section[role=main] { margin-left: 100px; } }
(function () { "use strict"; var map, layer, positionLayer, lenCtrl, areaCtrl; WinJS.UI.Pages.define("/pages/home/home.html", { ready: function (element, options) { // 初始化地图 map = new SuperMap.Map("map", { controls: [ new SuperMap.Control.ScaleLine(), new SuperMap.Control.Zoom(), new SuperMap.Control.MousePosition(), new SuperMap.Control.Navigation({ dragPanOptions: { enableKinetic: true } })], units: "m" }); positionLayer = new SuperMap.Layer.Markers(); layer = new SuperMap.Layer.CloudLayer(); map.addLayers([layer, positionLayer]); map.setCenter(new SuperMap.LonLat(12956286, 4855615), 12); //测量控件加入map对象中 lenCtrl = new SuperMap.Control.Measure(SuperMap.Handler.Path, { persist: true }); areaCtrl = new SuperMap.Control.Measure(SuperMap.Handler.Polygon, { persist: true }); lenCtrl.events.on({ "measure": handleMeasure }); areaCtrl.events.on({ "measure": handleMeasure }); map.addControls([lenCtrl, areaCtrl]); //功能键单击事件 element.querySelector("#measureLength").addEventListener("click", function (event) { lenCtrl.activate(); }, false); element.querySelector("#measureArea").addEventListener("click", function (event) { areaCtrl.activate(); }, false); element.querySelector("#myPosition").addEventListener("click", function (event) { //实现定位功能 var geolocator = Windows.Devices.Geolocation.Geolocator(); geolocator.getGeopositionAsync().done(function (position) { var lon = position.coordinate.longitude, x = lon * 20037508.342789 / 180, lat = position.coordinate.latitude, tempy = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180), y = tempy * 20037508.34789 / 180, lonLat = new SuperMap.LonLat(x, y), size = new SuperMap.Size(44, 33), offset = new SuperMap.Pixel(-(size.w / 2), -size.h), icon = new SuperMap.Icon("/theme/image/marker.png", size, offset); positionLayer.clearMarkers(); positionLayer.addMarker(new SuperMap.Marker(lonLat, icon)); map.setCenter(lonLat); }); }, false); element.querySelector("#clear").addEventListener("click", function (event) { positionLayer.clearMarkers(); }, false); } }); //量测结果函数 function handleMeasure(event) { lenCtrl.deactivate(); areaCtrl.deactivate(); var messageDialog = new Windows.UI.Popups.MessageDialog(""); if (event.order === 1) { messageDialog.content = "长度测量结果: "+event.measure+" 公里"; messageDialog.showAsync(); } else if (event.order === 2) { messageDialog.content = "面积测量结果: " + event.measure + " 平方公里"; messageDialog.showAsync(); } } })();
通过上面的示例,我们就可以基于SuperMap iClient for JavaScript产品快速的构建Metro风格的地图应用。实现基本的地图浏览、缩放、量算、定位等功能。 你也可以订制化的实现自己期望的地图应用。
将上面的示例打包后,通过windows 8 提供的命令安装应用程序后,在开始界面上出现如下磁贴:
此刻通过单击或者是触摸该磁贴,弹出如下地图应用程序:
我们知道,在SuperMap iClient for JavaScript客户端与REST服交互过程中,涉及到同域与跨域和REST服务交互的问题,这两种情况下需要分别处理。 而在Metro风格下与REST服务的交互已不再区分,统一走同域处理。我们可以通过Windows 运行时下提供的API直接调用即可。不过这些我们无需关心, 在SuperMap iClient for JavaScript产品中我们已做了封装。将SuperMap iClient for JavaScript产品的API引入到新建的Metro风格项目中后, 可以像在浏览器下一样调用API。
Metro风格下与REST服务交互的代码如下:
WinJS.xhr({ url:”url”, type:”GET”, headers:object }).then(function(responseResult){ },function(errorResult){ });