POST
|
I consume ImageServer tiles from a partner's ArcGIS. Sometimes their ArcGIS server goes down or the permissions change after they republish, and it may be an hour or so before they resolve this. The problem is that the public will see the ArcGIS authentication dialog anytime the map is accessed (see screenshot). Here I create the ImageryTileLayer tlay. var layerUrl = someArcGISUrl + "/" + year + "/AERIAL_" + year + (year > 2002 ? "_RGB" : "_BW") + "/ImageServer"; var tlay = new ImageryTileLayer({ url: layerUrl, title: year }); I don't want the authentication dialog to display. I have not found a way to detect or prevent it. It would be great to have a property that disables showing such dialogs. Here I check for any errors, but "layerview-create-error" will be hit after the authentication dialog is cancelled. tlay.when("layerview-create-error", function(event) { console.info(event); }); prompt
... View more
04-15-2021
07:33 AM
|
0
|
2
|
953
|
POST
|
This sample shows you how to do that. https://developers.arcgis.com/javascript/latest/sample-code/view-disable-zoom/
... View more
04-13-2021
09:56 AM
|
0
|
0
|
2918
|
POST
|
Thank you, Rene! https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-TileLayer.html#loadError
... View more
04-06-2021
11:21 AM
|
0
|
0
|
2010
|
POST
|
I want to know if the basemap is the only map in the view when the entire view is done. - basemap--------Loaded - anothermap----Not loaded -- layers
... View more
02-12-2021
05:29 AM
|
0
|
0
|
2168
|
POST
|
I am loading two maps in a view. One map is the basemap "streets", and the other is from a 3rd party provider that is infrequently unavailable. How can I know if the "streets" basemap is the only map loaded in the view? Example const map = new Map({ basemap: "streets" }); const anothermap = new GroupLayer({ title: "Aerials", visible: true, visibilityMode: "exclusive", layers: tileServers }); map.add(anothermap); I only want to know if "anothermap" did not get loaded. I found this post by Robert S. but baseLayerViews is always 0. var view = new MapView({ map: map, [...] view.when(function () { // this is always 0 and it blows up // view.basemapView.baseLayerViews.getItemAt(0) watchUtils.whenFalse(view.basemapView.baseLayerViews.getItemAt(0), 'updating', (updating) => { if(view.stationary){ console.log('Done Updating'); } else { watchUtils.whenTrueOnce(view, "stationary", (still) => { console.log('Done Updating'); }); } }); [...]
... View more
02-11-2021
01:01 PM
|
0
|
3
|
2188
|
POST
|
Given the geometry query below, how would I enter the parts into the ArcGIS Utilities Geometry (GeometryServer) query shown in screenshot? ArcGIS GeometryServer query This is my json query {"geometry":{"spatialReference":{"latestWkid":3857,"wkid":102100},"rings":[[[-9187473.41276618,3188162.5654556816],[-9187434.9401002657,3188152.1212731851],[-9187437.0374417529,3188124.0742577673],[-9187478.3572086357,3188134.81423361],[-9187480.4803962763,3188136.4591659759],[-9187482.82138976,3188137.7757820026],[-9187485.32981364,3188138.7357496503],[-9187486.1791619044,3188139.3302621851],[-9187486.9202693515,3188140.0552431336],[-9187487.5333208945,3188140.8913085815],[-9187488.0019252859,3188141.8161045313],[-9187488.31355339,3188142.8049045876],[-9187488.4598731585,3188143.8312710673],[-9187488.4369724244,3188144.867761869],[-9187488.6253482066,3188149.8298659292],[-9187488.28674475,3188154.78398642],[-9187487.4249764085,3188159.674315393],[-9187486.0497509651,3188164.4457635083],[-9187484.1765602734,3188169.0445806137],[-9187473.41276618,3188162.5654556816]]]},"outFields":["OBJECTID","PARID","PAR_MAIL_LABEL1","PAR_MAIL_LABEL2","PAR_MAIL_LABEL3","PAR_MAIL_LABEL4","PAR_MAIL_LABEL5","PAR_MAIL_LABEL6"],"outSR":{"latestWkid":3857,"wkid":102100},"returnGeometry":true,"spatialRel":"esriSpatialRelIntersects"}
... View more
12-18-2020
11:57 AM
|
0
|
3
|
843
|
POST
|
Ok, Robert. Thanks you. I think it's sort of working for me with your instructions. As you can see from the screenshot, the buffer distance is started from the selection. I have further work to do, but it's looking a lot better. Maybe not a best approach. I can probably improve the feature layer query. The part that got it working was to convert the clicked point to a map point and then query my feature layer to get the geometry. view.on("click", function (event) { promiseUtils.eachAlways([ queryMapLayerViewFeatures(view.toMap(event)) .then(function (featureSet) { featureSet.features.forEach(function (feature) { queryPoint = feature; }); }) ]); } function queryMapLayerViewFeatures(mappoint) { const query = mapLayerView.layer.createQuery(); query.geometry = mappoint; query.units = "feet"; query.distance = bufferSize; query.outFields = ["*"]; return mapLayerView.queryFeatures(query); } function updateBufferGraphic(buffer) { if (buffer > 0) { var bufferGeometry = geometryEngine.geodesicBuffer( queryPoint.geometry, buffer, "feet" ); if (bufferLayer.graphics.length === 0) { bufferLayer.add( new Graphic({ geometry: bufferGeometry, symbol: sketchViewModel.polygonSymbol }) ); } else { bufferLayer.graphics.getItemAt(0).geometry = bufferGeometry; } } else { bufferLayer.removeAll(); } }
... View more
10-14-2020
02:32 PM
|
0
|
0
|
1291
|
POST
|
I have the query on the featurelayer. The parcels get selected but it's that the buffer is starting it's distance from the location of the point inside the boundary of the parcel. const query = mapLayerView.createQuery(); // query featureLayer query.geometry = sketchGeometry; // the point where clicked query.distance = bufferSize; query.units = "feet"; query.outFields = ["OBJECTID"]; query.spatialRelationship = "intersects"; return mapLayerView.queryObjectIds(query).then(highlightParcels);
... View more
10-14-2020
12:49 PM
|
0
|
0
|
1291
|
POST
|
Thanks, Robert. I am running a query on the sketchViewModel "create" event. The button is a point type and is set on the button's click handler. Are you saying to just select the area using something IdentifyTask? I am using GeometryEngine. function geometryButtonsClickHandler(event) { const geometryType = event.target.value; // "point" clearGeometry(); sketchViewModel.create(geometryType, {mode: "click"}); } sketchViewModel.on("create", function (event) { if (event.state === "complete") { sketchGeometry = event.graphic.geometry; runQuery(); } }); event.graphic.geometry function updateBufferGraphic(buffer) { if (buffer > 0) { var bufferGeometry = geometryEngine.geodesicBuffer( sketchGeometry, buffer, "feet" ); if (bufferLayer.graphics.length === 0) { bufferLayer.add( new Graphic({ geometry: bufferGeometry, symbol: sketchViewModel.polygonSymbol }) ); } else { bufferLayer.graphics.getItemAt(0).geometry = bufferGeometry; } } else { bufferLayer.removeAll(); } }
... View more
10-14-2020
09:04 AM
|
0
|
3
|
1291
|
POST
|
I am using a point widget to select an area on the map and highlight it. I then provide a geodesicBuffer to add distance in feet to query for intersecting areas. This is working, but the measurement is taken from the point when I need it taken from the bounding box. Is there a way on create to change the geometry type from a type point to a type rectangle? Point widget. Buffer distance needs to be from bounding box, not point. Polygon widget. Buffer selection is correct. // create a point widget button and add to view let button = document.createElement('button'); button.setAttribute("class","esri-widget--button esri-icon-map-pin geometry-button"); button.setAttribute("id","point-geometry-button"); button.setAttribute("value","point"); // add event to make selection on map document.getElementById("point-geometry-button").addEventListener("click", geometryButtonsClickHandler); // set the sketchviewmodel to a point function geometryButtonsClickHandler(event) { const geometryType = event.target.value; sketchViewModel.create(geometryType); } // how to change to type:"rectangle" ? sketchViewModel.on("create", function (event) { if (event.state === "complete") { sketchGeometry = event.graphic.geometry; //<---"point" } });
... View more
10-12-2020
02:40 PM
|
0
|
5
|
1354
|
POST
|
My expand widget height gets too big and looks really bad in responsive mode. For example, when I add a print widget to the expander and the browser width is resized the expanded content increases the height and snaps to the edge of the browser. This makes it difficult to see and even use the print export controls. I am looking for a way to keep the size of the expanded content equal size in either desktop or mobile. Is there CSS I can add to override this? Thanks! var printExpand = new Expand({ content: new Print({ view: view, printServiceUrl: printServiceUrl }), view: view, autoCollapse: true, expanded: false, expandTooltip: 'Print Map', group: "top-right" }); The expanded content here has good dimensions when not in responsive mode Responsive mode
... View more
10-09-2020
12:22 PM
|
0
|
2
|
1304
|
POST
|
I have a SketchViewModel for a graphics layer. When I add the layerView to it I need to change some styling at runtime. // create a featureLayer // const featureLayer = new FeatureLayer({ url: myurl }); map.add(featureLayer); // create a mapview and // var view = new MapView({ map: map / / other stuff here }); // Given this basic featureLayer example, I will wait for the layerView to be ready. // view.whenLayerView(featureLayer).then(function(layerView) { How would you go about accessing and changing the style for a LayerView without sifting through all the layers as in the example below? }); Is there a shorter way to get to the layerview style? // this is just an example of what I do not want to do // var maplayers = item.layer.parent.allLayers.filter(function (a) { return a.title === "my layer"; }); var style = maplayers.items[0].sublayers.items.filter(function (a) { // do my runtime styling work here });
... View more
10-08-2020
03:13 PM
|
0
|
0
|
316
|
POST
|
I am using a Slider widget and would like to have its value reset to zero when the clear button is clicked. I was hoping there was a property or method for this. I also noticed in the sample here that the slider doesn't reset to zero after the clear button is clicked. SceneLayerView - query statistics by geometry | ArcGIS API for JavaScript 4.17 Slider | ArcGIS API for JavaScript 4.17 <div aria-label="Slider value" aria-labelledby="bufferNum-label-0" aria-orientation="horizontal" aria-valuemax="500" aria-valuemin="0" aria-valuenow="72" aria-valuetext="72ft" class="esri-slider__anchor esri-slider__anchor-0 esri-slider__anchor--moved" id="bufferNum-handle-0" touch-action="none" role="slider" style="left: 14.40083%" tabindex="0"><span class="esri-slider__thumb" touch-action="none"></span><span class="esri-slider__label" id="bufferNum-label-0" touch-action="none">72ft</span></div> const bufferNumSlider = new Slider({ container: "bufferNum", min: 0, max: 500, steps: 1, visibleElements: { labels: true }, precision: 0, labelFormatFunction: function (value, type) { return value.toString() + "ft"; }, values: [0] }); bufferNumSlider.tickConfigs = [{ mode: "position", labelsVisible: true, values: [0, 250, 500] }]; // get user entered values for buffer bufferNumSlider.on( ["thumb-change", "thumb-drag"], bufferVariablesChanged );
... View more
10-08-2020
12:15 PM
|
0
|
1
|
2389
|
POST
|
What is available in the esri JS API 4.15+ to control map gestures on mobile devices? When using a pinch gesture to zoom while in fullscreen mode, such as an iPhone or iPad, the gesture is often ignored by the map and instead the browser is minimized. If you perform a pinch gesture slowly it sometimes does zooms in fullscreen mode, but the location of the map jumps to a random location on the globe, e.g., the middle of the ocean.
... View more
09-25-2020
07:39 AM
|
0
|
0
|
484
|
Title | Kudos | Posted |
---|---|---|
1 | 03-18-2024 08:18 AM | |
1 | 01-08-2024 07:24 AM | |
3 | 12-30-2022 11:36 AM | |
1 | 03-13-2023 07:40 AM | |
1 | 02-21-2023 10:25 AM |
Online Status |
Offline
|
Date Last Visited |
Wednesday
|