基础功能
载入效果
当地图文件在载入时显示一个载入消息。该功能用于网速非常非常慢的场合。
设置方法
- 在html文件头部设置需要包含的css文件。
<head> <link href="../../dist/kqmaploading.min.css" rel="stylesheet" type="text/css"> </head>
- 在map的div中添加“loading”类。
<div id="map" style="height: 100%;" class="loading"> </div>
- 在map的div中添加"Loading..."文本,并且加上“kqmaploadingtxt”类。
<div id="map" style="height: 100%;" class="loading"> <div class="kqmaploadingtxt">Loading...</div> </div>
导入导出
参考: setDrawOption
导出/导入Txt
可以设置draw选项来启用导出/导入txt功能。该设置必须在初始化mapview之前完成
config对象初始化完毕后,设置draw选项:
config.initAsync('', false, function () { config.setDrawOption({ dataFormatList: ['T'], importTxtFunction: function () { console.log('my importTxt!!!'); config._resetDrawImportFileHtml(); }, exportTxtFunction: function () { console.log('my exportTxt!!!'); }, }); });
如果正常,导出/导入工具条将会有“txt”模式。
当导出或导入按钮被点击时,将运行设置的函数。
导出/导入Excel
可以设置draw选项来启用导出/导入excel功能。
config对象初始化完毕后,设置draw选项:
config.initAsync('', false, function () { config.setDrawOption({ dataFormatList: ['E'], importExcelFunction: function () { console.log('my importExcel!!!'); config._resetDrawImportFileHtml(); }, exportExcelFunction: function () { console.log('my exportExcel!!!'); }, }); });
- 如果正常,导出/导入工具条将会有“excel”模式。
- 当导出或导入按钮被点击时,将运行设置的函数。
导出/导入Dwg,Dxf
可以设置draw选项来启用导出/导入Dwg,Dxf功能。
config对象初始化完毕后,设置draw选项:
config.initAsync('', false, function () { config.setDrawOption({ dataFormatList: ['D'], importExcelFunction: function () { console.log('my importDwgDxf!!!'); config._resetDrawImportFileHtml(); }, exportExcelFunction: function () { console.log('my exportDwgDxf!!!'); }, }); });
- 如果正常,导出/导入工具条将会有“dwg,dxf”模式。
- 当导出或导入按钮被点击时,将运行设置的函数。
导入后处理
可以设置draw选项来设置导入后处理函数。
config对象初始化完毕后,设置draw选项:
config.initAsync('', false, function () { config.setDrawOption({ onImportedFunction: function (geojson) { console.log('onImported!'); geojson.eachLayer(function (layer) { layer.bindPopup('Hello', { autoClose: false, closeOnClick: false, }); layer.openPopup(); }); }, }); });
- 如果正常,当GeoJSON和Shape导入完成后将执行该函数。
使用截图
能够截取当前地图的画面,可以保留UI或移除UI进行截图。 截图支持KqMapping,WMTS,Marker,GeoJSON等。
加入截图控件
在配置文件中启用截图功能
<control position="topright" type="screenshot"/>
功能说明
点击截图按钮可以截图。 点击显示按钮可以控制是否在截图时显示UI,一共有两种模式:保留UI或移除UI。
效果图
使用API
可以通过API进行地图截图。 截图对象的函数原型:doRectScreenShot(x, y, w, h),该函数可以截取当前地图上左上角为(x, y),宽w,高h的矩形范围。
参考以下代码:
var screenshot = KQ.Control.Manager.getInstance().getControl('screenshot');
screenshot.doRectScreenShot(100, 100, 400, 400);
效果图:
自定义图标
给Web控件添加图标
添加图标
使用 font awesome
Font Awesome是一个矢量图标库,它可以深度定制图标尺寸,颜色,阴影等效果。
PS: 常规的方式也不排斥。例如也可以通过定制css和图片来添加图标。
例子
基础图标
可以通过指定一个CSS前缀“fa”和图标的名字来放置一个Font Awesome图标。
<i class="fa fa-camera-retro"></i> fa-camera-retro
大号图标
使用“fa-lg (增大33%), fa-2x, fa-3x, fa-4x, fa-5x”这些类来增大图标尺寸。
<i class="fa fa-camera-retro fa-lg"></i> fa-lg
<i class="fa fa-camera-retro fa-2x"></i> fa-2x
<i class="fa fa-camera-retro fa-3x"></i> fa-3x
<i class="fa fa-camera-retro fa-4x"></i> fa-4x
<i class="fa fa-camera-retro fa-5x"></i> fa-5x
自定义框选
回调函数
可以设置框选按钮的回调函数。该设置必须在初始化mapview之前完成
在config.xml配置文件中添加框选按钮控件:<subcontrol type="rubber-band"/>
config对象初始化完毕后,设置rubberBand选项:
config.initAsync('', false, function () { // 设置框选按钮的回调函数 config.setRubberBandOption({rubberBandFunction: function (bounds) { // bounds 105.00828568080212,29.978604497692796,105.58946814211257,30.361803043687907 console.log('bounds ' + bounds.toBBoxString()); }}); });
查询
从服务器中查询图层的属性。
参考: InfoQuery
属性查询
在框选的范围内查询指定图层的属性。
var queryInfo = KQ.Query.InfoQuery.getInstance();
console.log(queryInfo);
try {
var options = {
url: 'http://172.16.1.157:8699/KQGis/rest/services/zy',
layerId: 145,
pageSize: '200',
geometry: '{"type":"Polygon","coordinates":[[[104.94105475249448,29.97276304931208],
[104.94105475249448,30.028839993667194],
[105.00551176529433,30.028839993667194],
[105.00551176529433,29.97276304931208],
[104.94105475249448,29.97276304931208]]]}',
fields: 'OBJECTID,XZBM,BSM,YSDM,JXLX,JXXZ,JXSM,BGRQ',
f: 'json',
where: '',
};
queryInfo.queryAsync(options,
function query_good () {
console.log('query_good');
var data = queryInfo.data();
console.log('data.length:' + data.length);
data.forEach(function (d) {
console.log(d.properties);
})
},
function query_error () {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
SQL 查询
从服务器中进行SQL查询。
参考: SqlQuery
var sql_query = KQ.Query.SqlQuery.getInstance();
console.log(sql_query);
try {
var options = {
url: 'http://172.16.1.157:8699/KQGis/rest/services/zy',
sql: "select distinct " + "XZBM" + " from " + "$$" + 145 + "$$",
};
sql_query.queryAsync(options,
function query_good () {
console.log('query_good');
var data = sql_query.data();
console.log('sql query data.length:' + data.length);
data.forEach(function (d) {
console.log(d.properties);
})
},
function query_error () {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
叠置分析
从服务器中进行叠置分析。
参考: OverlayAnalysis
var overlay_analysis = KQ.Query.OverlayAnalysis.getInstance();
console.log(overlay_analysis);
try {
var options = {
url: 'http://172.16.1.157:8699/KQGis/rest/services/zy',
layerId: 145,
pageSize: '200',
geometry: '{"type":"Polygon","coordinates":[[[104.94105475249448,29.97276304931208],[104.94105475249448,30.028839993667194],[105.00551176529433,30.028839993667194],[105.00551176529433,29.97276304931208],[104.94105475249448,29.97276304931208]]]}',
fields: 'OBJECTID,XZBM,BSM,YSDM,JXLX,JXXZ,JXSM,BGRQ',
f: 'json',
where: '',
};
overlay_analysis.queryAsync(options,
function query_good () {
console.log('query_good');
var data = overlay_analysis.data();
console.log('overlay analysis data.length:' + data.length);
data.forEach(function (d) {
console.log(d.properties);
})
},
function query_error () {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
图例查询
从服务器中进行图例信息的查询。
参考: LegendQuery
var legend_query = KQ.Query.LegendQuery.getInstance();
console.log(legend_query);
try {
var options = {
url: 'http://172.16.1.157:8699/KQGis/rest/services/zy',
layerId: 137,
};
legend_query.queryAsync(options,
function query_good () {
console.log('query_good');
var data = legend_query.data();
console.log('legend query data.length:' + data.length);
data.forEach(function (d) {
console.log(d.properties);
})
},
function query_error () {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
缓冲分析
从服务器中对给定的图形进行缓冲分析。
参考: BufferAnalysis
var buffer_analysis = KQ.Query.BufferAnalysis.getInstance();
console.log(buffer_analysis);
try {
var options = {
url: 'http://172.16.0.106:8699/KQGis/rest/services',
data: '{"type":"Polygon","coordinates":[[[104.94105475249448,29.97276304931208],[104.94105475249448,30.028839993667194],[105.00551176529433,30.028839993667194],[105.00551176529433,29.97276304931208],[104.94105475249448,29.97276304931208]]]}',
geoSRS: 'EPSG:4326',
outSRS: 'EPSG:4326',
sideType: 'outer',
radius: 10000.0,
};
buffer_analysis.queryAsync(options,
function query_good () {
console.log('query_good');
var data = buffer_analysis.data();
console.log('buffer analysis data.length:' + data.length);
data.forEach(function (d) {
console.log(d);
})
},
function query_error () {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
要素入库
从服务器中将给定的要素集导入到指定的图层中。
参考: FeatureImport
var feature_import = KQ.Query.FeatureImport.getInstance();
console.log(feature_import);
try {
var json_data = {
"type": "Feature",
"ID": "Feature1",
"geometry": {
"type": "Polygon",
"coordinates": [[[105.357937, 30.100403], [105.357937, 30.103263], [105.36324, 30.103263], [105.36324, 30.100403], [105.357937, 30.100403]]]
},
"properties": {
"BSM": 2075,
"BZ": " ",
"DJH": "5120210010110323000",
"DWXZ": "2",
"DZ": " ",
"FHDM": " ",
"FZMJ": 0.0,
"HYDM": " ",
"ISZY": " ",
"JDLH": " ",
"JZMD": 0.47000000000000005,
"JZMJ": 4343.61,
"JZRJL": 3.2600000000000004,
"JZWLX": " ",
"JZWZDMJ": 622.12,
"NZ": " ",
"OBJECTID": 200,
"QDJG": 0.0,
"QLR": "卫生局杨文礼等",
"QSDWDM": "512021001011",
"QSXZ": "20",
"QSXZMC": "国有土地使用权",
"SBDJ": 0.0,
"SCMJ": 0.0,
"SFFZ": 0,
"SM": " ",
"SYQLX": "2",
"SYQX": " ",
"SZTF": " ",
"TDJB": " ",
"TDYT": "071",
"TDZH": " ",
"TDZL": "学沟湾路242",
"TXDZ": " ",
"TXQL": " ",
"XDLH": "071",
"XZ": " ",
"YBDJH": "21-1-11-323",
"YSDJH": " ",
"YSDM": "16110000",
"YTDZH": " ",
"ZDID": 2075,
"ZDMJ": 1331.1860000000002,
"ZDTZM": " ",
"ZGBM": " ",
"ZLDWDM": "512021001000",
"ZZRQ": "2010/12/29"
}
};
var options = {
url: 'http://172.16.0.106:8699/KQGis/rest/services/zy',
layerId: 77,
forceImport: true,
data: JSON.stringify(json_data),
geoSRS: 'EPSG:4326',
};
feature_import.queryAsync(options,
function query_good() {
console.log('query_good');
var data = feature_import.data();
console.log('feature import data.length:' + data.length);
data.forEach(function (d) {
console.log(d.ID);
})
},
function query_error() {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
要素更新
从服务器中将给定的要素更新到指定的图层中。
参考: FeatureUpdate
var feature_update = KQ.Query.FeatureUpdate.getInstance();
console.log(feature_update);
try {
var json_data = {
"type": "Feature",
"ID": "Feature1",
"where": "objectid=21094",
"geometry": {
"type": "Polygon",
"coordinates": [[[105.357365, 30.09963], [105.357365, 30.100066], [105.363172, 30.100066], [105.363172, 30.09963], [105.357365, 30.09963]]]
},
"properties": {
"BSM": 2075,
"BZ": " ",
"DJH": "5120210010110323000",
"DWXZ": "2",
"DZ": " ",
"FHDM": " ",
"FZMJ": 0.0,
"HYDM": " ",
"ISZY": " ",
"JDLH": " ",
"JZMD": 0.47000000000000005,
"JZMJ": 4343.61,
"JZRJL": 3.2600000000000004,
"JZWLX": " ",
"JZWZDMJ": 622.12,
"NZ": " ",
"OBJECTID": 200,
"QDJG": 0.0,
"QLR": "卫生局杨文礼等",
"QSDWDM": "512021001011",
"QSXZ": "20",
"QSXZMC": "国有土地使用权",
"SBDJ": 0.0,
"SCMJ": 0.0,
"SFFZ": 0,
"SM": " ",
"SYQLX": "2",
"SYQX": " ",
"SZTF": " ",
"TDJB": " ",
"TDYT": "071",
"TDZH": " ",
"TDZL": "学沟湾路242",
"TXDZ": " ",
"TXQL": " ",
"XDLH": "071",
"XZ": " ",
"YBDJH": "21-1-11-323",
"YSDJH": " ",
"YSDM": "16110000",
"YTDZH": " ",
"ZDID": 2075,
"ZDMJ": 1331.1860000000002,
"ZDTZM": " ",
"ZGBM": " ",
"ZLDWDM": "512021001000",
"ZZRQ": "2010/12/29"
}
};
var options = {
url: 'http://172.16.0.106:8699/KQGis/rest/services/zy',
layerId: 77,
forceImport: true,
data: JSON.stringify(json_data),
geoSRS: 'EPSG:4326',
};
feature_update.queryAsync(options,
function query_good() {
console.log('query_good');
var data = feature_update.data();
console.log('feature update data.length:' + data.length);
data.forEach(function (d) {
console.log(d.ID);
})
},
function query_error() {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
要素删除
从服务器中删除指定的要素。
参考: FeatureDelete
var feature_delete = KQ.Query.FeatureDelete.getInstance();
console.log(feature_delete);
try {
var options = {
url: 'http://172.16.0.106:8699/KQGis/rest/services/zy',
layerId: 77,
where: 'objectid=21337',
};
feature_delete.queryAsync(options,
function query_good() {
console.log('query_good');
var data = feature_delete.data();
console.log('feature delete data.length:' + data.length);
data.forEach(function (d) {
console.log("Feature query count: " + d.querycount);
console.log("Feature delete count: " + d.deletecount);
})
},
function query_error() {
console.log('query_error');
});
}
catch (e) {
console.log('catch error:' + e);
}
结果:
投影转换
一个投影转换类,将一个坐标点由一种投影转换到另一种投影
正向转换
正向转换,将坐标点由源投影转换到目标投影
var sourProjection = 'PROJCS["NAD83 / Massachusetts Mainland",GEOGCS["NAD83",DATUM["North_American_Datum_1983"' +
',SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]]' +
',PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]]' +
',AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"]' +
',PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41]' +
',PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","26986"]' +
',AXIS["X",EAST],AXIS["Y",NORTH]]';
var destProjection = "+proj=gnom +lat_0=90 +lon_0=0 +x_0=6300000 +y_0=6300000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
var transform = new KQ.Projection.ProjectionTransform(sourProjection, destProjection);
// -2690666.297734447, 3662659.88545992
transform.transformForward([2,5]);
反向转换
反向转换,将坐标点由目标投影转换到源投影
var sourProjection = 'PROJCS["NAD83 / Massachusetts Mainland",GEOGCS["NAD83",DATUM["North_American_Datum_1983"' +
',SPHEROID["GRS 1980",6378137,298.257222101,AUTHORITY["EPSG","7019"]],AUTHORITY["EPSG","6269"]]' +
',PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]]' +
',AUTHORITY["EPSG","4269"]],UNIT["metre",1,AUTHORITY["EPSG","9001"]],PROJECTION["Lambert_Conformal_Conic_2SP"]' +
',PARAMETER["standard_parallel_1",42.68333333333333],PARAMETER["standard_parallel_2",41.71666666666667],PARAMETER["latitude_of_origin",41]' +
',PARAMETER["central_meridian",-71.5],PARAMETER["false_easting",200000],PARAMETER["false_northing",750000],AUTHORITY["EPSG","26986"]' +
',AXIS["X",EAST],AXIS["Y",NORTH]]';
var destProjection = "+proj=gnom +lat_0=90 +lon_0=0 +x_0=6300000 +y_0=6300000 +ellps=WGS84 +datum=WGS84 +units=m +no_defs";
var transform = new KQ.Projection.ProjectionTransform(sourProjection, destProjection);
// 1.9999999992433004, 4.999999960884452
transform.transfromInverse([-2690666.297734447, 3662659.88545992]);
预定义投影
投影转换类中预定义了一些投影
// 1 'EPSG:4326', 是下面投影的别名
// 'WGS84'
// 2 'EPSG:4269'
// 3 'EPSG:3857', 是下面投影的别名
// 'EPSG:3785'
// 'GOOGLE'
// 'EPSG:900913'
// 'EPSG:102113'
var transform = new KQ.Projection.ProjectionTransform('EPSG:4326', 'EPSG:3857');
// 12724930.992579103, 3570567.652113043
transform.transformForward([114.31, 30.52]);