SuperMap iClient for JavaScript初入

介绍SuperMap for Js的简单使用.

推荐先看下这篇文档:SuperMap iClient for JavaScript 新手入门 , 个人感觉是要好于官方的新手入门文档的.

使用SuperMap js 的核心流程如下:

  1. 创建地图Map
  2. 创建Layer /控件
  3. 创建要素 / Marker /..
  4. 将 要素 / Marker /.. 添加入图层 Layer
  5. 将图层添加入 Map

1.SuperMap下载

链接:SuperMap

2.SuperMap简单地图加载

在仅使用Js 文件的情况下, 只需引入 SuperMap.Include.js 即可.

2.1 SuperMap云地图

    <script type="text/javascript">
var map;
var layer, vectors, markers, imgMarker;
var vectorInfoWin, markerInfoWin;
onload = function init() {
//初始化地图对象。
//创建map 对象, 并且必须指定map 所在的div;
map = new SuperMap.Map("map");
//通过向SuperMap云服务器发送请求得到SuperMap云服务发布的图层。
//在Map中显示, 所有的元素都必须置于图层上, 必须创建图层;同时可以有多个图层;
layer = new SuperMap.Layer.CloudLayer();
//创建图层后必须将图层添加至对应的map中才可以显示出来;
map.addLayer(layer);
//设置中心点
//经纬度并非常规经纬度, 不是很明白是哪种;
map.setCenter(new SuperMap.LonLat(11339634.286396, 4588716.5813769), 4);
</script>
<body>
<div id="map"
style="position: absolute; left: 0px;
right: 0px; width: auto; height: 90%;">
</div>
</body>

通过这种方式就建立了一个最简单的云地图.

2.2 构建多种服务地图

构建多种服务地图仅需要将 layer = new SuperMap.Layer.CloudLayer(); 替换即可.

	<script type="text/javascript">
//百度地图, 同样是沿用 CloudLayer() 的经纬度;
//layer = new SuperMap.Layer.Baidu();
//天地图, 经纬度好像还有区别, 不是很理解
//layer = new SuperMap.Layer.Tianditu();
//这一种方式也是我最后选取的方式, 使用常规经纬度即可
//初始化地图,所有图层都被当做叠加图层来使用。
map = new SuperMap.Map("map", { allOverlays: true });
//全球矢量底图服务。
layerBase = new SuperMap.Layer.WMTS({
name: "vec",//WMTS服务名称。
url: "http://t0.tianditu.com/vec_c/wmts",//WMTS图层的服务地址,必设属性。
layer: "vec", //图层名称。
style: "default", //发布的图层样式,默认为”default”。
matrixSet: "c", //发布的标识符矩阵集,必设属性。
format: "tiles", //图像的MIME类型,默认为 “image/png”。
requestEncoding: "KVP" //请求编码。可以是“REST”或者“KVP”,默认为”KVP”。
});
//全球矢量中文注记服务。
layerMarker = new SuperMap.Layer.WMTS({
name: "cva",
url: "http://t0.tianditu.com/cva_c/wmts",
layer: "cva",
style: "default",
matrixSet: "c",
format: "tiles",
requestEncoding: "KVP"
});
//添加图层,设置中心点,指定放缩级别。
//将创建的添加 入 map中
map.addLayers([layerBase, layerMarker]);
//在这种模式下, 可以使用常规的经纬度;
map.setCenter(new SuperMap.LonLat(108.9398165260,34.3412614674), 12);
</script>

我使用的经纬度查询方式一般为: 在线地图经纬度查询

2.3 地图控件的添加

在介绍以下部分前, 给出几个链接 :

SuperMap 文档 OnLine 将这个文档与下载包内的官方API SuperMap iClient for JavaScript Help.chm 结合阅读理解更快.

SuperMap 基本概念介绍

SuperMap.Control 定义Control 地图控件.

默认添加的控件 :SuperMap.Control.Navigation 控件处理伴随鼠标事件(拖拽,双击、鼠标滚轮缩放)的地图浏览.

	<script type="text/javascript">
var map;
onload = function init() {
//在创建 map 的时候直接添加, 一般只针对必要控件, 以及辅助型控件;
map = new SuperMap.Map("map", {
allOverlays: true,
controls:[
new SuperMap.Control.Navigation(),//鼠标处理事件
new SuperMap.Control.Zoom(),//缩放类控件
new SuperMap.Control.LayerSwitcher(), //图层选择控件类。 用于控制地图中的图层可见性。
new SuperMap.Control.MousePosition() //该控件显示鼠标移动时,所在点的地理坐标
]
});
//另一种方式: //GEO定位控件
geolocate = new SuperMap.Control.Geolocate({
bind: false,
geolocationOptions: {
enableHighAccuracy: false,
maximumAge: 0
},
eventListeners: {
"locationupdated": getGeolocationCompleted,
"locationfailed": getGeolocationFailed
}
});
//添加单个控件
map.addControl(geolocate);
//添加多个控件
//map.addControls([control1, control2],[null]);
//map.addControls([control1, control2]);//通过options的第二个数组通过像素对象控制控件的位置 两个数组应该匹配,如果为 null, 则在默认位置;
//对于一部分控件需要激活才能使用,
geolocate.activate();
//注销控件
//geolocate.deactivate();
function getGeolocationCompleted(event) {
console.log(event.position);
} function getGeolocationFailed(event) {
console.log("123");
} //第三种添加方式:
//定义控件图层
var vector = new SuperMap.Layer.Vector("vector layer");
map.addLayer(vector);
//定义容器
var panel = new SuperMap.Control.Panel();
//定义两个控件
var modifyFeature = new SuperMap.Control.ModifyFeature(vector);
var drawFeature = new SuperMap.Control.DrawFeature(vector, SuperMap.Handler.Polygon);
//在容器中添加多个控件
toolbar.addControls(modifyFeature, drawFeature);
//将容器添加入map;
map.addControl(toolbar);
</script>

2.4 添加地图覆盖物

地图覆盖物一般是指叠加或覆盖到地图上的内容,如标注、矢量要素(如线、多边形、圆、椭圆等)、信息窗口等。

覆盖物会固定在地图的某个位置,跟随地图的平移或缩放而移动,但其本身不会缩放。

地图上最常见、最简单的覆盖物是Marker,也就是地图上的点标注。

点标注一般有默认的图标和样式,当然我们也可以根据需要自定义图标。除了Marker,信息框和矢量要素也是常用的覆盖物。

	<script type="text/javascript">
//marker有专用的 marker 图层;
var markerLayer = new SuperMap.Layer.Markers("markers");
map.addLayer(markerLayer);
//标记图层上添加标记 并设置相应的 属性种种;
var size = new SuperMap.Size(21,25);
var offset = new SuperMap.Pixel(-(size.w/2), -size.h);
var icon = new SuperMap.Icon('../img/marker.png',size,offset);
markers.addMarker(new SuperMap.Marker(new SuperMap.LonLat(0,0),icon)); //添加矢量要素
//创建矢量要素, 创建 Geometry对象
var vectorLayer = new SuperMap.Layer.Vector("vectorLayer");
//点对象
var point= new SuperMap.Geometry.Point(0,0);
var pointVector = new SuperMap.Feature.Vector(point);
pointVector.style={
fillColor:"red",
strokeColor:"yellow",
pointRadius:6
};
//添加多个点
//var multiPoint = new SuperMap.Geometry.MultiPoint([point1,point2]); //线对象
var points2=[
new SuperMap.Geometry.Point(0,29.4),
new SuperMap.Geometry.Point(-50,39.4),
new SuperMap.Geometry.Point(-30,19.4),
new SuperMap.Geometry.Point(100,49.4)
];
//对待封闭图形, 需要创建 LinearRing 放入 构造器中;
var line1 = new SuperMap.Geometry.LineString(points2);
var lineVector = new SuperMap.Feature.Vector(line1);
lineVector.style={
strokeColor:"#7B68EE",
strokeWidth:2
} ;
//六边形
var points2=[
new SuperMap.Geometry.Point(-120,54.142),
new SuperMap.Geometry.Point(-110,40),
new SuperMap.Geometry.Point(-120,25.857),
new SuperMap.Geometry.Point(-140,25.857),
new SuperMap.Geometry.Point(-150,40),
new SuperMap.Geometry.Point(-140,54.142) ],
linearRings = new SuperMap.Geometry.LinearRing(points2),
region = new SuperMap.Geometry.Polygon([linearRings]);
var polygonVector = new SuperMap.Feature.Vector(region);
// 矩形
var x = -70;
var y = -30;
var w = 40;
var h = 30;
var rectangle = new SuperMap.Geometry.Rectangle(x, y, w, h);
var rectangleVector = new SuperMap.Feature.Vector(rectangle);
</script>

2.5 地图区域选择

    <script type="text/javascript">

		//创建时, 需要注意对象的创建次序, 否则容易出现层级覆盖的情况,导致无法添加
var map, layerBase, layerMarker;
function init() {
var vectorLayer = new SuperMap.Layer.Vector("标绘图层");
vectorLayer.events.on({"afterfeaturemodified": editFeatureCompleted});
var snap01 = new SuperMap.Snap([vectorLayer], 10, 10, {
actived: true
});
var drawPolygon = new SuperMap.Control.DrawFeature(vectorLayer, SuperMap.Handler.Polygon);
//如果不添加对应事件, 在激活控件的时候会报错;
drawPolygon.events.on({
"featureadded": drawCompleted
});
var modifyFeature = new SuperMap.Control.ModifyFeature(vectorLayer);
modifyFeature.snap = snap01;
map = new SuperMap.Map("map", {
allOverlays: true,
controls: [
new SuperMap.Control.Navigation(),
new SuperMap.Control.Zoom(),
new SuperMap.Control.LayerSwitcher(),
new SuperMap.Control.MousePosition()
]
});
layerBase = new SuperMap.Layer.WMTS({
name: "vec",
url: "http://t0.tianditu.com/vec_c/wmts",
layer: "vec",
style: "default",
matrixSet: "c",
format: "tiles",
requestEncoding: "KVP"
});
layerMarker = new SuperMap.Layer.WMTS({
name: "cva",
url: "http://t0.tianditu.com/cva_c/wmts",
layer: "cva",
style: "default",
matrixSet: "c",
format: "tiles",
requestEncoding: "KVP"
}); map.addControl(drawPolygon);
map.addControl(modifyFeature);
map.addLayers([layerBase, layerMarker,vectorLayer]);
drawPolygon.activate();
modifyFeature.activate();
map.setCenter(new SuperMap.LonLat(108.9398165260, 34.3412614674), 12);
function drawCompleted(eventArgs) {
//TODO
}
function editFeatureCompleted(event) {
//TODO
}
}
</script>

2.6 注意事项:

    图层之间的层级覆盖关系需要多注意, 效果显示不出来的原因可能是层级覆盖;所以最好打开 LayerSwitcher 控制器.

SuperMap iClient for JavaScript初入的更多相关文章

  1. SuperMap iClient for JavaScript 新手入门

    地理信息系统(英语:Geographic Information System,缩写:GIS)是一门综合性学科,结合地理学与地图学,已经广泛的应用在不同的领域,是用于输入.存储.查询.分析和显示地理数 ...

  2. SuperMap iClient for JavaScript image出图

    SuperMap iClient for JavaScript 客户端基于openlayers 开发. 目前最高版本为811,9D产品后推荐客户使用leaflet.openlayers客户端开发. 问 ...

  3. SuperMap iClient for JavaScript 之关联查询

    人们常说,计划赶不上变化.同样的,在项目中,使用的数据也是在不断变化的,尤其是属性信息的改变.就比如说,地图上的地物,它的空间信息在比较长的时间内,都不会发生变化,他的属性信息在初期不完整或者与后来的 ...

  4. 浅谈Supermap iClient for JavaScript 弹窗类

    地图作为信息的载体和呈现方式,是GIS的重要组成部分,它是一个浏览信息的窗口,在信息日益发达的今天 ,各种地图应用如雨后春笋一般出现在大众眼前,而不是像以往一样太过局限于专业的领域.而弹窗,是作为地图 ...

  5. 初学HTML5、初入前端

    学习HTML5是一个漫长的过程,当中会遇到很多技术与心态上的变化.刚开始学习,我们不能发力过猛,需要一个相对稳定的状态去面对.多关注一些自己感兴趣的网站和技术知识,建立自己的信心与好奇心,为以后的学习 ...

  6. 初入码田--ASP.NET MVC4 Web应用之创建一个空白的MVC应用程序

    初入码田--ASP.NET MVC4 Web应用开发之一  实现简单的登录 初入码田--ASP.NET MVC4 Web应用开发之二 实现简单的增删改查 2016-07-29 在此之前,需要一台电脑( ...

  7. SuperMap iClient如何使用WMTS地图服务

    SuperMap iClient如何使用WMTS地图服务 什么是WMTS服务 WMTS,切片地图Web服务(Web Map Tile Service)当前版本是1.0.0.该服务符合 OGC(Open ...

  8. Scala初入

    何为Scala物 Scala为基于JVM虚拟机中的面向对象与函数式编程思想并且完全兼容Java的混合编程语言,可以是Scala与Java是同根同源的,既然Scala与JAVA都是基于JVM之上的编程语 ...

  9. SuperMap iClient 7C——网络客户端GIS开发平台 产品新特性

    SuperMap iClient 7C是空间信息和服务的可视化交互开发平台,是SuperMap服务器系列产品的统一客户端.产品基于统一的架构体系,面向Web端和移动端提供了多种类型的SDK开发包,帮助 ...

随机推荐

  1. 1492: [NOI2007]货币兑换Cash

    Description 小Y最近在一家金券交易所工作.该金券交易所只发行交易两种金券:A纪念券(以下简称A券)和 B纪念券(以下 简称B券).每个持有金券的顾客都有一个自己的帐户.金券的数目可以是一个 ...

  2. 【Java学习笔记之五】java数组详解

    数组 概念 同一种类型数据的集合.其实数组就是一个容器. 数组的好处 可以自动给数组中的元素从0开始编号,方便操作这些元素. 格式1: 元素类型[] 数组名 = new 元素类型[元素个数或数组长度] ...

  3. HDU-5157Harry and magic string

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5157 先从后往前插点,在构造回文树时,让cnt[i]+=cnt[fail[i]],然后维护一个后缀和a. ...

  4. JAVA多线程之CountDownLatch

    前序: 上周测试给开发的同事所开发的模块提出了一个bug,并且还是偶现. 经过仔细查看代码,发现是在业务中启用了多线程,2个线程同时跑,但是新启动的2个线程必须保证一个完成之后另一个再继续运行,才能消 ...

  5. linux命令 uname -r 和 uname -a 的解释与演示

    1.uname -r : 显示操作系统的发行版号2.uname -a :显示系统名.节点名称.操作系统的发行版号.内核版本等等. 系统名:Linux 节点名称: iZ2zeeailqvwws5dcui ...

  6. [OpenCV][ARM9下移植OpenCV]

    [OpenCV][ARM9下移植OpenCV]   安装环境 宿主机: Red Hat Enterprise Linux Server 6.3 开发板: mini2440 相关软件: cmake-3. ...

  7. 使用nginx处理静态资源请求,其余交给node

    由于项目后台使用的是node,然而node不适合对静态资源的处理,因为他的异步处理(事件轮询)机制,所以更擅长的是密集I/O型的应用,所以我就有了一个想法,使用nginx来做反向代理,当请求的是静态资 ...

  8. input事件中文触发多次问题研究

    我们在网页中经常会遇到实时搜索的情况,或者其他类似需要input实时响应的问题,一般情况下,我们是利用input和propertychange事件来监听input内容的变化来响应,但是有一个问题就是当 ...

  9. Spark应用_PageView_UserView_HotChannel

    Spark应用_PageView_UserView_HotChannel 一.PV 对某一个页面的访问量,在页面中进行刷新一次就是一次pv PV {p1, (u1,u2,u3,u1,u2,u4-)} ...

  10. Version 1.7.0_80 of the JVM is not suitable for this product.Version: 1.8 or greater is required.

    Eclipse启动失败,设置eclipse启动jdk有2种方法 第一种: 直接安装eclipse对应的jdk版本,并设置环境变量 第二种: 修改eclipse配置文件eclipse.ini 在plug ...