← Terug naar homepage

MTB-route De Holterberg

Gebruikte software en tools voor deze kaart:
ArcGIS Online ArcGIS Pro Python ArcPy

Styling van de basemap en gereed maken van de routes

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.

Stijgingspercentage van de routes berekenen

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)