Trying to set the initial extent of map with same extent of a existing Feature Layer.
Code:
var featureLayer = new FeatureLayer("http://server/arcgis/rest/services/MyService/0", { mode: FeatureLayer.MODE_ONDEMAND, outFields: ["*"] }); featureLayer.on("load", function(e) { var initialExtent = featureLayer.fullExtent; map = new Map('map-view', { basemap: "streets", extent: initialExtent }); }
This don't work, and I have the following error on console:
Map: Geometry (wkid: 31982) cannot be converted to spatial reference of the map (wkid: 102100)
The Feature Layer was using the Spatial Reference wkid 31982.
Why the map have the Spatial Reference wkid 102100?
This is the only feature layer existing on code, and I "loaded" the Feature Layer before initialize the map, so, until I initialize the map, map = null
What I need to do for the map start up with the same extent of the feature layer?
Solved! Go to Solution.
You can use a GeometryService to project the extent of your service into the Web Mercator projection of the map.
You can use a GeometryService to project the extent of your service into the Web Mercator projection of the map.
Thanks Ken Buja
I have made the following code if anybody need (can be optimized):
// Geometry Service var gs = new GeometryService("https://server/arcgis/rest/services/Utilities/Geometry/GeometryServer"); // wkid of map and feature layer var map_wkid = map.extent.spatialReference.wkid; var feature_wkid = featureLayer.fullExtent.spatialReference.wkid; // if wkid of map and feature layer is different, project if (map_wkid != feature_wkid) { // get the map spatialReference var sr = new SpatialReference(map_wkid); // project var project = gs.project([featureLayer.fullExtent], sr); // anonymous functions (success and error) // success project.then(function(result) { // if a map exist, destroy first if (map) { map.destroy(); // create a new map with extent of feature layer map = new Map("map-view", { extent: result[0], basemap: "topo", }); // add the feature layer map.addLayers([featureLayer]); } // error }, function(err) { console.log('error'); console.log(err); }); }