POST
|
Does anyone else maintain their zoning data in the parcel fabric? Zoning can't be just an attribute in my county because we sadly have many instances of parcels that have multiple zonings. Currently, our zoning layer is a separate layer from our parcel data. So every time a parcel changes, they become slightly out of sync. This means constantly performing topology checks to keep everything in line and in sync. I had the thought of adding the layer to the fabric so that everything would stay in sync. It would take a lot of work to make this happen, so I wanted to check and see if anyone else had tried something similar first.
... View more
|
2
|
1
|
105
|
POST
|
Does this still work for you? It does hide some fields, however the problem is that it hides fields that have data in it it as well. Here is a sample popup from our data: Here is a screenshot of the selected feature's attribute table: As you can see, there are several additional attributes that are populated, but are not shown in the popup.
... View more
a week ago
|
0
|
0
|
60
|
POST
|
Odd. It should output a table that looks like this in the console: There are a couple of things you can try. If you change the ITEM_TYPES variable to 'ITEM_TYPES = ["*"]', it will scan ALL items in your organization. Granted, it will take a good bit longer, but it will scan everything. Another option is to run the script below. This will basically scan the target organization and list all items with it, as well as what their "ITEM_TYPE" is. You can then use that to fill out the "ITEM_TYPE" variable in the original script. It will also output an Excel file named "AGOL_Item_Types.csv" to your default directory. Hope this helps! Let me know if I can help in any way! """
AGOL Inventory with live progress: lists ITEM_TYPE for all org items,
prints each item as it is processed, and writes a CSV + summary.
"""
import os, sys, csv
from datetime import datetime
from arcgis.gis import GIS
# --- CONFIG ---
ORG_URL = "YourORGHere.arcgis.com"
USERNAME = "YOURUSERNAME"
PASSWORD = "AGOL_PASSWORD"
MAX_ITEMS = 10000
OUTPUT_CSV = "AGOL_Item_Types_Inventory.csv"
# Progress controls
SHOW_PROGRESS = True # set False to silence per-item prints
PROGRESS_EVERY = 1 # print every N items (1 = every item)
CSV_FIELDS = [
"id","title","owner","type","typeKeywords",
"created_utc","modified_utc","url","numViews","size"
]
def utc_ms_to_iso(ms):
try:
return datetime.utcfromtimestamp(ms/1000.0).isoformat() + "Z"
except Exception:
return ""
def main():
if not PASSWORD:
print("ERROR: AGOL_PASSWORD environment variable not found.")
sys.exit(1)
print(f"→ Connecting to {ORG_URL} as {USERNAME} …")
try:
gis = GIS(ORG_URL, USERNAME, PASSWORD)
print("✔ Connected.\n")
except Exception as e:
print(f"✖ Failed to connect: {e}")
sys.exit(1)
print(f"→ Searching org for ALL items (max_items={MAX_ITEMS}) …")
items = gis.content.search(query="*", max_items=MAX_ITEMS, outside_org=False)
total = len(items)
print(f"✔ Retrieved {total} items.\n")
if total == 0:
print("No items found. Nothing to do.")
return
type_counts = {}
print(f"→ Writing CSV: {OUTPUT_CSV}")
with open(OUTPUT_CSV, "w", newline="", encoding="utf-8") as f:
writer = csv.DictWriter(f, fieldnames=CSV_FIELDS)
writer.writeheader()
for idx, it in enumerate(items, start=1):
# Safeguard per-item attributes
t = (getattr(it, "type", "") or "").strip()
title = getattr(it, "title", "") or ""
it_id = getattr(it, "id", "") or ""
# === LIVE PROGRESS PRINT ===
if SHOW_PROGRESS and (idx % PROGRESS_EVERY == 0):
print(f"[{idx}/{total}] {t or '(blank)'} — {title} ({it_id})", flush=True)
# Count
type_counts[t] = type_counts.get(t, 0) + 1
# Row
row = {
"id": it_id,
"title": title,
"owner": getattr(it, "owner", ""),
"type": t,
"typeKeywords": ";".join(getattr(it, "typeKeywords", []) or []),
"created_utc": utc_ms_to_iso(getattr(it, "created", 0) or 0),
"modified_utc": utc_ms_to_iso(getattr(it, "modified", 0) or 0),
"url": getattr(it, "url", ""),
"numViews": getattr(it, "numViews", ""),
"size": getattr(it, "size", "")
}
writer.writerow(row)
# Summary
print("\nITEM_TYPE Summary (descending count)")
print("===================================")
for t, c in sorted(type_counts.items(), key=lambda kv: kv[1], reverse=True):
print(f"{t or '(blank)'}: {c}")
print("\n✔ Done.")
print("Tip: Set PROGRESS_EVERY=10 (or higher) if the console gets too noisy.")
if __name__ == "__main__":
main()
... View more
a week ago
|
0
|
0
|
40
|
POST
|
I can't believe that I didn't think to try that. Updating the source that way repaired the issue! What's odd is that I definitely had the itemID correct, because it is the same now as it was before. Must have just been a weird bug. Either way, I will definitely use this method from now on. Thank you for your help!
... View more
2 weeks ago
|
1
|
0
|
179
|
POST
|
We have a public-facing web app in ArcGIS Online for our zoning data. In order to keep that data updated, we used to use a script that truncated the table and appended the most recent data to it. This was cumbersome because every time the schema changed, we would have to update the script, and it would also frequently corrupt the indexes, making the layer unsearchable until the indexes were rebuilt. We have slowly started migrating most of our key datasets to the portal to make use of branch versioning and to streamline the process of managing our data across both AGOL and Portal. I have migrated our zoning data over to Portal as a publicly shared, referenced (non-editable) feature service, so that the second we make edits to the layer, they show up. Since the layer is shared publicly, I used the ArcGIS assistant to open the JSON of the web map and replaced the zoning layer URL and itemid with the corresponding portal layer. The layers are identical aside from the fact that one is in Portal and one is in AGOL. Even upon opening the map, the layer loads perfectly. I can see updates instantly in AGOL, and I can search the layer. It is great. The weird issue I am having is actually on the item details page of the web map where the layers were replaced. All of the layers that I have migrated into this web map from the portal by replacing the URL show the following error: Parcels is the only layer that is still pointing towards its AGOL version, rather than the portal. I would really like to figure out why this workflow has broken the item details page, if possible.
... View more
2 weeks ago
|
0
|
2
|
248
|
POST
|
Thank you for posting this. This issue was driving me crazy but this worked for me.
... View more
09-04-2025
12:24 PM
|
0
|
0
|
177
|
POST
|
Yeah. That's weird. On my end, using the above code only triggers the rule when the shape changes or the deeded acreage changes. Otherwise, it never fires.
... View more
08-06-2025
04:13 AM
|
0
|
0
|
146
|
POST
|
Yes. Chat GPT ended up helping me figure it out! I ultimately came up with the following expression: //Detect changes
var geomChanged = !Equals(Geometry($originalFeature), Geometry($feature));
var areaChanged = $originalFeature.StatedArea != $feature.StatedArea;
var areaIsZero = $feature.StatedArea == 0;
//If the stated area is zero, let user set QAQC_Status Manually
if (areaIsZero) {
return "Unable to QAQC. New Plat needed. See comments on parcel "
}
//otherwise, if geom or area changed, run the QAQC test and set accordingly.
if (geomChanged || areaChanged) {
return iif(
Abs($feature.ERROR_ACRES) > ($feature.StatedArea * 0.10),
"Acreage mismatch. Deeded acres and calculated acres do not fall within OCGIS tolerance.",
"Acreage ok. Deeded acres and calculated acres fall within OCGIS tolerance."
);
} I have the triggers set to Insert and Update, and the only update fields are Shape and the Stated Area field so it automatically updates itself should the deeded acreage change. I've been using it for about 3 months now and it has worked without issue!
... View more
08-05-2025
12:44 PM
|
0
|
1
|
156
|
POST
|
I've attached them. I ended up figuring out the problem, however. It wasn't picking up the curves because the deed didn't specifically call out whether the turn was to the right or to the left. I went and manually added that information and it began detecting the measurements. It would be nice to get some kind of documentation on what this tool expects in terms of formatting. I've had it fail to recognize several other measurements before due to comma placement. It works great as long as the deed is perfectly formatted. Sadly, a lot of ours are not. Thanks for the reply!
... View more
07-29-2025
01:09 PM
|
1
|
0
|
264
|
POST
|
I'm asking specifically about the new COGO reader functionality introduced in 3.5. Unfortuntely this is from 2017 and doesn't address that issue.
... View more
07-23-2025
09:35 AM
|
0
|
0
|
330
|
POST
|
For whatever reason it will not read the following " traveling thence along the arc of a curve an arc distance of 40.73 feet, said arc having a radius of 317.07 feet and being subtended by a chord bearing South 31 degrees 26 minutes 30 seconds West a distance of 40.70 feet to a point, traveling thence along the arc of a curve an are distance of 117.82 feet, said arc having a radius of 317.07 feet and being subtended by a chord bearing South 17 degrees 06 minutes 59 seconds West a distance of 117.15 feet to a point" Is it unable to read curves? There doesn't appear to be away to edit it in such a way so that it gets inserted into the traverse unless I am missing something.
... View more
07-23-2025
07:03 AM
|
0
|
4
|
359
|
POST
|
Great news. Thank you! Edit: I'm guessing this change isn't in portal yet? I still don't see this option.
... View more
07-01-2025
04:09 AM
|
0
|
2
|
425
|
IDEA
|
Good to know. I will have to give that a shot next time. Thanks for the tip!
... View more
07-01-2025
04:09 AM
|
0
|
0
|
312
|
POST
|
This same logic does not apply in dashboards, and it is very annoying. We have a hydrant ID that ranges from 1-4 characters long. If I search for a 1-2 character hydrant ID, no results ever pop up. If I hit enter, then it just takes me to the closest match. Never gives me a list to choose from.
... View more
06-11-2025
04:46 AM
|
0
|
0
|
203
|
Title | Kudos | Posted |
---|---|---|
2 | Friday | |
1 | 2 weeks ago | |
1 | 07-29-2025 01:09 PM | |
1 | 11-16-2023 07:02 AM | |
1 | 11-21-2023 12:42 PM |
Online Status |
Online
|
Date Last Visited |
yesterday
|