Via de Vector Style Editor zijn de kleuren van de basemap aangepast. Momenteel worden de routes voorbereid in ArcGIS Pro. Met behulp van de Batch GPX To Features tool zijn de routes als feature class opgeslagen. Aangezien ik berekeningen ga uitvoeren, wordt via de Project tool, is de spatial reference omgezet van WGS 1984 naar RD New. Via de Create Routes tool heb ik lengte-data aan de lijn gehangen.
De mountainbikeroutes zijn opgenknipt in stukjes van 100 meter waarvan de helling is berekend met behulp van een Python script. Hieronder worden de parameters alvast ingesteld. En wordt een feature class gemaakt bebaseerd op de al bestaande route feature class:
import arcpy
# parameters
input_fc = r"C:\Users\nieks\Documents\ArcGIS\Projects\MTBRoutesHolterberg\MTBRoutesHolterberg.gdb\Project_OutDataset_Features_hellendoorn_21_m"
out_path = r"C:\Users\nieks\Documents\ArcGIS\Projects\MTBRoutesHolterberg\MTBRoutesHolterberg.gdb"
out_name = "hellendoorn_split"
split_distance = 100
desc = arcpy.Describe(input_fc)
# setup automatisch overschrijven feature class
arcpy.env.overwriteOutput = True
# Nieuwe feature class maken met dezelfde instellingen als de input class
arcpy.management.CreateFeatureclass(
out_path=out_path,
out_name=out_name,
geometry_type="Polyline",
template=input_fc,
spatial_reference=desc.spatialReference,
has_m="SAME_AS_TEMPLATE",
has_z="SAME_AS_TEMPLATE"
)
# Toegang tot de polyline in de Feature Class, en de knip de lijn in stukken
with arcpy.da.SearchCursor(input_fc, ["SHAPE@"]) as cursor:
#Selecteer de (enige) lijn
for row in cursor:
polyline = row[0]
print(polyline.length)
total_length = polyline.length
#Lege lijst waarin we de segmenten en de hellingshoek in opslaan
segments = []
#De startpositie van de lijn
position = 0
#Zolang de totale lengte van de lijn niet wordt overschreden herhaal de volgende code
while position < total_length:
start = position
end = min(position + split_distance, total_length)
segment = polyline.segmentAlongLine(start, end)
z_start = segment.firstPoint.Z
z_end = segment.lastPoint.Z
length = segment.length
if length > 0:
slope = ((z_end - z_start) / length) * 100
else:
slope = 0
segments.append((segment, slope))
position += split_distance
for segment in segments:
print(segment)