///////////////////////////////////////////////////////////////////////////
|
// Copyright © 2014 - 2018 Esri. All Rights Reserved.
|
//
|
// Licensed under the Apache License Version 2.0 (the "License");
|
// you may not use this file except in compliance with the License.
|
// You may obtain a copy of the License at
|
//
|
// http://www.apache.org/licenses/LICENSE-2.0
|
//
|
// Unless required by applicable law or agreed to in writing, software
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
// See the License for the specific language governing permissions and
|
// limitations under the License.
|
///////////////////////////////////////////////////////////////////////////
|
|
define(['dojo/_base/declare',
|
'dojo/_base/lang',
|
'dojo/_base/html',
|
'dojo/on',
|
'dojo/Deferred',
|
'dijit/_WidgetBase',
|
'dojo/Evented',
|
'esri/geometry/Extent',
|
'jimu/portalUrlUtils',
|
"esri/dijit/Search",
|
'jimu/dijit/LoadingShelter',
|
'jimu/utils'
|
],
|
function(declare, lang, html, on, Deferred, _WidgetBase,
|
Evented, Extent, portalUrlUtils, Search,
|
LoadingShelter, jimuUtils) {
|
/* global esriConfig */
|
|
return declare([_WidgetBase, Evented], {
|
baseClass: 'jimu-extent-chooser',
|
declaredClass: 'jimu.dijit.ExtentChooser',
|
|
//portalUrl: String
|
// the portalUrl of webmap. Such as 'http://www.arcgis.com'.
|
portalUrl: null,
|
|
//itemId: String
|
// the webmap item id. For now, we only support webmap
|
itemId: null,
|
|
initExtent: null,
|
//bingMapsKey: String
|
// required if working with Microsoft Bing Maps
|
bingMapsKey: '',
|
|
geometryServiceURL: null,
|
|
shelter: null,
|
|
postCreate:function(){
|
this.inherited(arguments);
|
|
if(!this.geometryServiceURL){
|
if(esriConfig.defaults.geometryService){
|
this.geometryServiceURL = esriConfig.defaults.geometryService.url;
|
}
|
}
|
|
if(!this.geometryServiceURL){
|
var servicesObj = jimuUtils.getServices();
|
this.geometryServiceURL = servicesObj.geometryService;
|
}
|
|
this.shelter = new LoadingShelter({
|
hidden: true
|
});
|
this.shelter.placeAt(this.domNode);
|
this.shelter.startup();
|
this.shelter.show();
|
|
var mapNode = html.create('div', {
|
style: {
|
width: '100%',
|
height: '100%'
|
}
|
}, this.domNode);
|
this.search = html.create('div', {
|
style: {
|
position: "absolute",
|
right: 0,
|
top: 0
|
}
|
}, mapNode);
|
|
if(!this.portalUrl || !this.itemId){
|
return;
|
}
|
|
this.portalUrl = portalUrlUtils.getStandardPortalUrl(this.portalUrl);
|
|
var args = {
|
geometryServiceURL: this.geometryServiceURL,
|
bingMapsKey: this.bingMapsKey
|
};
|
|
if(this.initExtent){
|
if(this.initExtent.declaredClass !== "esri.geometry.Extent"){
|
this.initExtent = new Extent(this.initExtent);
|
}
|
args.mapOptions = {
|
extent:this.initExtent
|
};
|
}
|
if(this.lods){
|
if(typeof args.mapOptions === 'object'){
|
args.mapOptions.lods = this.lods;
|
}else{
|
args.mapOptions = {
|
lods: this.lods
|
};
|
}
|
}
|
|
var mapDeferred = jimuUtils.createWebMap(this.portalUrl, this.itemId, mapNode, args);
|
|
mapDeferred.then(lang.hitch(this, function(response) {
|
this.map = response.map;
|
this.map.webMapResponse = response;
|
this.own(on(this.map, 'extent-change', lang.hitch(this, function(evt){
|
this.onExtentChange(evt.extent);
|
})));
|
|
var search = new Search({
|
map: this.map,
|
enableLabel: false
|
}, this.search);
|
search.startup();
|
this.own(on(search, 'search-results', lang.hitch(this, function (evt) {
|
if (evt && evt.results && evt.results[0] &&
|
evt.results[0][0] && evt.results[0][0].extent) {
|
this.onExtentChange(evt.results[0][0].extent);
|
}
|
})));
|
|
if(!this.initExtent){
|
this.onExtentChange(this.map.extent); // send map default extent
|
}else {
|
this.onExtentChange(this.initExtent);
|
}
|
this.shelter.hide();
|
this.emit('map-load', this.map);
|
}), lang.hitch(this, function(err){
|
console.error(err);
|
}));
|
},
|
|
getExtent: function(){
|
return this.map && this.map.extent;
|
},
|
|
setExtent: function(extent){
|
if(this.map){
|
return this.map.setExtent(extent);
|
}
|
else{
|
var def = new Deferred();
|
setTimeout(lang.hitch(this, function(){
|
def.reject('map is null.');
|
}), 0);
|
return def;
|
}
|
},
|
|
restoreToDefaultWebMapExtent:function(){
|
jimuUtils.restoreToDefaultWebMapExtent(this.map,
|
this.map.webMapResponse,
|
this.geometryServiceURL);
|
},
|
|
onExtentChange: function(extent){
|
this.emit('extent-change', extent);
|
}
|
|
});
|
});
|