DOC
|
Ah, it makes sense that it would work in a python notebook and not a geoprocessing service, and here's why. A geoprocessing service runs remotely on the server, which means it can't make any modifications to the current ArcGIS Pro user's project / map / layers. If all you need is a tool to change the "approved" layer to default you could create a small python toolbox with a single tool to do that and place it on a network share for your users to access. You may also be able to rewrite your tool so it does all the work in a geoprocessing service without needing to update the users map, or you could make the entire process available via a python toolbox on a network share (or copied locally, or in the users project). You can read more about how geoprocessing services on this page in the online help. You can read more about python toolboxes on this page in the online help.
... View more
08-19-2022
05:46 AM
|
0
|
0
|
3357
|
POST
|
The Utility Network geodatabase is a fully-functional standalone geodatabase loaded with sample data to let you quickly try out the utility network. The Asset Package geodatabase is used for when you're ready to start converting your own data into the Utility Network.
... View more
08-18-2022
05:22 PM
|
2
|
0
|
774
|
DOC
|
@SU00861536 can you provide more context to why you want to do this? The tool you described (https://pro.arcgis.com/en/pro-app/2.9/tool-reference/data-management/changeversion.htm) only updates the version on the layer within the context of the script that is currently running. So if you have a larger process that you want to have run in a particular version you may need to have a larger geoprocessing service for performing all the work using either this + other tools or you could consider using the ArcGIS API for Python. I discuss the considerations for these approaches and which API to use in an Utility Network Integration Strategies blog, although the considerations for versioning apply to any branch version dataset / service.
... View more
08-18-2022
09:54 AM
|
0
|
0
|
3377
|
POST
|
No, that will not work. Reconcile is used to manage existing edits on a single table / feature class made within the geodatabase. Because your edits have been made across multiple databases, across multiple datasets, you must identify the changes yourself either manually or using one of the other tools I mentioned and then you must apply those edits to your original dataset manually.
... View more
08-11-2022
02:19 PM
|
0
|
0
|
1331
|
POST
|
there is no automated way for you to import the edits in the geodatabase in the scenario you are in. Importing the feature class will only create a copy of the feature class, you will still need to compare the underlying data. This is why you must use a process to compare the two datasets to discover the changes that were made and either manually or programmatically apply the edits to the table in the enterprise.
... View more
08-11-2022
02:04 PM
|
1
|
2
|
1334
|
POST
|
The tool is designed to compare feature classes or layers, so you should be pointing to a specific layer in both your enterprise and local geodatabase. If you are comparing many layers you may want to create a model or python script to help make this process easier.
... View more
08-11-2022
09:13 AM
|
0
|
0
|
1341
|
POST
|
If you want to model every meter on the map, then you will need to ensure that the devices are not stacked on top of each other and that each one is connected to a service. In this case, I would recommend that you also use a meter box assembly to act as a container for your meters. This approach will take more time to draw and may clutter your map, but it will allow you to locate and trace your meters without any special tools. If you don't want to model each individual meter, you could represent the meter box itself using a single meter (using an attribute to differentiate it from a single meter). In this case you would likely want to relate the device to a table that lists out the customers related to each meter. This keeps your map simpler, but means that you do have to do a few extra clicks to get from the meter to the customer information. Hope that helps!
... View more
08-11-2022
06:50 AM
|
0
|
0
|
665
|
POST
|
The data comparison toolbox in ArcGIS Pro can help with identifying the changes between environment, but you will still need to apply them to the environment manually, or develop your own script. George is correct, versioning is a way of managing transactions within a single geodatabase. For your needs you will need to identify the differences between your various datasets, determine which is most authoritative, then apply them to your enterprise geodatabase. Going forward you could consider putting some workflows in place to guard against this kind of problem. Its common to say that edits made against development will not be tracked, and you may be able to use something like replication to manage edits made by disconnected users.
... View more
08-11-2022
06:43 AM
|
1
|
2
|
1347
|
DOC
|
Branch Version Sql Views The following queries show examples of how to create materialized views on branch versioned utility network for various DBMS. For additional information about the reasoning behind this approach, please refer to the Branch Versioning and SQL Esri blog post. PostgreSQL Create Materialized Views DROP MATERIALIZED VIEW IF EXISTS unadmin.device_bvw;
CREATE MATERIALIZED VIEW unadmin.device_bvw
AS
WITH t0_ AS
(SELECT objectid, globalid, assetgroup, assettype, assetid, shape
FROM
(SELECT objectid, globalid, assetgroup, assettype, assetid, shape, Row_number() over (PARTITION BY objectid ORDER BY gdb_from_date DESC) rn_, gdb_is_delete
FROM unadmin.electricdevice
WHERE (gdb_branch_id = 0)) a
WHERE rn_ = 1
AND gdb_is_delete = 0 )
SELECT objectid, globalid, assetgroup, assettype, assetid, shape
FROM t0_
WITH DATA;
CREATE UNIQUE INDEX IF NOT EXISTS device_bvw_uuid
ON unadmin.device_bvw USING btree
(globalid COLLATE pg_catalog."default" ASC NULLS LAST)
TABLESPACE pg_default;
CREATE INDEX IF NOT EXISTS device_bvw_spat_idx
ON unadmin.device_bvw USING gist
(shape)
TABLESPACE pg_default; Refresh Views Once you’ve created the materialized view(s), you should create and schedule a function in your database to refresh them periodically. How often you call this function and refresh your views depend on the volume of edits you make and how long it takes to refresh the views. A common practice is to refresh the views once or twice a day, but for very large datasets or datasets that require a lot of additional processing you may only refresh the views once a week. CREATE OR REPLACE FUNCTION
unadmin.refresh_bvw()
RETURNS VOID
LANGUAGE 'plpgsql'
AS $$
DECLARE
BEGIN
REFRESH MATERIALIZED VIEW unadmin.assembly_bvw;
REFRESH MATERIALIZED VIEW unadmin.device_bvw;
REFRESH MATERIALIZED VIEW unadmin.junction_bvw;
REFRESH MATERIALIZED VIEW unadmin.line_bvw;
REFRESH MATERIALIZED VIEW unadmin.structureboundary_bvw;
REFRESH MATERIALIZED VIEW unadmin.structurejunction_bvw;
REFRESH MATERIALIZED VIEW unadmin.structureline_bvw;
REFRESH MATERIALIZED VIEW unadmin.associations_bvw;
REFRESH MATERIALIZED VIEW unadmin.subnetworks_bvw;
END;$$
ALTER FUNCTION unadmin.refresh_bvw()
OWNER TO unadmin; Oracle Create Materialized Views You should consult with a DBA before specifying any parameters in your create index statement, otherwise the defaults for the database are used. If you include a geometry in your view you need to specify the spatial grid size and spatial reference id (SRID) of the base table when creating the spatial index on the shape field. In the example below I have included a statement that you can use to query this information. GRANT CREATE MATERIALIZED VIEW TO UNADMIN;
CREATE MATERIALIZED VIEW DEVICE_BVW
BUILD IMMEDIATE
REFRESH COMPLETE
ON DEMAND
AS
SELECT OBJECTID, GLOBALID, ASSETGROUP, ASSETTYPE, ASSETID, SHAPE
FROM UNADMIN.ELECTRICDEVICE
WHERE GDB_ARCHIVE_OID IN
(SELECT GDB_ARCHIVE_OID
FROM
(SELECT GDB_ARCHIVE_OID, ROW_NUMBER() OVER(PARTITION BY objectid ORDER BY gdb_from_date DESC) rn, gdb_is_delete
FROM UNADMIN.ELECTRICDEVICE
WHERE (gdb_branch_id = 0)) br__
WHERE br__.rn = 1
AND br__.gdb_is_delete = 0);
CREATE UNIQUE INDEX DEVICE_BVW_UUID ON DEVICE_BVW (GLOBALID) ;
--Get the underlying grid size and SRID from the base table
SELECT A.GRID.GRID1, A.GRID.GRID2, A.GRID.GRID3,A.SRID
FROM SDE.ST_GEOMETRY_INDEX
WHERE OWNER = 'UNADMIN' AND TABLE_NAME = 'ELECTRICDEVICE';
--Create a spatial index
CREATE INDEX DEVICE_BVW_SA_IDX
ON UNADMIN.ELECTRICDEVICE (“SHAPE”)
INDEXTYPE IS sde.st_spatial_index
PARAMETERS('st_grids=<Grid Sizes Here> st_srid=<Your ID Here>'); Refresh Views To keep your views up to date, you should create a materialized view refresh group for these views and set it to execute on a regular schedule to ensure the data is refreshed often enough to meet your reporting requirements but not so often it places a burden on your system. You can learn more about refresh groups by reading Oracle’s online help for DBMS Refresh. Oracle 21C and later have methods for automatically refreshing materialized views. However, if you are using an older release of oracle you will want to schedule a refresh group that handles refreshing your materialized views. BEGIN
DBMS_REFRESH.make(
name => 'UNADMIN.BVW_REFRESH',
list => '',
next_date => SYSDATE,
interval => '/*12:Hours*/ SYSDATE + 12/24',
implicit_destroy => FALSE,
lax => FALSE,
job => 0,
rollback_seg => NULL,
push_deferred_rpc => TRUE,
refresh_after_errors => TRUE,
purge_option => NULL,
parallelism => NULL,
heap_size => NULL);
END;
/
BEGIN
DBMS_REFRESH.add(
name => 'UNADMIN.BVW_REFRESH',
list => 'UNADMIN.ASSEMBLY_BVW,UNADMIN.DEVICE_BVW,UNADMIN.JUNCTION_BVW,UNADMIN.STRUCTUREBOUNDARY_BVW,UNADMIN.STRUCTUREJUNCTION_BVWUNADMIN.STRUCTURELINE_BVW',
lax => TRUE);
END;
/ Sql Server Create Reporting Table Even though SQL Server does have an implementation for materialized views (called indexed views) it is recommended that you do not use indexed views to materialize the results of queries. You can read more about these restrictions in Microsoft’s online help. Instead, you should write a stored procedure that will recreate tables and indices for your queries. The following statement to create a stored procedure that will create or refresh a reporting table for electric devices in the utility network for a SQL server database. Because we are doing this all in a single stored procedure, we also include the statements for creating the indices. CREATE OR ALTER PROCEDURE [unadmin].[CreateDevice_BVW]
AS BEGIN
BEGIN TRY
BEGIN TRANSACTION
/* DECLARE PROCEDURE VARIABLES */
DECLARE @minx NUMERIC(38,8);
DECLARE @miny NUMERIC(38,8);
DECLARE @maxx NUMERIC(38,8);
DECLARE @maxy NUMERIC(38,8);
DECLARE @ErrorMessage NVARCHAR(4000),
@ErrorNumber INT,
@ErrorSeverity INT,
@ErrorState INT,
@ErrorLine INT,
@ErrorProcedure NVARCHAR(200);
/* DROP THE TABLE IF ALREADY EXISTS */
DROP TABLE IF EXISTS [unadmin].[Device_BVW];
/* CREATE THE TABLE BASED FROM DEFAULT RECORDS OF THE BRANCH VERSIONED TABLE */
SELECT OBJECTID, GlobalID, Shape
INTO [unadmin].[Device_BVW]
FROM [unadmin].[Device]
WHERE GDB_ARCHIVE_OID IN (
SELECT GDB_ARCHIVE_OID
FROM (
SELECT GDB_ARCHIVE_OID, ROW_NUMBER() OVER(PARTITION BY OBJECTID ORDER BY GDB_FROM_DATE DESC) rn, GDB_IS_DELETE
FROM [unadmin].[ Device]
WHERE (gdb_branch_id = 0)) br__
WHERE br__.rn = 1
AND br__.GDB_IS_DELETE = 0);
/* ADD INDEXES */
ALTER TABLE [unadmin].[Device_BVW]
ADD CONSTRAINT [Device_BVW_pk] PRIMARY KEY CLUSTERED ([OBJECTID] ASC);
CREATE UNIQUE NONCLUSTERED INDEX [DEVICE_BVW_UUID]
ON [unadmin].[Device_BVW] ([GLOBALID] ASC);
--You only need to do this if your resulting table needs a shape column.
--This will construct a spatial index using the extent of the original table
WITH
envelope AS (SELECT shape.STEnvelope() AS envelope FROM [unadmin].[ Device]),
corners AS (SELECT envelope.STPointN(1) AS point FROM envelope
UNION ALL SELECT envelope.STPointN(3) FROM envelope)
SELECT @minx=min(point.STX), @miny=min(point.STY), @maxx=max(point.STX), @maxy=max(point.STY) FROM corners;
/* GENERATE & EXECUTE THE SQL FOR CREATING THE SPATIAL INDEX */
DECLARE @sql NVARCHAR(2000) = 'CREATE SPATIAL INDEX [Device_BVW_spidx] ON [unadmin].[ Device_BVW] (Shape)
USING GEOMETRY_AUTO_GRID WITH (BOUNDING_BOX =('+CAST(@minx AS NVARCHAR(20))+','
+CAST(@miny AS NVARCHAR(20))+','
+CAST(@maxx AS NVARCHAR(20))+','
+CAST(@maxy AS NVARCHAR(20))+'))';
EXECUTE (@sql);
COMMIT TRANSACTION
END TRY
BEGIN CATCH
/* IF ERROR THEN ROLLBACK TRANSACTION AND RETURN ERROR */
ROLLBACK TRANSACTION
SELECT @ErrorNumber = ERROR_NUMBER(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE(),
@ErrorLine = ERROR_LINE(),
@ErrorProcedure = ISNULL(ERROR_PROCEDURE(), '-');
SELECT @ErrorMessage = N'Error %d, Level %d, State %d, Procedure: %s, Line: %d, ' + 'Message: '+ ERROR_MESSAGE();
RAISERROR (@ErrorMessage, @ErrorSeverity, 1, @ErrorNumber, @ErrorSeverity, @ErrorState, @ErrorProcedure, @ErrorLine);
END CATCH
END
/* RUN THE STORED PROCEDURE
EXECUTE gisowner.CreateTAX_BVW
*/ Refresh Views To refresh the tables, you should execute the stored procedure(s) created on a regular schedule to ensure the data is refreshed often enough to meet your reporting requirements but not so often it places a burden on your system. Below you can find an example script. exec UNADMIN.CreateAssembly_BVW;
exec UNADMIN.CreateDevice_BVW;
exec UNADMIN.CreateJunction_BVW;
exec UNADMIN.CreateLine_BVW;
exec UNADMIN.CreateStructureBoundary_BVW;
exec UNADMIN.CreateStructureJunction_BVW;
exec UNADMIN.CreateStructureLine_BVW;
exec UNADMIN.CreateAssociations_BVW;
exec UNADMIN.CreateSubnetworks_BVW; SAP HANA Create Reporting Table Because SAP Hana doesn’t have materialized views the recommended approach is to use a stored procedure to create a column table that stores the current state of the data in default. The following stored procedure will persist the current state of the table from the default version, then create indices on the global id and object id columns. /*CREATE STORED PROCEDURE*/
CREATE OR REPLACE PROCEDURE UNADMIN.CREATE_DEVICE_BVW
(OUT sql_code INT,
OUT sql_msg NVARCHAR(512))
LANGUAGE SQLSCRIPT AS
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
sql_code = ::SQL_ERROR_CODE;
sql_msg = ::SQL_ERROR_MESSAGE;
RESIGNAL;
END;
sql_code = 0;
sql_msg = null;
IF EXISTS (SELECT 1 FROM M_TABLES WHERE SCHEMA_NAME = 'UNADMIN' AND TABLE_NAME='DEVICE_BVW') THEN
DROP TABLE UNADMIN.DEVICE_BVW;
END IF;
CREATE COLUMN TABLE UNADMIN.DEVICE_BVW AS (
WITH T0_ AS
(SELECT OBJECTID, GLOBALID, ASSETGROUP, ASSETTYPE, ASSETID, SHAPE
FROM
(SELECT OBJECTID, GLOBALID, ASSETGROUP, ASSETTYPE, ASSETID, SHAPE, ROW_NUMBER() OVER (PARTITION BY OBJECTID ORDER BY GDB_FROM_DATE DESC) RN_, GDB_IS_DELETE
FROM UNADMIN.Device
WHERE (GDB_BRANCH_ID = 0)) A
WHERE RN_ = 1
AND GDB_IS_DELETE = 0 )
SELECT OBJECTID, GLOBALID, SHAPE
FROM T0_
);
CREATE UNIQUE INDEX DEVICE_BVW_UUID ON UNADMIN.DEVICE_BVW ( GLOBALID ASC);
CREATE INDEX DEVICE_BVW_PK ON UNADMIN.DEVICE_BVW ( OBJECTID ASC );
END; Refresh Reporting Table To refresh the table, you just call the stored procedure associated with any tables you want to refresh. CALL UNADMIN.CREATE_Assembly_BVW(? ,?);
CALL UNADMIN.CREATE_Device_BVW(? ,?);
CALL UNADMIN.CREATE_Junction_BVW(? ,?);
CALL UNADMIN.CREATE_Line_BVW(? ,?);
CALL UNADMIN.CREATE_StructureBundary_BVW(? ,?);
CALL UNADMIN.CREATE_StructureJunction_BVW(? ,?);
CALL UNADMIN.CREATE_StructureLine_BVW(? ,?);
CALL UNADMIN.CREATE_Associations_BVW(? ,?);
CALL UNADMIN.CREATE_Subnetwork_BVW(? ,?);
... View more
08-09-2022
07:50 AM
|
4
|
6
|
8681
|
DOC
|
Based upon feedback from users of the ArcGIS Utility Network, a new Add-In has been released to enable users to rapidly select features by association in the Attribute Pane. Details are provided in this blog. You can download a copy of this add-in below. **** Note: Revised Add-in 03/30/2023
... View more
08-09-2022
06:19 AM
|
2
|
2
|
1428
|
POST
|
Glad you were able to get everything figured out. I've seen many network issues caused when the lifecycle status field during migration when it is populated by a system that wasn't relying on this field for network connectivity.
... View more
08-08-2022
07:24 AM
|
0
|
0
|
1148
|
POST
|
Can you confirm that there is a regulator device at that location, not just a regulator assembly? Looking at your screenshot it appears that the trace stops at the upstream line and not the regulator itself, this implies that either the line is acting as a barrier to the trace Check the attributes of the line against the condition barriers in your network, the most likely issue is that the lifecycle status isn't "in service". If you move the regulator are you seeing the pipe "rubber band" with it? if not, this means that the pipe isn't actually connected to the regulator so you may need to check your snapping, rules, etc.
... View more
08-08-2022
07:10 AM
|
0
|
0
|
1155
|
POST
|
While there is a property of your spatial reference you can adjust that will do this (the XY Tolerance / Resolution), the best practices approach is considered to keep the default parameters of your spatial reference and correct your data. Ideally this data would be corrected during data conversion or prior to loading your data and enabling your topology. There are many tools and techniques to identify nearly-coincident datasets, but one of the simpler tools I've found to identify these issues is to generate a near table and look for multiple matches within a reasonable distance (1 meter / 1 foot at most).
... View more
08-08-2022
07:00 AM
|
1
|
0
|
735
|
POST
|
It looks like the problem is, as you noted, that the process is timing out. In the past when I've been in situations where I need to trace a large number of networks like this I will write a script that will iterate through the list of dirty subnetworks and update them one at a time.
... View more
08-04-2022
01:17 PM
|
0
|
0
|
769
|
POST
|
Manually step through the vertices of each line using ArcGIS Pro. You may find that you have cutbacks, self intersecting lines, or vertices that are very close but not truly duplicate (within the xy tolerance but greater than the xy resolution).
... View more
08-04-2022
07:26 AM
|
0
|
0
|
2669
|
Title | Kudos | Posted |
---|---|---|
2 | Monday | |
1 | a week ago | |
1 | 10-27-2023 12:37 PM | |
1 | 2 weeks ago | |
1 | 4 weeks ago |
Online Status |
Online
|
Date Last Visited |
8 hours ago
|