examples.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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>SuperMap iClient for Javascript Android App</title>
  8. <link href='./css/style.css' rel='stylesheet' />
  9. </head>
  10. <body data-spy="scroll" data-target=".subnav" data-offset="50">
  11. <div id='container' class='container'>
  12. <div class='page-header'>
  13. <h1>范例讲解</h1>
  14. <hr/>
  15. <p>
  16. 本章主要讲解代码包中提供的几个范例,以及如何修改范例。在<a href="projectdirectory.html" target="new">工程文件目录</a>中的assets\www\...下有几个html文件,这便是范例代码。
  17. </p>
  18. <h3>一、Hello Word</h3>
  19. <p>
  20. 假设我们现在有一个简单的浏览器端地图范例(如下),只需要修改几行代码,便可以让该范例在安卓移动设备上运行起来。
  21. </p>
  22. <pre>
  23. &lt;!DOCTYPE HTML&gt;
  24. &lt;html&gt;
  25. &lt;head&gt;
  26. &lt;meta charset="utf-8" /&gt;
  27. &lt;title&gt;SuperMap iClient for JavaScript&lt;/title&gt;
  28. &lt;style&gt;
  29. #map{
  30. border:0px solid;
  31. }
  32. &lt;/style&gt;
  33. &lt;script src="libs/SuperMap.Include.js"&gt;&lt;/script&gt;
  34. &lt;script type="text/javascript"&gt;
  35. var map, layer;
  36. function init() {
  37. map = new SuperMap.Map("map",{controls: [
  38. new SuperMap.Control.ScaleLine(),
  39. new SuperMap.Control.Zoom(),
  40. new SuperMap.Control.Navigation({dragPanOptions: {enableKinetic: true}})
  41. ]
  42. });
  43. layer = new SuperMap.Layer.CloudLayer();
  44. map.addLayer(layer);
  45. map.setCenter(new SuperMap.LonLat(11615044.272732, 4422334.5114479), 4);
  46. }
  47. &lt;/script&gt;
  48. &lt;/head&gt;
  49. <span style="color:#23adda">&lt;body onload="init()"&gt;</span>
  50. &lt;div id="map" style="position:absolute;left:0px;right:0px;width:100%;height:100%;"&gt;&lt;/div&gt;
  51. &lt;/body&gt;
  52. &lt;/html&gt;
  53. </pre>
  54. <p>1.引入phonegap相关代码:<span style="color:#23adda">&lt;script type="text/javascript" src="js/cordova-2.7.0.js"&gt;&lt;/script&gt;</span></p>
  55. <p>2.修改初始化方式:删除<span style="color:#23adda">onload="init()"</span>,加上<span style="color:#23adda">document.addEventListener("deviceready",init,false);</span></p>
  56. <p>3.设置运行方式为app应用:<span style="color:#23adda">SuperMap.Util.setApp(true);</span></p>
  57. <p>修改后的代码如下:</p>
  58. <pre>
  59. &lt;!DOCTYPE HTML&gt;
  60. &lt;html&gt;
  61. &lt;head&gt;
  62. &lt;meta charset="utf-8" /&gt;
  63. &lt;title&gt;SuperMap iClient for JavaScript&lt;/title&gt;
  64. &lt;style&gt;
  65. #map{
  66. border:0px solid;
  67. }
  68. &lt;/style&gt;
  69. <span style="color:#23adda">&lt;script type="text/javascript" src="js/cordova-2.7.0.js"&gt;&lt;/script&gt;&lt;!--引入phonegap相关代码--&gt;</span>
  70. &lt;script src="libs/SuperMap.Include.js"&gt;&lt;/script&gt;
  71. &lt;script type="text/javascript"&gt;
  72. var map, layer;
  73. function init() {
  74. <span style="color:#23adda">SuperMap.Util.setApp(true);//设置为app应用</span>
  75. map = new SuperMap.Map("map",{controls: [
  76. new SuperMap.Control.ScaleLine(),
  77. new SuperMap.Control.Zoom(),
  78. new SuperMap.Control.Navigation({dragPanOptions: {enableKinetic: true}})
  79. ]
  80. });
  81. layer = new SuperMap.Layer.CloudLayer();
  82. map.addLayer(layer);
  83. map.setCenter(new SuperMap.LonLat(11615044.272732, 4422334.5114479), 4);
  84. }
  85. <span style="color:#23adda">document.addEventListener("deviceready",init,false);//绑定初始化事件</span>
  86. &lt;/script&gt;
  87. &lt;/head&gt;
  88. <span style="color:#23adda">&lt;body&gt;</span>
  89. &lt;div id="map" style="position:absolute;left:0px;right:0px;width:100%;height:100%;"&gt;&lt;/div&gt;
  90. &lt;/body&gt;
  91. &lt;/html&gt;
  92. </pre>
  93. <p>在生成的<a href="projectdirectory.html" target="new">工程目录</a>中,默认运行的便是该范例,见assets\www\helloword.html</p>
  94. </br>
  95. <h3>二、mbtiles离线缓存范例</h3>
  96. <p>JavaScript移动端产品支持iServer生成的mbtiles格式的离线缓存,关于mbtiles离线缓存,请见iserver帮助文档</p>
  97. <p>下面我来讲解如何使用离线缓存:</p>
  98. <p>1.代码包中有一个已经生成好的mbtiles文件(resource\Android\data\China.mbtiles),将该文件拷贝到移动设备sdcard的SuperMap文件夹中(部分设备的SuperMap文件夹可能会出现在内部存储中)。</p>
  99. <p>2.创建一个TiledDynamicRESTLayer,第一个参数为mbtiles文件的文件名(去掉后缀,这里我们用China),第四个参数中,需要设置storageType为db:</p>
  100. <p><span style="color:#23adda">layer = new SuperMap.Layer.TiledDynamicRESTLayer("China", "", {}, {"storageType":"db"});</span></p>
  101. <p>注意:这里不需要再绑定TiledDynamicRESTLayer的layerInitialized事件了。</p>
  102. <p>代码如下:</p>
  103. <pre>
  104. &lt;!DOCTYPE HTML&gt;
  105. &lt;html&gt;
  106. &lt;head&gt;
  107. &lt;meta charset="utf-8" /&gt;
  108. &lt;title&gt;SuperMap iClient for JavaScript&lt;/title&gt;
  109. &lt;style&gt;
  110. #map{
  111. border:0px solid;
  112. }
  113. &lt;/style&gt;
  114. &lt;script type="text/javascript" src="js/cordova-2.7.0.js"&gt;&lt;/script&gt;
  115. &lt;script src="libs/SuperMap.Include.js"&gt;&lt;/script&gt;
  116. &lt;script type="text/javascript"&gt;
  117. var map, layer;
  118. function init() {
  119. SuperMap.Util.setApp(true);
  120. map = new SuperMap.Map("map",{controls: [
  121. new SuperMap.Control.ScaleLine(),
  122. new SuperMap.Control.Zoom(),
  123. new SuperMap.Control.Navigation({dragPanOptions: {enableKinetic: true}})
  124. ]
  125. });
  126. <span style="color:#23adda">layer = new SuperMap.Layer.TiledDynamicRESTLayer("China", "", {}, {"storageType":"db"}); //使用mbtiles</span>
  127. map.addLayer(layer);
  128. map.setCenter(new SuperMap.LonLat(0, 0), 1);
  129. }
  130. document.addEventListener("deviceready",init,false);
  131. &lt;/script&gt;
  132. &lt;/head&gt;
  133. &lt;body&gt;
  134. &lt;div id="map" style="position:absolute;left:0px;right:0px;width:100%;height:100%;"&gt;&lt;/div&gt;
  135. &lt;/body&gt;
  136. &lt;/html&gt;
  137. </pre>
  138. <p>该范例的示例代码见assets\www\mbtiles.html</p>
  139. <p>你可以修改<a href="projectdirectory.html" target="new">工程文件目录</a>中的res\xml\config.xml文件,将工程运行的页面改为mbtiles.html:</p>
  140. <p>打开config.xml文件,将其中的<span style="color:#23adda">&lt;content src="helloword.html" /&gt;</span>改为<span style="color:#23adda">&lt;content src="mbtiles.html" /&gt;</span>,然后运行。</p>
  141. </br>
  142. <h3>三、定位范例</h3>
  143. <p>想利用iClient JavaScript产品实现定位也非常简单,产品中已经提供了定位控件,您只需要调用该控件即可实现定位。</p>
  144. <p>以SuperMap云服务为例,步骤如下:</p>
  145. <p>1.引入定位控件:</p>
  146. <pre>&lt;script src="js/LocationControl.js"&gt;&lt;/script&gt;</pre>
  147. <p>3.创建定位定位成功回调方法:</p>
  148. <pre>
  149. // 获取位置信息成功时调用的回调函数
  150. function onSuccess(position) {
  151. transCoordinate(position.lon,position.lat,
  152. function(position){
  153. var lat = position.lat;
  154. var lon = position.lon;
  155. markerLayer.clearMarkers();
  156. var size = new SuperMap.Size(44, 33);
  157. var offset = new SuperMap.Pixel(-(size.w / 2), -size.h);
  158. var icon = new SuperMap.Icon("./img/mark.png", size, offset);
  159. markerLayer.addMarker(new SuperMap.Marker(new SuperMap.LonLat(lon, lat), icon));
  160. map.setCenter(new SuperMap.LonLat(lon, lat));
  161. },
  162. function(){
  163. alert("坐标转换失败!");
  164. }
  165. );
  166. }
  167. </pre>
  168. <p>4.创建坐标转换方法:</p>
  169. <pre>
  170. //云服务转换坐标
  171. function transCoordinate(lon,lat,onSuccess,onError){
  172. var urlCoordinate="http://services.supermapcloud.com/iserver/cloudhandler";
  173. var lon_Cloud = lon;
  174. var lat_Cloud = lat;
  175. var param = "{\"x\":" + lon_Cloud + ",\"y\":" + lat_Cloud + "}";
  176. var data = {"servicename":"coordinateService","methodname":"convertGPS2SM","parameter":param};
  177. jQuery.ajax({
  178. "dataType":"jsonp",
  179. "jsonp":"jsonp",
  180. "type":"GET",
  181. "url":urlCoordinate,
  182. "data":data,
  183. "success":function(onSuccess){
  184. return function(cb){
  185. var position = {
  186. "lon":cb.result[0].x,
  187. "lat":cb.result[0].y
  188. };
  189. onSuccess(position);
  190. }
  191. }(onSuccess),
  192. "error":onError
  193. });
  194. }
  195. </pre>
  196. <p>5.创建定位失败回调方法:</p>
  197. <pre>
  198. function onError(msg) {
  199. alert(msg);
  200. }
  201. </pre>
  202. <p>6.创建定位控件实例,并调用其定位方法:</p>
  203. <pre>
  204. var locationCtrl = new SuperMap.LocationControl();
  205. locationCtrl.local(onSuccess,onError,5000);
  206. </pre>
  207. <p>完整示例代码如下:</p>
  208. <pre>
  209. &lt;!DOCTYPE HTML&gt;
  210. &lt;html&gt;
  211. &lt;head&gt;
  212. &lt;meta charset="utf-8" /&gt;
  213. &lt;title&gt;SuperMap iClient for JavaScript&lt;/title&gt;
  214. &lt;style&gt;
  215. #map{
  216. border:0px solid;
  217. }
  218. &lt;/style&gt;
  219. &lt;script type="text/javascript" src="js/cordova-2.7.0.js"&gt;&lt;/script&gt;
  220. &lt;script src="js/jquery.js"&gt;&lt;/script&gt;
  221. &lt;script src="libs/SuperMap.Include.js"&gt;&lt;/script&gt;
  222. <span style="color:#23adda"> &lt;script src="js/LocationControl.js"&gt;&lt;/script&gt;</span>
  223. &lt;script type="text/javascript"&gt;
  224. var map, layer,markerLayer,locationCtrl;
  225. function init() {
  226. SuperMap.Util.setApp(true);
  227. map = new SuperMap.Map("map",{controls: [
  228. new SuperMap.Control.ScaleLine(),
  229. new SuperMap.Control.Zoom(),
  230. new SuperMap.Control.Navigation({dragPanOptions: {enableKinetic: true}})
  231. ]
  232. });
  233. layer = new SuperMap.Layer.CloudLayer();
  234. markerLayer = new SuperMap.Layer.Markers("Markers");
  235. map.addLayers([layer,markerLayer]);
  236. map.setCenter(new SuperMap.LonLat(11615044.272732, 4422334.5114479), 4);
  237. }
  238. <span style="color:#23adda"> function locating(){
  239. if(!locationCtrl){
  240. locationCtrl = new SuperMap.LocationControl();
  241. }
  242. locationCtrl.local(onSuccess,onError,5000);
  243. }
  244. // 获取位置信息成功时调用的回调函数
  245. function onSuccess(position) {
  246. transCoordinate(position.lon,position.lat,
  247. function(position){
  248. var lat = position.lat;
  249. var lon = position.lon;
  250. markerLayer.clearMarkers();
  251. var size = new SuperMap.Size(44, 33);
  252. var offset = new SuperMap.Pixel(-(size.w / 2), -size.h);
  253. var icon = new SuperMap.Icon("./img/mark.png", size, offset);
  254. markerLayer.addMarker(new SuperMap.Marker(new SuperMap.LonLat(lon, lat), icon));
  255. map.setCenter(new SuperMap.LonLat(lon, lat));
  256. },
  257. function(){
  258. alert("坐标转换失败!");
  259. }
  260. );
  261. }
  262. // onError回调函数
  263. function onError(msg) {
  264. alert(msg);
  265. }
  266. //云服务转换坐标
  267. function transCoordinate(lon,lat,onSuccess,onError){
  268. var urlCoordinate="http://services.supermapcloud.com/iserver/cloudhandler";
  269. var lon_Cloud = lon;
  270. var lat_Cloud = lat;
  271. var param = "{\"x\":" + lon_Cloud + ",\"y\":" + lat_Cloud + "}";
  272. var data = {"servicename":"coordinateService","methodname":"convertGPS2SM","parameter":param};
  273. jQuery.ajax({
  274. "dataType":"jsonp",
  275. "jsonp":"jsonp",
  276. "type":"GET",
  277. "url":urlCoordinate,
  278. "data":data,
  279. "success":function(onSuccess){
  280. return function(cb){
  281. var position = {
  282. "lon":cb.result[0].x,
  283. "lat":cb.result[0].y
  284. };
  285. onSuccess(position);
  286. }
  287. }(onSuccess),
  288. "error":onError
  289. });
  290. }</span>
  291. document.addEventListener("deviceready",init,false);
  292. &lt;/script&gt;
  293. &lt;/head&gt;
  294. &lt;body&gt;
  295. &lt;div id="map" style="position:absolute;left:0px;right:0px;width:100%;height:100%;"&gt;&lt;/div&gt;
  296. &lt;input id="button" style="position:absolute;right:5px;top:5px;z-index:999" value="定位" type="button" ontouchend="locating()"&gt;&lt;/input&gt;
  297. &lt;/body&gt;
  298. &lt;/html&gt;
  299. </pre>
  300. <p>该范例的示例代码见assets\www\location.html</p>
  301. <p>你可以修改<a href="projectdirectory.html" target="new">工程文件目录</a>中的res\xml\config.xml文件,将工程运行的页面改为location.html:</p>
  302. <p>打开config.xml文件,将其中的<span style="color:#23adda">&lt;content src="helloword.html" /&gt;</span>改为<span style="color:#23adda">&lt;content src="location.html" /&gt;</span>,然后运行。</p>
  303. </br>
  304. <h3>四、截屏范例</h3>
  305. <p>你可以使用iClient JavaScript产品轻松实现截屏功能,产品中提供了截屏控件</p>
  306. <p>具体步骤如下:</p>
  307. <p>1.引入截屏控件代码:</p>
  308. <pre>
  309. &lt;script src="js/ShotScreenControl.js"&gt;&lt;/script&gt;
  310. </pre>
  311. <p>2.创建截屏控件实例,并调用其截屏方法:</p>
  312. <pre>
  313. var shotScreenCtl = new SuperMap.ShotScreenControl();
  314. shotScreenCtl.shot();
  315. </pre>
  316. <p>完整范例代码如下:</p>
  317. <pre>
  318. &lt;!DOCTYPE HTML&gt;
  319. &lt;html&gt;
  320. &lt;head&gt;
  321. &lt;meta charset="utf-8" /&gt;
  322. &lt;title&gt;SuperMap iClient for JavaScript&lt;/title&gt;
  323. &lt;style&gt;
  324. #map{
  325. border:0px solid;
  326. }
  327. &lt;/style&gt;
  328. &lt;script type="text/javascript" src="js/cordova-2.7.0.js"&gt;&lt;/script&gt;
  329. &lt;script src="libs/SuperMap.Include.js"&gt;&lt;/script&gt;
  330. <span style="color:#23adda"> &lt;script src="js/ShotScreenControl.js"&gt;&lt;/script&gt;</span>
  331. &lt;script type="text/javascript"&gt;
  332. var map, layer,markerLayer,shotScreenCtl;
  333. function init() {
  334. SuperMap.Util.setApp(true);
  335. map = new SuperMap.Map("map",{controls: [
  336. new SuperMap.Control.ScaleLine(),
  337. new SuperMap.Control.Zoom(),
  338. new SuperMap.Control.Navigation({dragPanOptions: {enableKinetic: true}})
  339. ]
  340. });
  341. layer = new SuperMap.Layer.CloudLayer();
  342. map.addLayers([layer]);
  343. map.setCenter(new SuperMap.LonLat(11615044.272732, 4422334.5114479), 4);
  344. }
  345. <span style="color:#23adda"> function shot(){
  346. if(!shotScreenCtl){
  347. shotScreenCtl = new SuperMap.ShotScreenControl();
  348. }
  349. shotScreenCtl.shot();
  350. }</span>
  351. document.addEventListener("deviceready",init,false);
  352. &lt;/script&gt;
  353. &lt;/head&gt;
  354. &lt;body&gt;
  355. &lt;div id="map" style="position:absolute;left:0px;right:0px;width:100%;height:100%;"&gt;&lt;/div&gt;
  356. &lt;input id="button" style="position:absolute;right:5px;top:5px;z-index:999" value="截屏" type="button" ontouchend="shot()"&gt;&lt;/input&gt;
  357. &lt;/body&gt;
  358. &lt;/html&gt;
  359. </pre>
  360. <p>该范例的示例代码见assets\www\shotscreen.html</p>
  361. <p>你可以修改<a href="projectdirectory.html" target="new">工程文件目录</a>中的res\xml\config.xml文件,将工程运行的页面改为shotscreen.html:</p>
  362. <p>打开config.xml文件,将其中的<span style="color:#23adda">&lt;content src="helloword.html" /&gt;</span>改为<span style="color:#23adda">&lt;content src="shotscreen.html" /&gt;</span>,然后运行。</p>
  363. </div>
  364. <div class='footer'>
  365. <p>版权所有&nbsp;&copy; 1997-2015. &nbsp;北京超图软件股份有限公司</p>
  366. </div>
  367. </div>
  368. <script src='./js/jquery.js'></script>
  369. <script src='./js/bootstrap.js'></script>
  370. </body>
  371. </html>