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