I'm trying to create something in here. I want to have an automated process of doing a DEFINITION QUERY then ZOOM TO LAYER with one step.
the concept is like that, a dialog comes up with one form that asks me to put a unique id for the specific parcel that I'm trying to look up, then I type the parcel numder then hit OK then it brings me to that specific parcel directly.
- Dialog pop-up
- Empty form to be filled
- Hit ok
- It zooms directly to that parcel
How can I do this using ArcPy?
An automated way to do the definition query then zoom to layer.
-
Have you got the dialog working? I am not sure if you can get to the layers' definition query via python but you can make a layer with a where clause, this should reduce the apparent extent and then zoom to layer.Michael Stimson– Michael Stimson2014年07月02日 22:48:37 +00:00Commented Jul 2, 2014 at 22:48
-
The problem here is that I'm new to both python and modelbuilder. I'm just thinking of a way to do a definition query on a specific attribute then after finding it it will zoom to layer. Simple yet complicated! But if I get a solution to this one I'm surely will have the experience to do the upcoming tasks.user32954– user329542014年07月02日 22:52:05 +00:00Commented Jul 2, 2014 at 22:52
-
There is code provided in an answer to possible duplicate of How to zoom to selection in arcpy.mapping and only see selected features?PolyGeo– PolyGeo ♦2014年07月02日 22:52:56 +00:00Commented Jul 2, 2014 at 22:52
-
Your biggest problem is the dialog box. How do you feel about C# or VB.net instead of python? Much more control but less portability.Michael Stimson– Michael Stimson2014年07月02日 22:53:08 +00:00Commented Jul 2, 2014 at 22:53
-
That would be perfect if you could show me the way to do it, can't wait to be at ESRIUC! Many ideas but less means! I would be thankful, Sir.user32954– user329542014年07月02日 22:56:03 +00:00Commented Jul 2, 2014 at 22:56
1 Answer 1
The definition query of the layer and zooming to is the easy part:
import arcpy
# Assuming that Value is set by the form, there is only one data frame
# and the layer name is LayerName
doc = arcpy.mapping.MapDocument("Current")
dataFrame = arcpy.mapping.ListDataFrames(doc)[0] # the first data frame
MapLayers = arcpy.mapping.ListLayers(doc,"LayerName",dataFrame)
Layer = MapLayers[0]
Layer.definitionQuery = "Field = %s" % Value
Extent = Layer.getExtent(True) # visible extent of layer
dataFrame.extent = Extent
arcpy.RefreshActiveView() # redraw the map
The hard part is building the form and accepting/validating the values.. You have to ensure that the definition query is valid; look at GetCount_management to ensure that the layer as at least one feature before zooming.
-
The "hard" part has only a similar degree of difficulty to do the basics of form input (GetParameterAsText on a Python script tool) and checking for features before zooming (GetCount; as you indicate) because there is no need to validate the Definition Query syntax when all that is being input is an ID as specified in the question. I think doing something fancier than that should be researched/asked as a new question.2014年07月03日 00:48:19 +00:00Commented Jul 3, 2014 at 0:48
-
Yes @PolyGeo if it is run as a script tool nothing fancy need be done. The OP is thinking about a custom form and I think a python add-in. I can really only help with the arcpy in this case as the OP needs to find a form lib (like QT or PyWin) to implement the custom form and seek help on that from Stack Overflow. As a beginner though it might be getting too deep too fast.Michael Stimson– Michael Stimson2014年07月03日 00:56:23 +00:00Commented Jul 3, 2014 at 0:56