|
POST
|
What is your desired/allowable level of accuracy? Three UTM zones covers about 1/3 of the USA, and does introduce a lot of distortion. So how much distortion is too much for you? I just posted this idea (with LRS in mind specifically) for the exact reason/problem you are having. GIS Design Support for NSRS 2022 and Low Distortion Projection Zones If you have only one route, you could potentially find or define a projection that would satisfactorily minimize distortion for that route. Probably your best option is to segment the route shapes between projections at a state level, build a bunch of LRS routes and calibration points then use those to calibrate the whole route with attributes as opposed to shape length definition, but then again, what is your desired/allowable level of accuracy? Upvote my idea and maybe someday you could use GIS and LRS for something like this with Surveying level accuracy, distortion a couple 10's of parts per billion. You can't eliminate distortion but you are asking the right question to minimize distortion for sure.
... View more
10-25-2018
12:31 PM
|
3
|
2
|
1597
|
|
IDEA
|
When the new Horizontal Datums are released, states will be making choices about datums and projections. These choices will have impacts on the GIS community as well as Surveying, Design, and construction industries. Some states will define statewide projection zones, and many states are defining low distortion projections. It will benefit communities creating and stewarding GIS data to define projections minimizing distortion, thereby making GIS data more valuable for surveyors, designers, and builders. Changes in GIS are occurring nationally, with directives and objectives to "roll up" community developed data to state and federal levels. With the current design, a State would likely need to project from a community level Low Distortion to a conformal statewide projection to take advantage of data defined in a projection. Likewise, the feds would have to define their projection on a US level. Each re-projection to a larger area will introduce distortion. The idea is to architect the ArcGIS platform and the Geodatabase/feature dataset containers to allow feature data to remain in the low distortion projections. Applications would then need to be able to cluster these geodatabase projection containers together for processing and spatial analysis in desktop software in a hive like distributed system. Enterprise level servers would need to be able to combine the clusters into a seamless application service with many defined source projections. Ideally enterprise applications would display maps using NSRS projections on the fly based on scale level. AND this approach needs to work with Linear Referencing systems including Roads and Highways.
... View more
10-25-2018
12:14 PM
|
7
|
2
|
1434
|
|
IDEA
|
Pro team may be going in the direction of burial more of the measure stuff into symbology rather than a layer property... Given the intelligent menu system of pro, I think that a good approach option to pro incorporation may be an intelligent menu that activates when the layer is activated and the layer is recognized as having m values. From that menu linear reference tool options could be chosen.
... View more
10-11-2018
09:43 AM
|
0
|
0
|
3715
|
|
IDEA
|
upon first review of the process to draw measured hatches along lines, that works really well and has a lot of options, it's just buried in there with the many symbol options of pro. That link was helpful but it could use more screenshots, the terminology used in that link to achieve this is so specific to pro (but was very well worded and I could easily figure it out). Also, what can be done to keep the hatched labels from drawing upside down? I set my text angle at 270 to get my hatch labels right-side up.
... View more
10-10-2018
12:26 PM
|
0
|
0
|
3715
|
|
IDEA
|
good description of the idea, I changed it. Great info on the hatching capability, I will look at that, thanks.
... View more
10-10-2018
10:36 AM
|
1
|
1
|
3715
|
|
IDEA
|
Arcmap has layer properties specific to Route Feature classes (with measures) allowing the layer to support hatching symbology and labeling, as well as ability to show where measures do not increase as described here: Displaying route measure anomalies—Help | ArcGIS for Desktop The idea is to incorporate the same functionality into ArcGIS Pro.
... View more
10-10-2018
10:09 AM
|
17
|
6
|
4317
|
|
POST
|
I do it like this because I use LRS. With this script I can use my routes with measures to create points at different increments for different LRS Reference Methods: pydot/HatchFake.py at master · KDOTGIS/pydot · GitHub '''
Created on Jul 14, 2015
This script will create route events as points along the route features at specific increments
the points can be symbolically displayed as route hatches for web mapping
@author: Kyle Gonterwitz with, as always the amazing help from Dirk Talley
@contact: Kyleg@Ksdot.org
'''
#import arcpy
from arcpy import (AddField_management, MakeFeatureLayer_management, CreateTable_management,da, Exists, AddXY_management,
TruncateTable_management, Append_management, MakeRouteEventLayer_lr, Delete_management, FeatureClassToFeatureClass_conversion, env)
#set the geodatabase parameters for the input route data
env.overwriteOutput = True
wsPath = r"Database Connections\shared@SQLGIS_cansys_gis_dev.sde" #enter the workspace path that has the data owner login
StatefcRoutes = r"\\gisdata\arcgis\GISdata\Connection_files\RO@sqlgisprod_GIS_cansys.sde\GIS_CANSYS.SHARED.SMLRS" # State Route feature class with begin/end attribs
CountyfcRoutes = r"\\gisdata\arcgis\GISdata\Connection_files\RO@sqlgisprod_GIS_cansys.sde\GIS_CANSYS.SHARED.CMLRS" #County Route Feature Class with begin/end attribs
#State and County are the Two main Linear Referecing Methods used by KDOT which will be hatched
StateOutTable = "SMHatch"
CountyOutTable= "CMHatch"
StateFields = ["LRS_Route", "BEG_STATE_LOGMILE", "END_STATE_LOGMILE"]
CountyFields = ["LRS_KEY", "BEG_CNTY_LOGMILE", "END_CNTY_LOGMILE"]
#this field sets the hatch separation/spacing. For a hatch point every 1/10 of a mile, enter 0.1. For a hatch every 1/100th of a mile, choose 0.01.
#for mapping in KanPlan 1/10 mile seems plenty sufficient, and will create about 108,000 points for each LRM.
#1/100 would create 1,080,000 points which might suffer from use of in-memory processing, already this script takes a few minutes to run for each LRM
HatchSep = 0.1
countyLRM = [CountyfcRoutes, CountyOutTable, CountyFields]
stateLRM = [StatefcRoutes, StateOutTable, StateFields]
LRMethod = [countyLRM, stateLRM]
for method in LRMethod:
print "creating hatches for " + str(method[1])
#add route table as feature layer
if Exists("RouteLyr"):
Delete_management("RouteLyr")
else:
pass
MakeFeatureLayer_management(method[0], "RouteLyr", "DIRECTION in ( 1 , 2 )")
#create event table in memory
mem_table = "HatchEvents"
if Exists(r"in_memory\\"+mem_table):
print str(mem_table) +"already existed, deleting"
Delete_management(r"in_memory\\"+mem_table)
else:
print "Creating table for processing route increments of " + str(HatchSep)
CreateTable_management("in_memory", mem_table)
mem_table = r"in_memory\\"+mem_table
AddField_management(mem_table, "RouteID", "TEXT")
AddField_management(mem_table, "LogMile", "Double")
for row in sorted(da.SearchCursor("RouteLyr", (method[2]))): # @UndefinedVariable
LRSKEY = row[0]
if LRSKEY == (LRSKEY):
# use this loop to test the script against a single route
iter0 = row[1]
#print row[0]+ ' from '+str(row[1])+' to '+str(row[2]) #print the current LRS Key
#set the begin and end parameters from which to create incremental values
if HatchSep == 0.1:
round_dec = 1
elif HatchSep == 0.01:
round_dec = 2
else:
round_dec = 0
print "check hatch separation value"
minlog = round(row[1], round_dec)
if minlog > row[1]:
minlog = minlog - HatchSep
else:
pass
maxlog = round(row[2], round_dec)
if maxlog < row[2]:
maxlog = maxlog + HatchSep
else:
pass
#set the starting point for the route segment
itermile = minlog
#now loop between the start and end logmiles for each route segment, and insert the step increment into the event table in memory
while itermile <= maxlog and itermile >= minlog:
#print str(itermile)
with da.InsertCursor(mem_table, ("RouteID", "LogMile")) as insert:# @UndefinedVariable
insertfields = [LRSKEY, itermile]
insert.insertRow(insertfields)
itermile = itermile + HatchSep
del minlog
del maxlog
MakeRouteEventLayer_lr("RouteLyr", method[2][0], mem_table, "RouteID POINT LogMile", "HatchPoints_events", "", "ERROR_FIELD", "ANGLE_FIELD", "NORMAL", "COMPLEMENT", "LEFT", "POINT")
#add XY points, later on these coordinates can be used to hyperlink to google street view, bing maps, etc. Make sure we are in NAD83 Lat/Long CRS here.
AddXY_management("HatchPoints_events")
try:
Delete_management(wsPath+'//'+method[1])
FeatureClassToFeatureClass_conversion("HatchPoints_events", wsPath, method[1], "LOC_ERROR = 'NO ERROR'")
except:
TruncateTable_management(wsPath+'//'+method[1])
Append_management("HatchPoints_events", wsPath+'//'+method[1])
cleanup = [mem_table, "RouteLyr", "HatchPoints_events"]
for layer in cleanup:
Delete_management(layer)
... View more
08-20-2018
03:26 PM
|
1
|
0
|
3472
|
|
POST
|
label the first character of the milepost string, then label the second character on the next line, third char on the next line, like so: Layers/KDOT_reference_post_markers (MapServer)
... View more
08-20-2018
03:22 PM
|
1
|
0
|
1531
|
|
BLOG
|
Have you ever compared the speed of a Data Access cursor update vs using the field calculator? Using data access cursors is a rite of passage for developers using python for ArcGIS, surely. Write a few more lines of code to save some processing time. Next thing you know, your python code is getting complicated. A few years ago I started using pymssql with SQL Servers and cx_Oracle with Oracle Databases in my python scripts. In ArcGIS Pro now, looks like pymssql is getting antiquated, because Conda cant install it - it's not easy to install with a wheel and its less easy to get that wheel to work in the propy conda environment. The ArcGIS Pro Conda package manager has no problem installing pyodbc so I set up a system DSN and used that to call sql scripts with Update TABLE set FIELD = Expression WHERE 1=1 within python scripts as a cursor. Arcpy also gives you ArcSDESQLExecute—ArcPy classes | ArcGIS Desktop to execute native SQL commands using a Geodatabase connection rather than a DSN, so I will have to try that next time. Native SQL can make the da cursor look slow, it gives much more control over join types and integrity, and it can be done in less characters of code, easily, from a python script.
... View more
08-01-2018
07:51 AM
|
0
|
0
|
508
|
|
BLOG
|
I use an excel workbook to keep track of things, including actions or to-do's, my server names and specs, software billing to departments, projects and status, communication plans, registration of risks and issues, training plans, staff duties, projects plans and pretty much anything else that has to do with GIS management. I even learned how to create GANTT charts in Excel from the internet. Sometimes after a long weekend it helps to get right back to productivity. It also helps me to plan ahead - I would not some bigger to-do items late in the afternoon or on a Friday, I'd work on clearing out smaller to-do items and maybe cleaning up my office/desktop and start the bigger tasks that require more focus on Monday or Tuesday morning on a week when my calendar is relatively clear. That's my method - I copied it from another successful project manager and it works well for me. What's your method for keeping up with the to-do list at work?
... View more
07-02-2018
08:42 AM
|
0
|
0
|
302
|
|
IDEA
|
I want to add on to these implemented ideas: Pop-up Arcade Expressions in ArcGIS Pro Add Hyperlink with a variable to Pop-Up in ArcGIS Pro and propose the SHAPE field of the feature class get added to the Arcade expression builder and GEOMETRY functions added to the expression builder to act on the SHAPE in a manner similar to python shape tokens. The overall result of the idea is to be able to use the SHAPE field to display tokens that can be used to link to other systems by using the lat/long coordinates. Additionally, some geometry functions specific to coordinate reference system conversions should be added to functions so that dynamic lat/long coordinates can be used in hyperlinks when features are projected.
... View more
06-28-2018
03:25 PM
|
7
|
1
|
1840
|
|
POST
|
In the popup configuratior for the latest version of pro, there is an option to add text to the popup, then at the bottom of the configurator, a button for expressions. Click that button, then there is another button that says "new". Click NEW then we get this window: In this expression builder, there are only text, number, and date functions. also in this expression builder, the SHAPE field is not presented as an actionable field. So, looks like a "cant be done" for now in pro. To the ideas page!
... View more
06-28-2018
02:19 PM
|
1
|
1
|
4519
|
|
POST
|
My data is a hosted feature service for the collector app. I don't want to have to calculate attribtues in the hosted feature service layer each time a point is added or moved or set up some nonsense CDC process to do this. I dont actually need the lat/long in the popup, what I really need is the lat/long as URL tokens behind an image to link to google maps, bing maps, and most of all, mapillary at a particular location and scale. If I could get the coordinates in the popup I can get them in a url expression I think, but the popup would be an easy test to see that yes, it can be done. I will look at the math solution there Håkon Dreyer maybe I can get that to work with the point[() function? That is nice to know, I figured a mathematical projection calculation might be part of a solution. Maybe I will take this to the Ideas page.
... View more
06-28-2018
01:50 PM
|
1
|
0
|
4519
|
|
POST
|
Had some issues yesterday morning. Saw the health was ok for hosted feature services but iffy on geoenrichment. Next time I will report this issue.
... View more
06-28-2018
12:41 PM
|
0
|
0
|
1036
|
|
POST
|
Just FYI, another way to remove the right most string in VB is to use the String Reverse method, remove first string using left or mid, then use the string reverse again. This is a method I have found handy for classifying Schools into Elementary, Junior High, Middle, and High Schools, because a list of schools usually has a format like "MARTIN LUTHER KING JR ELEMENTARY SCHOOL" or "JEFFERSON MIDDLE SCHOOL" so the string reverse method gives you an easy way to work from the right to left by reversing the characters so you are actually working left to right, without having to count characters or string parts. Just make sure to reverse the text again so you arent showing anybody information that looks like "LOOHCS ELDDIM NOSREFFFEJ"
... View more
06-28-2018
11:47 AM
|
0
|
0
|
6683
|
| Title | Kudos | Posted |
|---|---|---|
| 1 | 04-21-2025 06:20 AM | |
| 1 | 02-10-2025 06:22 AM | |
| 1 | 01-23-2025 07:01 AM | |
| 1 | 06-18-2024 03:18 PM | |
| 1 | 09-01-2023 11:54 AM |
| Online Status |
Offline
|
| Date Last Visited |
10-09-2025
11:47 AM
|