-
Glenn Vorhes authoredGlenn Vorhes authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
layers_LayerBaseVector.js.html 12.93 KiB
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>JSDoc: Source: layers/LayerBaseVector.js</title>
<script src="scripts/prettify/prettify.js"> </script>
<script src="scripts/prettify/lang-css.js"> </script>
<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
<link type="text/css" rel="stylesheet" href="styles/jsdoc-default.css">
</head>
<body>
<div id="main">
<h1 class="page-title">Source: layers/LayerBaseVector.js</h1>
<section>
<article>
<pre class="prettyprint source linenums"><code>import $ from '../jquery/jquery';
import LayerBase from './LayerBase';
import mapMove from '../olHelpers/mapMove';
import provide from '../util/provide';
import ol from '../ol/ol';
const nm = provide('layers');
/**
* The make mapMoveGetParams function takes the extent and the zoom level
* context is 'this' object, probably want to do something with this.mapMoveParams
* @callback mapMoveMakeGetParams
* @param {LayerBaseVector} lyr
* @param {object} extent
* @param {number} extent.minX
* @param {number} extent.minY
* @param {number} extent.maxX
* @param {number} extent.maxY
* @param {number} zoomLevel
*/
/**
* The Vector layer base
* @augments LayerBase
* @abstract
*/
class LayerBaseVector extends LayerBase {
/**
* The base vector layer
* @param {string} url - pass an empty string to prevent default load and add from a json source
* @param {object} options - config
* @param {string} [options.id] - layer id
* @param {string} [options.name=Unnamed Layer] - layer name
* @param {number} [options.opacity=1] - opacity
* @param {boolean} [options.visible=true] - default visible
* @param {number} [options.minZoom=undefined] - min zoom level, 0 - 28
* @param {number} [options.maxZoom=undefined] - max zoom level, 0 - 28
* @param {object} [options.params={}] the get parameters to include to retrieve the layer
* @param {number} [options.zIndex=0] the z index for the layer
* @param {function} [options.loadCallback] function to call on load, context this is the layer object
* @param {boolean} [options.legendCollapse=false] if the legend item should be initially collapsed
* @param {boolean} [options.legendCheckbox=true] if the legend item should have a checkbox for visibility
* @param {boolean} [options.legendContent] additional content to add to the legend
*
* @param {boolean} [options.autoLoad=false] if the layer should auto load if not visible
* @param {object} [options.style=undefined] the layer style, use openlayers default style if not defined
* @param {boolean} [options.onDemand=false] if the layer should be loaded by extent on map move
* @param {number} [options.onDemandDelay=300] delay before the map move callback should be called
* @param {mapMoveMakeGetParams} [options.mapMoveMakeGetParams=function(lyr, extent, zoomLevel){}] function to create additional map move params
* @param {MapMoveCls} [options.mapMoveObj=mapMove] alternate map move object for use with multi map pages
*
*/
constructor(url, options) {
super(url, options);
//prevent regular load if no url has been provided
if (this.url.trim() == '') {
this._loaded = true;
}
this._style = typeof options.style == 'undefined' ? undefined : options.style;
if (this.visible) {
this._autoLoad = true;
} else {
this._autoLoad = (typeof options['autoLoad'] == 'boolean' ? options['autoLoad'] : false);
}
this._onDemand = typeof options.onDemand == 'boolean' ? options.onDemand : false;
this._onDemandDelay = typeof options.onDemandDelay == 'number' ? options.onDemandDelay : 300;
if (options.mapMoveObj){
this._mapMove = options.mapMoveObj;
} else {
this._mapMove = this._onDemand ? mapMove : undefined;
}
this._mapMoveMakeGetParams = typeof options.mapMoveMakeGetParams == 'function' ? options.mapMoveMakeGetParams :
function(lyr, extent, zoomLevel){
return {};
};
if (this._onDemand) {
this._loaded = true;
this._mapMoveParams = {};
this._mapMove.checkInit();
this._mapMove.addVectorLayer(this);
}
this._source = new ol.source.Vector();
/**
*
* @type {ol.layer.Vector|ol.layer.Base}
*/
this._olLayer = new ol.layer.Vector(
{
source: this._source,
visible: this.visible,
style: this.style,
minResolution: this._minResolution,
maxResolution: this._maxResolution,
zIndex: this._zIndex
}
);
}
/**
* dummy to be overridden
* @param {object} featureCollection - geojson or esrijson object
*/
addFeatures(featureCollection) {
console.log('Layer vector base addFeatures is a placeholder and does nothing');
}
/**
* Before call to map move callback, can prevent call by returning false
* @param {number} zoom - zoom level
* @param {string} [evtType=undefined] undefined for initial load, otherwise one of 'change:center', 'change:resolution'
* @returns {boolean} if the call should proceed
*/
mapMoveBefore(zoom, evtType) {
if (this.minZoom !== undefined) {
if (zoom < this.minZoom) {
return false;
}
}
if (this.maxZoom !== undefined) {
if (zoom > this.maxZoom) {
return false;
}
}
return this.visible;
}
/**
* callback to generate the parameters passed in the get request
* @param {object} extent - extent object
* @param {number} extent.minX - minX
* @param {number} extent.minY - minY
* @param {number} extent.maxX - maxX
* @param {number} extent.maxY - maxY
* @param {number} zoomLevel - zoom level
*/
mapMoveMakeGetParams(extent, zoomLevel) {
this._mapMoveParams = {};
$.extend(this._mapMoveParams, this.params);
$.extend(this._mapMoveParams, this._mapMoveMakeGetParams(this, extent, zoomLevel));
}
/**
* callback function on map move
* @param {object} d - the json response
*/
mapMoveCallback(d) {
if (this.source) {
this._source.clear();
}
}
/**
* clear features in the layer
*/
clear() {
if (this._source) {
this._source.clear();
}
}
/**
* get on demand delay in miliseconds
* @type {number|*}
*/
get onDemandDelay() {
return this._onDemandDelay;
}
/**
* get if the layer is autoloaded
* @type {boolean}
*/
get autoLoad() {
return this._autoLoad;
}
/**
* get the style definition
* @type {ol.Style|styleFunc}
*/
get style() {
return this._style;
}
/**
* set the style
* @param {ol.Style|styleFunc} style - the style or function
*/
set style(style) {
this._style = style;
this.olLayer.setStyle(this._style);
}
/**
* get the map CRS if it is defined by the map move object
* @type {string|*}
*/
get mapCrs() {
if (this._mapMove) {
return this._mapMove.map.getView().getProjection().getCode();
} else {
return undefined;
}
}
/**
* get the map move object
* @type {MapMoveCls|*}
*/
get mapMove() {
return this._mapMove;
}
/**
* map move params
* @type {object}
*/
get mapMoveParams() {
return this._mapMoveParams;
}
/**
* Get the layer visibility
* @type {boolean}
*/
get visible() {
return super.visible;
}
/**
* Set the layer visibility
* @type {boolean}
* @override
*/
set visible(visibility) {
super.visible = visibility;
if (this._onDemand) {
this.mapMove.triggerLyrLoad(this);
}
}
/**
* get the layer vector source
* @override
* @type {ol.source.Vector}
*/
get source(){
return super.source;
}
/**
* array of ol features
* @type {Array.<ol.Feature>}
*/
get features(){
return this.source.getFeatures();
}
/**
*
* @returns {ol.layer|Vector|ol.layer.Base|undefined} the ol layer
*/
get olLayer(){
return super.olLayer;
}
}
nm.LayerBaseVector = LayerBaseVector;
export default LayerBaseVector;
</code></pre>
</article>
</section>
</div>
<nav>
<h2><a href="index.html">Home</a></h2><h3>Classes</h3><ul><li><a href="-_FeatureLayerProperties.html">_FeatureLayerProperties</a></li><li><a href="-_Slider.html">_Slider</a></li><li><a href="CommonSymbol.html">CommonSymbol</a></li><li><a href="DayRange.html">DayRange</a></li><li><a href="ItsLayerCollection.html">ItsLayerCollection</a></li><li><a href="LayerBase.html">LayerBase</a></li><li><a href="LayerBaseVector.html">LayerBaseVector</a></li><li><a href="LayerBaseVectorEsri.html">LayerBaseVectorEsri</a></li><li><a href="LayerBaseVectorGeoJson.html">LayerBaseVectorGeoJson</a></li><li><a href="LayerBaseXyzTile.html">LayerBaseXyzTile</a></li><li><a href="LayerEsriMapServer.html">LayerEsriMapServer</a></li><li><a href="LayerEsriTile.html">LayerEsriTile</a></li><li><a href="LayerGroup.html">LayerGroup</a></li><li><a href="LayerItsInventory.html">LayerItsInventory</a></li><li><a href="LayerLegend.html">LayerLegend</a></li><li><a href="LayerRealEarthTile.html">LayerRealEarthTile</a></li><li><a href="LayerSwipe.html">LayerSwipe</a></li><li><a href="LayerVectorRealEarth.html">LayerVectorRealEarth</a></li><li><a href="MapInteractionBase.html">MapInteractionBase</a></li><li><a href="MapMoveCls.html">MapMoveCls</a></li><li><a href="MapPopupCls.html">MapPopupCls</a></li><li><a href="RealEarthAnimate.html">RealEarthAnimate</a></li><li><a href="RealEarthAnimateTile.html">RealEarthAnimateTile</a></li><li><a href="RealEarthAnimateVector.html">RealEarthAnimateVector</a></li><li><a href="SingleSymbol.html">SingleSymbol</a></li><li><a href="Sliders.html">Sliders</a></li><li><a href="SortedFeatures.html">SortedFeatures</a></li><li><a href="UniqueValueSymbol.html">UniqueValueSymbol</a></li></ul><h3>Global</h3><ul><li><a href="global.html#$">$</a></li><li><a href="global.html#bundleEs2015Multiple">bundleEs2015Multiple</a></li><li><a href="global.html#dateToYyyyMmDdHh000">dateToYyyyMmDdHh000</a></li><li><a href="global.html#dateToYyyyMmDdHhMmSs">dateToYyyyMmDdHhMmSs</a></li><li><a href="global.html#definedAndNotNull">definedAndNotNull</a></li><li><a href="global.html#defineLegend">defineLegend</a></li><li><a href="global.html#defineStyle">defineStyle</a></li><li><a href="global.html#getUrlParams">getUrlParams</a></li><li><a href="global.html#gulp">gulp</a></li><li><a href="global.html#hexAlphaToRgbOrRgba">hexAlphaToRgbOrRgba</a></li><li><a href="global.html#htmlEscape">htmlEscape</a></li><li><a href="global.html#keyValPairs">keyValPairs</a></li><li><a href="global.html#makeBlueGreenRedGradient">makeBlueGreenRedGradient</a></li><li><a href="global.html#makeBlueGreenRedGradientZScore">makeBlueGreenRedGradientZScore</a></li><li><a href="global.html#makeFeatureServiceLegendAndSymbol">makeFeatureServiceLegendAndSymbol</a></li><li><a href="global.html#makeGuid">makeGuid</a></li><li><a href="global.html#makeMapServiceLegend">makeMapServiceLegend</a></li><li><a href="global.html#mapServiceLegendItem">mapServiceLegendItem</a></li><li><a href="global.html#offsetMinutes">offsetMinutes</a></li><li><a href="global.html#overflowScroll">overflowScroll</a></li><li><a href="global.html#processLessFile">processLessFile</a></li><li><a href="global.html#propertiesZoomStyle">propertiesZoomStyle</a></li><li><a href="global.html#provide">provide</a></li><li><a href="global.html#quickMap">quickMap</a></li><li><a href="global.html#quickMapBase">quickMapBase</a></li><li><a href="global.html#quickMapMulti">quickMapMulti</a></li><li><a href="global.html#resolutionToZoom">resolutionToZoom</a></li><li><a href="global.html#responsiveScroll">responsiveScroll</a></li><li><a href="global.html#rgb2hex">rgb2hex</a></li><li><a href="global.html#rgbToRgba">rgbToRgba</a></li><li><a href="global.html#triggerCallback">triggerCallback</a></li><li><a href="global.html#undefinedOrNull">undefinedOrNull</a></li><li><a href="global.html#windowScroll">windowScroll</a></li><li><a href="global.html#zoomToResolution">zoomToResolution</a></li></ul>
</nav>
<br class="clear">
<footer>
Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.4.0</a> on Thu Jun 23 2016 08:20:56 GMT-0500 (Central Daylight Time)
</footer>
<script> prettyPrint(); </script>
<script src="scripts/linenumber.js"> </script>
</body>
</html>