Win8AppTopic.html 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
  6. <meta name="apple-mobile-web-app-capable" content="yes" />
  7. <title>面向 Windows 8 应用商店开发专题</title>
  8. <link href='./css/bootstrap.min.css' rel='stylesheet' />
  9. <link href='./css/bootstrap-responsive.min.css' rel='stylesheet' />
  10. <link href='./css/sm-extend.css' rel='stylesheet' />
  11. <link href='./css/sm-doc.css' rel='stylesheet' />
  12. </head>
  13. <body data-spy="scroll" data-target=".subnav" data-offset="50">
  14. <!--导航条-->
  15. <div class="navbar navbar-fixed-top" id="navbar">
  16. </div>
  17. <div id='container' class='container'>
  18. <div class='page-header'>
  19. <h1>面向 Windows 8 应用商店开发专题</h1>
  20. <hr/>
  21. <h2>一、Metro风格地图应用程序开发简介</h2>
  22. <div class="pageImage"> <img src="./images/metro_main.png" /></div><br />
  23. <p>
  24. SuperMap iClient 8C(2017) for JavaScript 是一款在服务式 GIS 架构体系中,面向 HTML5 的应用开发,支持多终端,跨浏览器的客户端开发平台。
  25. 通过 SuperMap iClient 8C(2017) for JavaScript,无需任何插件,便可以在浏览器上实现美观的地图展现,内容丰富的地图应用。
  26. </p>
  27. <p>
  28. 随着Surface 平板电脑的兴起,借助SuperMap iClient for JavaScript开发平台,我们可以快捷地开发Windows 8下Metro风格的地图应用程序,订制期望的地图应用功能等。
  29. </p>
  30. <h2>二、Metro风格地图应用程序开发入门</h2>
  31. <p>
  32. 该文档介绍了基于SuperMap iClient for JavaScript 平台如何开发Windows 8下Metro风格的地图应用程序,该地图包含基本的地图浏览、缩放、量算和定位功能。
  33. 二次开发人员或用户可以在此基础上增加自己的业务需求,丰富地图应用。同时我们会在开发范例中提供Metro风格的地图应用的源码和打包后的应用程序,
  34. 用户可自行下载安装包试用。
  35. </p>
  36. <ol>
  37. <li>配置开发环境
  38. <ul style="list-style-type:disc;">
  39. <li>下载并解压 <a target="new" href="http://www.supermap.com.cn/sup/download_view.asp?id=578&bid=1">SuperMap iClient 8C(2017) for JavaScript</a></li>
  40. <li>安装Windows 8 系统 </li>
  41. <li>安装Visual Studio 2012 </li>
  42. <li>注册微软开发者账号(提示:打开Visual Studio 2012即提示注册账号(如果已有账号直接登录即可)) </li>
  43. </ul>
  44. </li>
  45. <li>Metro风格工程创建
  46. <ul style="list-style-type:disc;">
  47. <li>打开Visual Studio 2012,单击文件,选择新建项目快捷键,弹出如下新建项目对话框:<br />
  48. <div class="pageImage"> <img src="./images/metro_new.png"/></div>
  49. <p>在新建项目对话框中左侧在已安装的模板中找到JavaScript Windows应用商店,同时在右侧选择导航布局应用程序(当然您也可以选择空白应用程序)。
  50. 在下方名称一栏中输入应用程序名称(JavaScript for WinRT),在位置一栏中选择应用程序保存的位置(E:\WinRT\)。单击确定按钮即创建了导航布局应用程序。
  51. 创建好的解决方案目录结构如下:</p>
  52. <div class="pageImage"> <img src="./images/metro_directory.png"/></div>
  53. </li>
  54. <li>将SuperMap iClient for JavaScript产品包下的libs文件夹和theme文件夹同时拷贝至JavaScript for WinRT的解决方案下,最终目录图示如下:<br />
  55. <div class="pageImage"> <img src="./images/metro_directory.png"/></div>
  56. </li>
  57. <li>由于我们要使用定位功能,而在Metro风格应用中,定位功能默认情况下是禁用的,我们需要开启它。双击打开package.appxmanifest文件,选择功能选项卡,
  58. 勾选位置前面的复选框,保存该文件,这样既可启用定位功能,图示如下:<br />
  59. <div class="pageImage"> <img src="./images/metro_location.png"/></div>
  60. </li>
  61. </ul>
  62. </li>
  63. <li>代码说明
  64. <ul style="list-style-type:disc;">
  65. <li>打开pages/home/home.html页面,引入SuperMap.Include.js文件,修改后html页面, 请查看源码。
  66. <!-- <pre><code>
  67. <div class="funcDiv">
  68. <ul>
  69. <li>
  70. <button id="measureLength">量算长度</button></li>
  71. <li>
  72. <button id="measureArea">量算面积</button></li>
  73. <li>
  74. <button id="myPosition">我的位置</button></li>
  75. <li>
  76. <button id="clear">清除</button></li>
  77. </ul>
  78. </div>
  79. <div id="map"></div>
  80. </code></pre> -->
  81. </li>
  82. <li>打开pages/home/home.css样式文件,修改后的样式文件如下:
  83. <pre>
  84. .homepage section[role=main] {
  85. margin-left: 120px;
  86. }
  87. .funcDiv {
  88. z-index: 9999;
  89. position: absolute;
  90. top: 0;
  91. right: 10px;
  92. }
  93. ul {
  94. list-style-type: none;
  95. }
  96. ul li {
  97. display: inline-block;
  98. }
  99. #map {
  100. width: 100%;
  101. height: 100%;
  102. }
  103. @media screen and (-ms-view-state: snapped) {
  104. .homepage section[role=main] {
  105. margin-left: 20px;
  106. }
  107. }
  108. @media screen and (-ms-view-state: portrait) {
  109. .homepage section[role=main] {
  110. margin-left: 100px;
  111. }
  112. }
  113. </pre>
  114. </li>
  115. <li>打开pages/home/home.js文件,修改后的代码如下:
  116. <pre>
  117. (function () {
  118. "use strict";
  119. var map, layer, positionLayer, lenCtrl, areaCtrl;
  120. WinJS.UI.Pages.define("/pages/home/home.html", {
  121. ready: function (element, options) {
  122. // 初始化地图
  123. map = new SuperMap.Map("map", {
  124. controls: [
  125. new SuperMap.Control.ScaleLine(),
  126. new SuperMap.Control.Zoom(),
  127. new SuperMap.Control.MousePosition(),
  128. new SuperMap.Control.Navigation({
  129. dragPanOptions: {
  130. enableKinetic: true
  131. }
  132. })], units: "m"
  133. });
  134. positionLayer = new SuperMap.Layer.Markers();
  135. layer = new SuperMap.Layer.CloudLayer();
  136. map.addLayers([layer, positionLayer]);
  137. map.setCenter(new SuperMap.LonLat(12956286, 4855615), 12);
  138. //测量控件加入map对象中
  139. lenCtrl = new SuperMap.Control.Measure(SuperMap.Handler.Path, { persist: true });
  140. areaCtrl = new SuperMap.Control.Measure(SuperMap.Handler.Polygon, { persist: true });
  141. lenCtrl.events.on({
  142. "measure": handleMeasure
  143. });
  144. areaCtrl.events.on({
  145. "measure": handleMeasure
  146. });
  147. map.addControls([lenCtrl, areaCtrl]);
  148. //功能键单击事件
  149. element.querySelector("#measureLength").addEventListener("click", function (event) {
  150. lenCtrl.activate();
  151. }, false);
  152. element.querySelector("#measureArea").addEventListener("click", function (event) {
  153. areaCtrl.activate();
  154. }, false);
  155. element.querySelector("#myPosition").addEventListener("click", function (event) {
  156. //实现定位功能
  157. var geolocator = Windows.Devices.Geolocation.Geolocator();
  158. geolocator.getGeopositionAsync().done(function (position) {
  159. var lon = position.coordinate.longitude,
  160. x = lon * 20037508.342789 / 180,
  161. lat = position.coordinate.latitude,
  162. tempy = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180),
  163. y = tempy * 20037508.34789 / 180,
  164. lonLat = new SuperMap.LonLat(x, y),
  165. size = new SuperMap.Size(44, 33),
  166. offset = new SuperMap.Pixel(-(size.w / 2), -size.h),
  167. icon = new SuperMap.Icon("/theme/image/marker.png", size, offset);
  168. positionLayer.clearMarkers();
  169. positionLayer.addMarker(new SuperMap.Marker(lonLat, icon));
  170. map.setCenter(lonLat);
  171. });
  172. }, false);
  173. element.querySelector("#clear").addEventListener("click", function (event) {
  174. positionLayer.clearMarkers();
  175. }, false);
  176. }
  177. });
  178. //量测结果函数
  179. function handleMeasure(event) {
  180. lenCtrl.deactivate();
  181. areaCtrl.deactivate();
  182. var messageDialog = new Windows.UI.Popups.MessageDialog("");
  183. if (event.order === 1) {
  184. messageDialog.content = "长度测量结果: "+event.measure+" 公里";
  185. messageDialog.showAsync();
  186. } else if (event.order === 2) {
  187. messageDialog.content = "面积测量结果: " + event.measure + " 平方公里";
  188. messageDialog.showAsync();
  189. }
  190. }
  191. })();
  192. </pre>
  193. </li>
  194. </ul>
  195. </li>
  196. <li>Metro风格示例效果图展示
  197. <p>通过上面的示例,我们就可以基于SuperMap iClient for JavaScript产品快速的构建Metro风格的地图应用。实现基本的地图浏览、缩放、量算、定位等功能。
  198. 你也可以订制化的实现自己期望的地图应用。</p>
  199. <p>将上面的示例打包后,通过windows 8 提供的命令安装应用程序后,在开始界面上出现如下磁贴:</p>
  200. <div class="pageImage"> <img src="./images/metro_link.png" /></div>
  201. <p>此刻通过单击或者是触摸该磁贴,弹出如下地图应用程序:</p>
  202. <div class="pageImage"> <img src="./images/metro_ui.png" style="width:890px;"/></div>
  203. </li>
  204. </ol>
  205. <h2>三、Metro风格地图应用程序REST交互</h2>
  206. <p>
  207. 我们知道,在SuperMap iClient for JavaScript客户端与REST服交互过程中,涉及到同域与跨域和REST服务交互的问题,这两种情况下需要分别处理。
  208. 而在Metro风格下与REST服务的交互已不再区分,统一走同域处理。我们可以通过Windows 运行时下提供的API直接调用即可。不过这些我们无需关心,
  209. 在SuperMap iClient for JavaScript产品中我们已做了封装。将SuperMap iClient for JavaScript产品的API引入到新建的Metro风格项目中后,
  210. 可以像在浏览器下一样调用API。
  211. </p>
  212. <p>
  213. Metro风格下与REST服务交互的代码如下:
  214. </p>
  215. <pre>
  216. WinJS.xhr({
  217.   url:”url”,
  218.   type:”GET”,
  219.   headers:object
  220. }).then(function(responseResult){
  221.   
  222. },function(errorResult){
  223.   
  224. });
  225. </pre>
  226. </div>
  227. <div class='footer'>
  228. <p>版权所有&nbsp;&copy; 2000-2016 &nbsp;北京超图软件股份有限公司</p>
  229. </div>
  230. </div>
  231. <script src='./js/jquery.js'></script>
  232. <script src='./js/bootstrap.js'></script>
  233. <script src="./js/navbar.js"></script>
  234. <script src="./js/GoTop.js" id="js_gotop"></script>
  235. </body>
  236. </html>