IDEA
|
When running basic topology checks it would be nice to be able to script exceptions. If I set a no dangles rule on a road network every cul-de-sac will be an error. If it was possible to take that error point, search for features in a set distance to decide if its actually a dangle or just the end of a road, and mark as exception it would be great. No pseudo nodes has the same issue. There are all sorts of reasons for pseudo nodes in a road network such as name, ownership, surface type, or speed limit changes that all are reasons for a non intersection break in the line that could be resolved by comparing attributes between offending features and automatically marking them as exceptions.
... View more
07-27-2020
09:00 AM
|
1
|
0
|
893
|
POST
|
I actually figured out another way to do it. By feeding the promises returned by the query execution to a list and then that list into Promise.all you can make the script wait for those promises to resolve. In this case they resolve into the results objects and I could combine the results.features arrays, sort the array, and build out the menu. It blocks the code but the queries come back quick enough you don't notice. var queryTask = new QueryTask({
url: "https://gis.baycountyfl.gov/arcgis/rest/services/ElevationCertificates/MapServer/0"
});
var query = new Query();
query.returnGeometry = true;
query.outFields = ["DateIssued","Address","OBJECTID"];
query.where = "1=1";
query.outSpatialReference = 3857;
query.num = 1000;
var certificates = [];
var promises = []
queryTask.executeForCount(query).then((count) => {
for (var step=0; step < count; step += 1000){
query.start = step;
promises.push(queryTask.execute(query))
}
}).then(() => {
Promise.all(promises).then((results) => {
for (var i=0; i < results.length; i++){
certificates = certificates.concat(results[i].features);
}
certificates.sort((a, b) => (a.attributes.DateIssued > b.attributes.DateIssued) ? 1 : (a.attributes.DateIssued === b.attributes.DateIssued) ? ((a.attributes.Address > b.attributes.Address) ? 1 : -1) : -1 );
for (var i=0; i < certificates.length; i++) {
let recordDate = new Date(certificates[i].attributes.DateIssued);
let recordYear = recordDate.getFullYear()
if (!$("#content" + recordYear).length){
$("#addressListDiv").append('<button type="button" class="collapsible" id="button' + recordYear + '">' + recordYear + '</button>');
$("#addressListDiv").append('<div class="content" id="content' + recordYear + '"></div>');
$("#button" + recordYear).on("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
let OBJECTID = certificates[i].attributes.OBJECTID
let address = certificates[i].attributes.Address
$("#content" + recordYear).append('<p class="address" id="' + OBJECTID + '">' + address + '</p>')
let center = certificates[i].geometry;
$("#" + OBJECTID).on("click", function(){
view.center = center;
view.zoom = 18;
})
}
})
})
... View more
06-22-2020
05:52 AM
|
1
|
1
|
1268
|
POST
|
That would be the easiest but hard coding in the second query would not allow for growth beyond 2000 records in the table which will eventually happen. I feel like the menu is a bit unwieldy with so many items in it but that's how they want it built. Looking at the browser console I didnt realize that a featureset.features is just an array. Ill just concat the resulting arrays into a new one and then write a custom sort.
... View more
06-19-2020
06:34 AM
|
0
|
3
|
1268
|
POST
|
I have a map with a slide out panel that houses a list of elevation certificates, the certificates are grouped into collapsing menus by year issued. My problem is that to build the menu out takes two queries since there are 1755 records. Being asynchronous by design JS does both in quick succession and builds out my menu in the order the queries come back. That means it may start with the second batch first. How can I make it do the first then the second? I'm already using execute(). then(). If I cant do it with the query logic but can combine the two feature sets somehow I could sort that and then build off the master feature set but I don't see how to do that either. If there is a better way to page through the feature class than using the start parameter of the query I'm open to completely reformulating this. var queryTask = new QueryTask({
url: "https://gis.baycountyfl.gov/arcgis/rest/services/ElevationCertificates/MapServer/0"
});
var query = new Query();
query.returnGeometry = true;
query.outFields = ["DateIssued","Address","OBJECTID"];
query.where = "1=1";
query.orderByFields = ["DateIssued"];
query.outSpatialReference = 3857;
query.num = 1000;
queryTask.executeForCount(query).then(function(count){
for (var step=0; step < count; step += 1000){
query.start = step;
queryTask.execute(query).then(function(results){
for (var i=0; i < results.features.length; i++) {
let recordDate = new Date(results.features[i].attributes.DateIssued);
let recordYear = recordDate.getFullYear()
if (!$("#content" + recordYear).length){
$("#addressListDiv").append('<button type="button" class="collapsible" id="button' + recordYear + '">' + recordYear + '</button>');
$("#addressListDiv").append('<div class="content" id="content' + recordYear + '"></div>');
$("#button" + recordYear).on("click", function() {
this.classList.toggle("active");
var content = this.nextElementSibling;
if (content.style.display === "block") {
content.style.display = "none";
} else {
content.style.display = "block";
}
});
}
let OBJECTID = results.features[i].attributes.OBJECTID
let address = results.features[i].attributes.Address
$("#content" + recordYear).append('<p class="address" id="' + OBJECTID + '">' + address + '</p>')
let center = results.features[i].geometry;
$("#" + OBJECTID).on("click", function(){
view.center = center;
view.zoom = 18;
})
}
})
}
})
});
... View more
06-18-2020
02:18 PM
|
0
|
6
|
1370
|
POST
|
Is there any movement on this yet? I'm curious if an amped up "Smart Editor" style form widget & map combo in Experience Builder wouldn't be as efficient and just supersede the need for the GeoForm.
... View more
06-17-2020
10:42 AM
|
0
|
0
|
682
|
POST
|
VSCode doesnt like the default Pro environment for some reason. Esri might have a solution they could offer but if you go into the Python settings in Pro and clone the default environment then open VSCode the cloned environment shows up. No idea why it does this. It can get messed up when Pro updates, you may have to delete the clone and re-clone. I just went through this.
... View more
05-06-2020
09:37 AM
|
1
|
0
|
3772
|
POST
|
I have a task where a step lets the user input a handful of attributes. Even though all the attributes are nullable the task is still making all of them required in order to go to the next step. Anyone know where the option to make them not required is? Im sure Im just missing something.
... View more
11-21-2019
01:09 PM
|
0
|
0
|
400
|
POST
|
I always forget about sdeintercept. When I connect as the sde user, all the feature classes are owned by sde, I can edit anything. I removed db_datareader and db_datawriter from my domain user in the database and tried to connect with an sdeintercept set up. When I add a feature class from a dataset I can edit the contents of the dataset is recorded in the output as "User Privileges: SELECT, UPDATE, INSERT, DELETE" but when I add something from a dataset I am blocked from editing only "User Privileges: SELECT" is recorded for the data. I checked and do have full privileges for both datasets. I will open a support ticket in the morning on this.
... View more
10-09-2019
01:50 PM
|
0
|
0
|
2942
|
POST
|
I am having this exact issue right now with a 10.7 EGDB on SQLServer. The error affects all the feature classes in certain feature datasets but not all of them. Users with full privileges can view data but are given an error that there is no editable data. A quick fix I have just tried is to make the database users members of db_datareader and db_datawriter but if there is a better fix I would like to implement it.
... View more
10-08-2019
01:56 PM
|
0
|
2
|
2942
|
IDEA
|
When concatenating strings with Arcade it would be nice to be able to ignore Null values. Another option would be a filter function as in Python so an input list is returned without the filtered values.
... View more
10-03-2019
12:09 PM
|
3
|
0
|
488
|
IDEA
|
When concatenating strings with Arcade it would be nice to be able to ignore Null values. Another option would be a filter function as in Python so an input list is returned without the filtered values.
... View more
10-03-2019
12:09 PM
|
7
|
0
|
694
|
IDEA
|
You could probably go in an make that change in the widget code pretty easily but you then have to remember to propagate it to every new version of WAB as you upgrade your apps which is a pain. And its only an option if you're using WAB Developer Edition anyways.
... View more
10-03-2019
11:13 AM
|
0
|
0
|
674
|
IDEA
|
The replica object in ArcPy cant tell you if the last data message was acknowledged or not. It only tells you data message import and export date stamps and, in Pro only, if the replica is currently the data sender. Scripting a disconnected sync over FTP I need to know if I need to look for an acknowledgement file on the FTP or not in the script. I cant tell from the GDB_REPLICALOG table in the database if the acknowledgement has been received or not so I cant just query that.
... View more
08-09-2019
01:32 PM
|
1
|
0
|
678
|
POST
|
I have a local EGDB and a replica of it on AWS and am pretty much beyond caring about geodata anymore. I've had a ticket open for a month trying to get a geodata service to sync the two databases and so far we've got nothing to show for it. If I treat this as disconnected and trade message XMLs over FTP do I have to follow the pattern below? Parent: export delta Child: import delta Child: export acknowledgement Child: export delta Parent: import acknowledgement Parent: import delta Parent: export acknowledgment Child: import acknowledgment Or can I just swap delta files back and forth? Once I import a delta message from AWS to the local DB and then export a delta message to send back to AWS does that message include the acknowledgement for the import I just did? I can program it to do that whole pattern but if I can just trade delta files and ignore the acknowledgements that would be much easier to do as a scheduled task. Also is there a way with python or a SQL query (I'll make the query directly against the database from pyodbc in script if I need to) to see if the database is the receiver or the sender for a replica at any given moment? The arcpy replica object will tell you the last time it sent or received changes but not if those were acknowledged.
... View more
08-08-2019
12:37 PM
|
0
|
0
|
478
|
IDEA
|
I will download the latest version of WAB Developer, update/import my apps from the previous version, and then export the new versions to update what is on our web server. It would be nice to be able to select several apps to export at the same time rather than exporting each individually.
... View more
05-09-2019
12:15 PM
|
0
|
0
|
336
|
Title | Kudos | Posted |
---|---|---|
1 | 05-06-2020 09:37 AM | |
3 | 02-28-2018 01:53 PM | |
1 | 02-13-2017 12:19 PM | |
1 | 06-22-2020 05:52 AM | |
8 | 01-23-2019 11:02 AM |
Online Status |
Offline
|
Date Last Visited |
04-13-2021
10:23 AM
|