Exemple #1
0
def getDownstreamGridCodes(gridcode, catchFC, flownet, flownetFC):
    '''Traces downstream from the project's catchment and lists all downstream catchment GRIDCODES'''
    #Get the catchment corresponding to the gridcode
    theCatchLyr = arcpy.MakeFeatureLayer_management(
        catchFC, "theCatch", "GRIDCODE = {}".format(gridcode))
    #Clip the flowine within the catchment and get its lowest point
    theFlowline = arcpy.Clip_analysis(flowlineFC, theCatchLyr,
                                      "in_memory/theFlowline")
    theFlowpoint = arcpy.FeatureVerticesToPoints_management(
        theFlowline, "in_memory/thePoint", "END")
    #Trace from this point downstream to the end of the HUC8 geometric network
    theTraceLyr = arcpy.TraceGeometricNetwork_management(
        flownet, "DownStrmLyr", theFlowpoint, "TRACE_DOWNSTREAM")
    #Extract the line feature
    theTraceLine = arcpy.SelectData_management(theTraceLyr,
                                               os.path.basename(flownetFC))
    #Make a new feature layer of catchments and select those that intersect the downstream trace
    theCatchLyr = arcpy.MakeFeatureLayer_management(catchFC, "theCatch")
    theCatchments = arcpy.SelectLayerByLocation_management(
        theCatchLyr, "INTERSECT", theTraceLine)
    #Create a list of catchment GRIDCODEs in the selected catchments
    outGridcodes = []
    with arcpy.da.SearchCursor(theCatchments, "GRIDCODE") as cur:
        for rec in cur:
            outGridcodes.append(rec[0])
    return outGridcodes
Exemple #2
0
def get_distance(points):
    point = arcpy.Point()
    pointGeometryList = []
    for pt in points:
        point.X = pt[0]
        point.Y = pt[1]
        pointGeometry = arcpy.PointGeometry(point).projectAs(
            arcpy.SpatialReference(4326))
        pointGeometryList.append(pointGeometry)
    arcpy.CopyFeatures_management(pointGeometryList, m)
    arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "0 Miles", "",
                          "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP",
                          "0 Miles", "INCLUDE", "")  # just in case
    try:
        arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "")
        arcpy.SelectData_management(B1_route, "Routes")
        arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "",
                                       "ATTRIBUTES")
    except:
        return 999999
    try:
        arcpy.Append_management(feature, empty_memory)
    except:
        arcpy.CopyFeatures_management(feature, empty_memory)
    return ([f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH')][0])
Exemple #3
0
def get_dist(points, current_id, buffer_id):
    point = arcpy.Point()
    pointGeometryList = []
    for pt in points:
        point.X = pt[0]
        point.Y = pt[1]
        pointGeometry = arcpy.PointGeometry(point).projectAs(
            arcpy.SpatialReference(4326))
        pointGeometryList.append(pointGeometry)
    arcpy.CopyFeatures_management(pointGeometryList, m)
    arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "0 Miles", "",
                          "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP",
                          "0 Miles", "INCLUDE", "")  # just in case
    try:
        arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "")
        arcpy.SelectData_management(B1_route, "Routes")
        arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "",
                                       "ATTRIBUTES")
    except:
        print "Cannot Solve"
        return [], 999999
    arcpy.AddField_management(feature, "curr_id", "LONG")
    arcpy.AddField_management(feature, "buffer_id", "LONG")
    arcpy.CalculateField_management(feature, "curr_id", current_id, "PYTHON")
    arcpy.CalculateField_management(feature, "buffer_id", buffer_id, "PYTHON")
    arcpy.SelectLayerByLocation_management("newlf", "WITHIN", feature)
    _list_ = [f[0] for f in arcpy.da.SearchCursor("newlf", '_ID_')]
    return _list_, ([
        f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH')
    ][0])
Exemple #4
0
def add_route_to_layer(linkid, points, sumlayer):
    point = arcpy.Point()
    pointGeometryList = []
    for pt in points:
        point.X = pt[0]
        point.Y = pt[1]
        pointGeometry = arcpy.PointGeometry(point).projectAs(
            arcpy.SpatialReference(4326))
        pointGeometryList.append(pointGeometry)
    arcpy.CopyFeatures_management(pointGeometryList, m)
    arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "2 Meters", "",
                          "", "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP",
                          "2 Meters", "INCLUDE", "")
    try:
        arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", near_snap_dist)
        arcpy.SelectData_management(B1_route, "Routes")
        arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "",
                                       "ATTRIBUTES")
        arcpy.CalculateField_management(
            feature, "FID_Routes", linkid,
            "PYTHON")  # since ID field is not available
    except:
        print("Route not found. 999999 Returned")
        return 999999
    arcpy.Merge_management([feature, sumlayer], temp2)
    arcpy.Copy_management(temp2, sumlayer)
    return 0
def get_length_route(points):
    point = arcpy.Point()
    pointGeometryList = []
    for pt in points:
        point.X = pt[0]
        point.Y = pt[1]
        pointGeometry = arcpy.PointGeometry(point).projectAs(arcpy.SpatialReference(4326))
        pointGeometryList.append(pointGeometry)
    arcpy.CopyFeatures_management(pointGeometryList, m)
    arcpy.AddLocations_na(route_f, "Stops", m, "Name Name #", "0.5 Miles", "", "", "MATCH_TO_CLOSEST", "CLEAR",
                          "NO_SNAP", "10 Meters", "INCLUDE", "")
    arcpy.Solve_na(route_f, "SKIP", "TERMINATE", "500 Kilometers")
    arcpy.SelectData_management(route_f, "Routes")
    arcpy.FeatureToLine_management(route_f + "\\Routes", f, "", "ATTRIBUTES")
    # corrected to "Total_Length" from "Total_Leng"
    leng = [row.getValue("Total_Length") for row in arcpy.SearchCursor(f)][0] / 1609.34
    return leng
def get_dist_AB(fips_a, fips_b):
    arcpy.Select_analysis(snapped_dumm, m,
                          'FIPS = {0} OR FIPS = {1}'.format(fips_a, fips_b))
    arcpy.AddLocations_na("Route", "Stops", m, "Name Name #",
                          "5000 Kilometers", "",
                          "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST",
                          "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE",
                          "B1 #;B1_ND_Junctions #")
    try:
        arcpy.Solve_na("Route", "SKIP", "TERMINATE", "5000 Kilometers")
    except:
        return [9999999, 9999999]
    arcpy.SelectData_management("Route", "Routes")
    #arcpy.CopyFeatures_management("Route/Routes", feature)
    arcpy.FeatureToLine_management("Route/Routes", feature)
    dummy = [[row[0], row[1] * 0.000621371] for row in arcpy.da.SearchCursor(
        feature, ['Total_resi', "SHAPE@LENGTH"], spatial_reference=sr)][0]
    return dummy
def get_shortest_path_link_ids(fips_a, fips_b):
    #print ("ArgGIS analyst: Job Received, OFIPS: {0}, DFIPS: {1} *".format(fips_a, fips_b))
    arcpy.CheckOutExtension("Network")
    arcpy.Select_analysis(snapped_fips, o, 'FIPS = {0}'.format(fips_a))
    arcpy.Select_analysis(snapped_fips, d, 'FIPS = {0}'.format(fips_b))
    arcpy.Merge_management([o, d], m)
    arcpy.AddLocations_na("Route", "Stops", m, "Name Name #", "5000 Kilometers", "",
                          "B1 SHAPE;B1_ND_Junctions SHAPE",
                          "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE", "B1 #;B1_ND_Junctions #")
    try:
        arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers")
        arcpy.SelectData_management("Route", "Routes")
        arcpy.FeatureToLine_management("Route/Routes", feature, "", "ATTRIBUTES")
    except:
         print ("Route between FIPS: {0} and {1} not found.".format(fips_a,fips_b))
         unknown_routes_dict[fips_a]=fips_b
         return []
    arcpy.SelectLayerByLocation_management(alllinks_f,"INTERSECT",feature, "", "NEW_SELECTION", "NOT_INVERT")
    dummy = [row.getValue("OBJECTID") for row in arcpy.SearchCursor(alllinks_f)]
    return dummy
def get_dist_AB(fips_a, fips_b):
    #print ("ArgGIS analyst: Job Received, ONODE: {0}, DNODE: {1} *".format(fips_a, fips_b))
    arcpy.CheckOutExtension("Network")
    arcpy.Select_analysis(snapped_dumm, o, 'FIPS = {0}'.format(fips_a))
    arcpy.Select_analysis(snapped_dumm, d, 'FIPS = {0}'.format(fips_b))
    arcpy.Merge_management([o, d], m)
    arcpy.AddLocations_na("Route", "Stops", m, "Name Name #",
                          "5000 Kilometers", "",
                          "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST",
                          "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE",
                          "B1 #;B1_ND_Junctions #")
    try:
        arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers")
        arcpy.SelectData_management("Route", "Routes")
        arcpy.FeatureToLine_management("Route/Routes", feature, "",
                                       "ATTRIBUTES")
    except:
        print("Route not found. 999999 Returned")
        return -99
    dummy = [
        row.getValue("Total_Leng") for row in arcpy.SearchCursor(feature)
    ][0]
    return dummy * 0.000621371
def add_route_to_layer(nodeA, nodeB, sumlayer):
    print("ArgGIS analyst: Job Received, ONODE: {0}, DNODE: {1} *".format(
        nodeA, nodeB))  # *these nodes are in different layers
    arcpy.CheckOutExtension("Network")
    arcpy.Select_analysis(SnappedNodes, o, 'ID = {0}'.format(nodeA))
    arcpy.Select_analysis(SnappedNodes, d, 'ID = {0}'.format(nodeB))
    arcpy.Merge_management([o, d], m)
    arcpy.AddLocations_na("Route", "Stops", m, "Name Name #",
                          "5000 Kilometers", "",
                          "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST",
                          "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE",
                          "B1 #;B1_ND_Junctions #")
    try:
        arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers")
        arcpy.SelectData_management("Route", "Routes")
        arcpy.FeatureToLine_management("Route\\Routes", feature, "",
                                       "ATTRIBUTES")
    except:
        print("Route not found. 999999 Returned")
        return 0
    arcpy.Merge_management([feature, sumlayer], templayer)
    arcpy.Copy_management(templayer, sumlayer)
    return 0
def get_dist(points, current_id, buffer_id):
    if points[0] == points[
            1]:  # if both the snapped connecting node and the point being tested is the same
        return [], 0
    arcpy.MakeFeatureLayer_management(new_l, "newlf")
    arcpy.MakeRouteLayer_na(B1_ND, B1_route, "Length")
    # print current_id
    # print buffer_id
    point = arcpy.Point()
    pointGeometryList = []
    for pt in points:
        point.X = pt[0]
        point.Y = pt[1]
        pointGeometry = arcpy.PointGeometry(point).projectAs(sr_g)
        pointGeometryList.append(pointGeometry)
    arcpy.CopyFeatures_management(pointGeometryList, m)
    arcpy.AddLocations_na(B1_route, "Stops", m, "Name Name #", "", "", "",
                          "MATCH_TO_CLOSEST", "CLEAR", "NO_SNAP", "",
                          "INCLUDE", "")  # just in case
    try:
        arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "")
    except:
        return {}, 99999
    #arcpy.Solve_na(B1_route, "SKIP", "TERMINATE", "")

    arcpy.SelectData_management(B1_route, "Routes")
    arcpy.FeatureToLine_management(B1_route + "/Routes", feature, "",
                                   "ATTRIBUTES")
    arcpy.AddField_management(feature, "curr_id", "LONG")
    arcpy.AddField_management(feature, "buffer_id", "LONG")
    arcpy.CalculateField_management(feature, "curr_id", current_id, "PYTHON")
    arcpy.CalculateField_management(feature, "buffer_id", buffer_id, "PYTHON")
    arcpy.SelectLayerByLocation_management("newlf", "WITHIN", feature)
    _list_ = [f[0] for f in arcpy.da.SearchCursor("newlf", '_ID_')]
    return _list_, ([
        f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH', "", sr_p)
    ][0]) / 1604.34
Exemple #11
0
def get_distance(nodeAlayer, nodeBlayer, nodeAColumnName, nodeBColumnName,
                 nodeA, nodeB):
    #create a set of origin and destination FIPS to be loaded in the network analyst
    #print ("ArgGIS analyst: Job Received, ONODE: {0}, DNODE: {1} *".format(nodeA, nodeB)) # *these nodes are in different layers
    sys.stdout.write('.')
    arcpy.CheckOutExtension("Network")
    arcpy.Select_analysis(nodeAlayer + ".shp", o,
                          '{0} = {1}'.format(nodeAColumnName, nodeA))
    arcpy.Select_analysis(nodeBlayer + ".shp", d,
                          '{0} = {1}'.format(nodeBColumnName, nodeB))
    arcpy.Merge_management([o, d], m)
    arcpy.AddLocations_na("Route", "Stops", m, "Name Name #",
                          "5000 Kilometers", "",
                          "B1 SHAPE;B1_ND_Junctions SHAPE", "MATCH_TO_CLOSEST",
                          "CLEAR", "NO_SNAP", "5 Meters", "INCLUDE",
                          "B1 #;B1_ND_Junctions #")
    try:
        arcpy.Solve_na("Route", "SKIP", "TERMINATE", "500 Kilometers")
        arcpy.SelectData_management("Route", "Routes")
        arcpy.FeatureToLine_management("Route\\Routes", feature, "",
                                       "ATTRIBUTES")
    except:
        return 999999
    return ([f[0] for f in arcpy.da.SearchCursor(feature, 'SHAPE@LENGTH')][0])
Exemple #12
0
    arcpy.AddLocations_na("OD Cost Matrix" + str(i), "Origins", "build_lyr", "Name Name #;TargetDestinationCount TargetDestinationCount #;CurbApproach CurbApproach 0;Cutoff_Length Cutoff_Length #;Cutoff_TravelTime_WithTransit Cutoff_TravelTime_WithTransit #", "5000 Meters", "", "Connectors_Stops2Streets SHAPE;Streets_UseThisOne SHAPE;TransitLines SHAPE;Stops SHAPE;Stops_Snapped2Streets SHAPE; NONE", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 Meters", "INCLUDE", "Connectors_Stops2Streets #;Streets_UseThisOne #;TransitLines #;Stops #;Stops_Snapped2Streets #;gtfs_2017_ND_Junctions #")

    # Process: Add Locations- Destinations
    arcpy.AddLocations_na("OD Cost Matrix" + str(i), "Destinations", "bldgs_all_centroid", "Name Name #;CurbApproach CurbApproach 0", "8000 Meters", "", "Connectors_Stops2Streets SHAPE;Streets_UseThisOne SHAPE;TransitLines SHAPE;Stops SHAPE;Stops_Snapped2Streets SHAPE;gtfs_2017_ND_Junctions NONE", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 Meters", "INCLUDE", "Connectors_Stops2Streets #;Streets_UseThisOne #;TransitLines #;Stops #;Stops_Snapped2Streets #;gtfs_2017_ND_Junctions #")

    #Omry: Check for add location (override)
    
    # Delete
    arcpy.Delete_management("build_lyr")
    
    try:
        # Process: Solve
        arcpy.Solve_na("OD Cost Matrix" + str(i), "SKIP", "TERMINATE", "")

        # Process: Select Data
        arcpy.SelectData_management("OD Cost Matrix" + str(i), "Lines")

        # Process: Copy Features
        env.workspace = "D:/Data_for_model/output"
		
        arcpy.CopyFeatures_management("Lines", "lines_" + str(i) + ".shp", "", "0", "0", "0")

        # Delete
        arcpy.Delete_management("OD Cost Matrix" + str(i))
		
		Print
		print("success! " + i)
		print(datetime.now())
		print(i)

    except:
def main(OriginFile):
 
    # Tarkistetaan tarvittavat Lisenssit
    arcpy.CheckOutExtension("Network")

    # ------------------------------------------
    # ArcGIS Serverille kovakoodatut parametrit
    # ------------------------------------------

    #fileNumber = [x for x in range(286,294)]


    #for fileindex in fileNumber:

    ##########################
    #Määritetään tiedostopolut
    ##########################

    Origins = OriginFile   #r"/home/MY_USERNAME/TTM/OD/Subsets/%s_Car_Matrix2015_Origs_KKJ2.shp" % fileindex
    Destinations = r"/home/MY_USERNAME/TTM/OD/Car_Matrix2015_Dest_KKJ2.shp"
    NetworkData = r"/home/MY_USERNAME/TTM/Digiroad/MetropAccess_Digiroad.gdb/MetropAccess_NetworkDataset/MetropAccess_NetworkDataset_ND"
    LiikenneElementit = r"/home/MY_USERNAME/TTM/Digiroad/MetropAccess_Digiroad.gdb/MetropAccess_NetworkDataset/METROPACCESS_DIGIROAD_LIIKENNE_ELEMENTTI"
    origin_fn = os.path.basename(Origins)[:-15]
    TulosNimi = "CarTT_Ruuhka_%s" % origin_fn
    Impedanssi = "Keskpva_aa"
    LaskKohteet = "ALL"
    Pysakointityyppi = ""
    Pysakointikentta = ""
    Kavelynopeus = 70.0
    Grafiikka = "false"

    #Environment määritykset:
    temp = r"/mnt/TTM_Results"


    print("---------------\nProcessing file: %s\n---------------" % os.path.basename(Origins))

    ElemKansio = os.path.dirname(NetworkData)
    OrigKansio = os.path.dirname(Origins)
    DestKansio = os.path.dirname(Destinations)
    arcpy.overwriteOutputs = True

    #Tsekataan onko temp geodatabase vai tavallinen kansio:
    if ".gdb" in temp or ".mdb" in temp:
        gdbCheck = True
        #Etsitään geodatabasen 'juuri'
        try:
            pos = temp.index('.gdb')
        except:
            pos = temp.index('.mdb')
        temp = temp[:pos+4]
    else:
        gdbCheck = False

    #Tsekataan sisältääkö TulosNimi välilyöntejä
    TulosNimi = TulosNimi.replace(" ", "_")

    ##############
    #METODIT
    ##############

    #Suoritusinfot:
    def Aloitus():
        aika = time.asctime()
        teksti = "Aloitus: " + aika
        print(teksti)

    def Valmis():
        aika = time.asctime()
        teksti = "Valmis: " + aika
        print(teksti)

    def msg(Message):
        print(Message)

    def virhe(Virheilmoitus):
        print(Virheilmoitus)
        sys.exit()
 
    def ExDel(haettava):
        if arcpy.Exists(haettava):
            arcpy.Delete_management(haettava)


    msg("------------------------------")
    msg("METROPACCESS-DIGIROAD")
    msg("MetropAccess-tutkimushanke")
    msg("HELSINGIN YLIOPISTO")
    msg("-------------------------------")
    msg("4. Kokonaismatkaketjun laskenta (sis. pysäköinti)")
    msg("-------------------------------")

    time.sleep(2.5)

    ################################################
    #TARKISTUKSET ENNEN LASKENTAA
    ################################################

    Aloitus()
    msg("TARKISTUKSET:")
    ##arcpy.SetProgressor("step", "KOKONAISMATKAKETJUN LASKENTA...Tarkistukset ennen laskentaa...", 0, 100, 5) #Luodaan suoritusinfopalkki

    #Tarkistetaan, että aineisto on joko EurefFinissä tai KKJ:ssa
    Desc = arcpy.Describe(NetworkData)
    NDProjektio = Desc.spatialReference.factoryCode

    msg("Tarkistetaan liikenneverkon projektio.")
    if NDProjektio == 3067 or NDProjektio == 2391 or NDProjektio == 2392 or NDProjektio == 2393 or NDProjektio == 2394 or NDProjektio == 104129:
        True
    else:
        virhe("Tieverkkoaineiston tulee olla projisoituna joko EUREF_FIN_TM35FIN:iin, GCS_EUREF_FIN:iin tai Finland_Zone_1, 2, 3 tai -4:ään (KKJ). Muuta Liikenne_elementti.shp projektio johonkin näistä Project -työkalulla, luo uusi Network Dataset perustuen tähän uuteen projisoituun LiikenneElementti -tiedostoon ja aja työkalu uudelleen.")
        
    #Tarkistetaan pysäköintikentän löytyminen:
    msg("Tarkistetaan pysäköintikentän löytyminen")
    if Pysakointityyppi == 5:
        fieldList = arcpy.ListFields(Destinations, Pysakointikentta)
        fieldCount = len(fieldList)
        if fieldCount == 1:
            teksti = "Käyttäjän määrittelemä pysäköintikenttä!"
            msg(teksti)
        elif Pysakointikentta == "":
            virhe("VIRHE! Pysäköintityypin määrittävää kenttää ei ole määritetty!")
        else:
            virhe("VIRHE! Pysäköintityypin määrittävää kenttää ei löydy taulusta! Tarkista, että pysäköintikenttä on luotu kohdetauluun ja että kirjoitusasu on oikein.")
    if Pysakointikentta == "":
        PysKenttaLog = "NONE"
            
    Valmis()

    #Tarkistetaan mitkä aikasakkolaskennan parametrit löytyvät NetworkDatasetistä:
    msg("Tarkistetaan kustannusparametrit")
    Aloitus()

    desc = arcpy.Describe(NetworkData)
    attributes = desc.attributes
    NDparams = []
    for attribute in attributes:
        NDparams.append(attribute.name)

    Haettava = ["Digiroa_aa", "Kokopva_aa", "Keskpva_aa", "Ruuhka_aa", "Pituus"]
    Nro = 0
    Accumulation = []
    for x in range(5):
        if Haettava[Nro] in NDparams:
            Accumulation.append(Haettava[Nro])
            Nro += 1
        else:
            Nro += 1
    Valmis()

    #Tarkistetaan löytyykö Impedanssi Accumulation taulusta, onko impedanssimuuttuja olemassa:
    msg("Tarkistetaan, että impedanssiatribuutti löytyy Network Datasetistä")
    Aloitus()

    if Impedanssi in NDparams:
        msg("Impedanssi määritetty!")
    else:
        virhe("VIRHE! Määriteltyä impedanssia ei ole määritelty Network Datasettiin. Tarkista, että muuttuja on todella olemassa\nja että Impedanssikentän kirjoitusasu täsmää käytettävän muuttujan kanssa. ")

    NDPath = desc.path
    NDsource = desc.edgeSources[0].name
    LE = os.path.join(NDPath, "%s.shp" % NDsource) #Parsitaan sourcedatan (Liikenne_Elementit) polku ja nimi
    del desc

    desc = arcpy.Describe(LiikenneElementit)
    basename = desc.baseName
    del desc

    if basename != NDsource: #Tarkistetaan onko inputiksi määritelty LiikenneElementti -tiedosto Network Datan todellinen source-layer:
        msg("LiikenneElementti -tiedosto ei ollut Network Datan source-layer. Vaihdettiin LiikenneElementti -tiedosto Network Datan Edge-sourceksi.")
        LiikenneElementit = LE
        
    if not Impedanssi in Accumulation:
        Accumulation.append(Impedanssi)
        msg("Käyttäjän määrittelemä impedanssi lisättiin Accumulation arvoihin!")
        
    #Tarkistetaan laskettavien kohteiden lukumäärä:
    LaskKohteet.replace(" ","")
    if LaskKohteet == "" or LaskKohteet == "ALL" or LaskKohteet == "all" or LaskKohteet == "All":
        LaskKohteet = ""
        LaskLogi = "ALL"
    elif LaskKohteet == "0":
        virhe("Laskettavia kohteita tulee olla vähintään yksi!")
    else:
        LaskKohteet = LaskKohteet
    Valmis()
    ##arcpy.SetProgressorPosition(5)
    msg("----------------------")


    #####################################################
    #***************************************************#
    # LASKENTA                                         *#
    #***************************************************#
    #####################################################

    msg("ALOITETAAN LASKENTA")
    msg("Luodaan tarvittavat attribuutit")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Luodaan tarvittavat attribuutit...")
    Aloitus()

    ################################################        
    #Tehdään tiedostoihin tarvittavat attribuutit
    ################################################

    #Origins:
    arcpy.AddField_management(Origins, "NameO", "TEXT")
    arcpy.AddField_management(Origins, "Kavely_O_T", "DOUBLE") #Kävelyaika lähtöpaikasta lähimpään tieverkkoon 
    arcpy.AddField_management(Origins, "Kavely_T_P", "DOUBLE") #Kävelyaika tieverkosta parkkipaikalle 

    #Ajoaika kentät:
    if "Digiroa_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Digiroa_aa", "DOUBLE")
    if "Kokopva_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Kokopva_aa", "DOUBLE")
    if "Keskpva_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Keskpva_aa", "DOUBLE")
    if "Ruuhka_aa" in Accumulation:
        arcpy.AddField_management(Origins, "Ruuhka_aa", "DOUBLE")
    if Impedanssi in Accumulation:                                  #Tehdään jos käyttäjä on haluaa käyttää jotain omaa impedanssiaan
        arcpy.AddField_management(Origins, Impedanssi, "DOUBLE")

    if "Pituus" in Accumulation:
        arcpy.AddField_management(Origins, "KavelMatkO", "DOUBLE") #Matka lähtöpaikasta parkkipaikalle kaupungin alueella/kaupungin ulkopuolella
        arcpy.AddField_management(Origins, "KavelDistO", "DOUBLE") #Kävelymatka lähtöpaikasta lähimpään tieverkkopisteeseen

    #Destinations:
    ##arcpy.AddField_management(Destinations, "NameD", "TEXT")
    ##arcpy.AddField_management(Destinations, "Parkkiaika", "DOUBLE") #Parkkipaikan etsintään kuluva aika 
    ##arcpy.AddField_management(Destinations, "Kavely_P_T", "DOUBLE") #Kävelyaika parkkipaikalta lähimpään tieverkkoon 
    ##arcpy.AddField_management(Destinations, "Kavely_T_D", "DOUBLE") #Kävelyaika lähimmästä tieverkkopisteestä kohteeseen 
    ##
    ##if "Pituus" in Accumulation:
    ##    arcpy.AddField_management(Destinations, "KavelMatkD", "DOUBLE") #Kävelymatka parkkipaikalta lähimpään tieverkkopisteeseen
    ##    arcpy.AddField_management(Destinations, "KavelDistD", "DOUBLE") #Kävelymatka lähimmästä tieverkkopisteestä kohteeseen kantakaupungin alueella/kaupungin ulkopuolella

    Valmis()
    ##arcpy.SetProgressorPosition(10)
    msg("----------------------")

    #Tehdään id-kentät
    msg("Luodaan ID-kentät")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Luodaan ID-kentät...")
    Aloitus()

    #Rivi_id ei täsmää geodatabasessa ja shapefileessä!! Tsekataan onko tiedostot mdb:ssä tai gdb:ssä
    if ".mdb" in Origins or ".gdb" in Origins:
        OrigNameID = "'O' + str(!OBJECTID!)"
    else:
        OrigNameID = "'O' + str(!FID!)"

    if ".mdb" in Destinations or ".gdb" in Destinations:
        DestNameID = "'D' + str(!OBJECTID!)"
    else:
        DestNameID = "'D' + str(!FID!)"

    arcpy.CalculateField_management(Origins, "NameO", OrigNameID, "PYTHON", "")
    ##arcpy.CalculateField_management(Destinations, "NameD", DestNameID, "PYTHON", "")

    Valmis()
    ##arcpy.SetProgressorPosition(15)
    msg("----------------------")

    ###############################################
    #Lasketaan pisteiden etäisyydet tieverkostosta
    ###############################################

    msg("Lasketaan kävelyaika ja matka tieverkostosta")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lasketaan kävelyaika ja matka tieverkostosta...")
    Aloitus()

    arcpy.Near_analysis(Origins, LiikenneElementit, "3000 Meters", "NO_LOCATION", "NO_ANGLE")
    ##arcpy.Near_analysis(Destinations, LiikenneElementit, "3000 Meters", "NO_LOCATION", "NO_ANGLE")

    #Lasketaan kävelyaika ja matka tieverkostosta:
    OrigReader = arcpy.UpdateCursor(Origins)
    ##DestReader = arcpy.UpdateCursor(Destinations)

    for row in OrigReader:
        row.Kavely_O_T = row.NEAR_DIST / Kavelynopeus
        row.KavelDistO = row.NEAR_DIST
        OrigReader.updateRow(row)
        del row

    ##for row in DestReader:
    ##    row.Kavely_T_D = row.NEAR_DIST / Kavelynopeus
    ##    row.KavelDistD = row.NEAR_DIST
    ##    DestReader.updateRow(row)
    ##    del row

    del OrigReader
    ##del DestReader

    Valmis()
    ##arcpy.SetProgressorPosition(20)
    msg("----------------------")

    ####################################################################################
    #Lasketaan parkkipaikan etsintään menevä aika perustuen käyttäjän parametreihin
    ####################################################################################

    # Pysäköintityypit - etsintäaika (minuuteissa):
    # 0: Ei oteta huomioon 
    # 1: Keskiarvo - 0.42 (oletus)
    # 2: Kadunvarsipaikka - 0.73
    # 3: Pysäköintitalo - 0.22
    # 4: Erillisalueet - 0.16
    # 5: Pysäköintityyppi löytyy käyttäjän määrittämästä kentästä
    # Pysakointikentta: <String> - Käyttäjän määrittämä kenttä, josta löytyy pysäköintityyppi
    #------------------------------------------------------------------------------------------

    msg("Lasketaan pysäköintipaikan etsintään kuluva aika")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lasketaan pysäköintipaikan etsintään kuluva aika...")
    Aloitus()

    if Pysakointityyppi == 0:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0 ", "PYTHON")
    elif Pysakointityyppi == 1:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.42 ", "PYTHON")

    elif Pysakointityyppi == 2:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.73 ", "PYTHON")

    elif Pysakointityyppi == 3:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.22 ", "PYTHON")

    elif Pysakointityyppi == 4:
        arcpy.CalculateField_management(Destinations, "Parkkiaika", "0.16 ", "PYTHON")

    elif Pysakointityyppi == 5: #Käyttäjä määritellyt pysäköintityypin Kohdepiste-tiedostoon
        DestReader = arcpy.UpdateCursor(Destinations)
        for row in DestReader:
            if row.getValue(Pysakointikentta) == 0:
                row.Parkkiaika = 0
            elif row.getValue(Pysakointikentta) == 1:
                row.Parkkiaika = 0.42
            elif row.getValue(Pysakointikentta) == 2:
                row.Parkkiaika = 0.73
            elif row.getValue(Pysakointikentta) == 3:
                row.Parkkiaika = 0.22
            elif row.getValue(Pysakointikentta) == 4:
                row.Parkkiaika = 0.16
            else:
                row.Parkkiaika = 0
                msg("Kohteelle asetettu pysäköintityypin arvo on sallittujen arvojen (0-4) ulkopuolella! Kohteen pysäköintityyppiä ei oteta huomioon.")
            DestReader.updateRow(row)
            del row
        del DestReader

    Valmis()
    ##arcpy.SetProgressorPosition(25)
    msg("----------------------")

    #######################################################
    #Kantakaupunki polygonin luominen laskentaa varten:
    #######################################################

    msg("Luodaan kantakaupunkipolygoni")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Luodaan kantakaupunkipolygoni...")
    Aloitus()


    env.workspace = temp

    coordList = [[387678.024778,6675360.99039],[387891.53396,6670403.35286],[383453.380944,6670212.21613],[383239.871737,6675169.85373],[387678.024778,6675360.99039]] #Koordinaatit ovat EUREF_FIN_TM35FIN:issä

    point = arcpy.Point()
    array = arcpy.Array()

    #Lisätään koordinaatit Arrayhin:
    for coordPair in coordList:
        point.X = coordPair[0]
        point.Y = coordPair[1]
        array.add(point)

    Kantakaupunki = arcpy.Polygon(array)

    #Määritetään Spatial Reference:
    sr = arcpy.SpatialReference()
    sr.factoryCode = 3067 #EUREF_FIN_TM35FIN
    sr.create()

    #Luodaan kantakaupunki tiedosto:
    if gdbCheck == True:
        Kantis = os.path.join(temp,"Kantakaupunki")
    else:
        Kantis = os.path.join(temp,"Kantakaupunki.shp")
        
    ExDel(Kantis)
    arcpy.Select_analysis(Kantakaupunki, Kantis)

    #Määritetään kantakaupungille projektio:
    arcpy.DefineProjection_management(Kantis, sr)

    msg("Luotiin kantakaupunki")
    Valmis()
    ##arcpy.SetProgressorPosition(30)
    msg("----------------------")

    ###################################################
    #MÄÄRITETÄÄN TIEDOSTOT SAMAAN KOORDINAATISTOON
    ###################################################

    msg("Määritetään tiedostot samaan koordinaatistoon")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Määritetään tiedostot samaan koordinaatistoon...")
    Aloitus()

    #Destinations:
    DDesc = arcpy.Describe(Destinations)
    DestProjektio = DDesc.spatialReference.Name
    DFactCode = DDesc.spatialReference.factoryCode
    DProj = DestProjektio[:8]

    if gdbCheck == True:
        KohdePath = os.path.join(temp, "DestinationsProj")
        LahtoPath = os.path.join(temp, "OriginsProj")
        KantisPath = os.path.join(temp, "KantisProj")

    else:
        KohdePath = os.path.join(temp, "DestinationsProj.shp")
        LahtoPath = os.path.join(temp, "OriginsProj.shp")
        KantisPath = os.path.join(temp, "KantisProj.shp")

    ExDel(KohdePath)
    ExDel(LahtoPath)
    ExDel(KantisPath)

    #Origins:
    ODesc = arcpy.Describe(Origins)
    OrigProjektio = ODesc.spatialReference.Name
    OFactCode = ODesc.spatialReference.factoryCode
    OProj = OrigProjektio[:8]

    #Luodaan spatial reference perustuen NetworkDatan SR:een:
    del sr
    sr = arcpy.SpatialReference()
    if NDProjektio == 3067: #EurefFin
        sr.factoryCode = 3067
        sr.create()
    elif NDProjektio == 104129: #GCS_EurefFIN
        sr.factoryCode = 104129
        sr.create()
    elif NDProjektio == 2391: #KKJ1
        sr.factoryCode = 2391
        sr.create()
    elif NDProjektio == 2392: #KKJ2
        sr.factoryCode = 2392
        sr.create()
    elif NDProjektio == 2393: #KKJ3
        sr.factoryCode = 2393
        sr.create()
    elif NDProjektio == 2394: #KKJ4
        sr.factoryCode = 2394
        sr.create()

    #Määritetään Kohteille ja Lähtöpaikoille oikea projektio, jos NetworkData on EUREF_FIN_TM35FIN:issä tai GCS_EUREF_FIN:issä::
    if NDProjektio == 3067 or NDProjektio == 104129:
        if NDProjektio == 104129:
            arcpy.Project_management(Kantis, KantisPath, sr, "") #Määritetään kantakaupunki samaan koordinaatistoon
            Kantakaupunki = KantisPath

    #Destinations:
        if NDProjektio != DFactCode: #Jos Network Data ja Destinationit ovat eri koordinaatistossa:
            if DFactCode >= 2391 and DFactCode <= 2394:
                Dtransform_method = "KKJ_To_EUREF_FIN"
            elif DFactCode == 3067:
                Dtransform_method = ""
            elif DProj == "WGS_1984" or DFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Dtransform_method = "EUREF_FIN_To_WGS_1984"
            elif DProj == "ETRS_198":
                Dtransform_method = "EUREF_FIN_To_ETRS_1989"
            else:
                virhe("Kohdepisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")
                   
            arcpy.Project_management(Destinations, KohdePath, sr, Dtransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Destinations = KohdePath
            msg("Kohdepaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

    #Origins:
        if NDProjektio != OFactCode: #Jos Network Data ja Originit ovat eri koordinaatistossa:
            if OFactCode >= 2391 and OFactCode <= 2394:
                Otransform_method = "KKJ_To_EUREF_FIN"
            elif OFactCode == 3067:
                Otransform_method = ""
            elif OProj == "WGS_1984" or OFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Otransform_method = "EUREF_FIN_To_WGS_1984"
            elif OProj == "ETRS_198":
                Otransform_method = "EUREF_FIN_To_ETRS_1989"
            else:
                virhe("Lähtöpisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")
            
            arcpy.Project_management(Origins, LahtoPath, sr, Otransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Origins = LahtoPath
            msg("Lähtöpaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

    #Määritetään Kohteille ja Lähtöpaikoille oikea projektio, jos NetworkData on KKJ:ssa:
    elif NDProjektio == 2391 or NDProjektio == 2392 or NDProjektio == 2393 or NDProjektio == 2394:
        arcpy.Project_management(Kantis, KantisPath, sr, "KKJ_To_EUREF_FIN") #Määritetään kantakaupunki samaan koordinaatistoon
        Kantakaupunki = KantisPath
        
        if NDProjektio != DFactCode: #Jos NetworkData ja kohdepisteet ovat eri KKJ:ssa projisoidaan ne samaan.
            if DFactCode >= 2391 and DFactCode <= 2394:
                Dtransform_method = ""
            elif DProj == "WGS_1984" or DFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Dtransform_method = "KKJ_To_WGS_1984_2_JHS153"
            elif DProj == "ETRS_198":
                Dtransform_method = "KKJ_To_ETRS_1989_2"
            else:
                virhe("Kohdepisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")
            
            arcpy.Project_management(Destinations, KohdePath, sr, Dtransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Destinations = KohdePath
            msg("Kohdepaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

        if NDProjektio != OFactCode: #Jos NetworkData ja kohdepisteet ovat eri KKJ:ssa projisoidaan ne samaan.
            if OFactCode >= 2391 and OFactCode <= 2394:
                Otransform_method = ""
            elif OProj == "WGS_1984" or OFactCode == 4326: #Projected WGS_1984 tai GCS_WGS_1984
                Otransform_method = "KKJ_To_WGS_1984_2_JHS153"
            elif OProj == "ETRS_198":
                Otransform_method = "KKJ_To_ETRS_1989_2"
            else:
                virhe("Lähtöpisteet tulee olla projisoituna johonkin seuraavista koordinaatistoista:")
                virhe("KKJ, EUREF_FIN, WGS_1984, ETRS_1989")

            arcpy.Project_management(Origins, LahtoPath, sr, Otransform_method) #Määritetään Destinationit samaan koordinaatistoon
            Origins = LahtoPath
            msg("Lähtöpaikkojen projektio vaihdettiin samaksi kuin Network Datalla. Luotiin kopio tiedostosta.")

    Valmis()
    ##arcpy.SetProgressorPosition(35)
    msg("----------------------")

    ##################################
    #LASKETAAN KÄVELYYN KULUVA AIKA
    ##################################
        
    #Tehdään Feature Layerit spatiaalista valintaa varten:
    Orig_lyr = "Orig_lyr"
    Dest_lyr = "Dest_lyr"
    OrigPath = Orig_lyr + ".lyr"
    DestPath = Dest_lyr + ".lyr"

    env.workspace = OrigKansio


    ExDel(Orig_lyr)   #Varmistetaan ettei FeatureLayeria ole jo olemassa

    env.workspace = DestKansio

    ExDel(Dest_lyr)   #Varmistetaan ettei FeatureLayeria ole jo olemassa
        
    arcpy.MakeFeatureLayer_management(Origins, Orig_lyr, "", OrigKansio)
    arcpy.MakeFeatureLayer_management(Destinations, Dest_lyr, "", DestKansio)

    #Valitaan kohteet, jotka ovat kantakaupungin sisällä:
    arcpy.SelectLayerByLocation_management(Orig_lyr, "INTERSECT", Kantakaupunki, "", "NEW_SELECTION")
    ##arcpy.SelectLayerByLocation_management(Dest_lyr, "INTERSECT", Kantakaupunki, "", "NEW_SELECTION")

    #Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin alueella:
    #Kantakaupungissa matka autolle on 180 metriä

    msg("Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin alueella")
    ##arcpy.ResetProgressor()
    ##arcpy.SetProgressor("step", "KOKONAISMATKAKETJUN LASKENTA...Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin alueella...", 0, 100, 5)
    ##arcpy.SetProgressorPosition(40)
    Aloitus()

    # Calculate walking times with Field Calculator
    expression = "180.0 / %s" % Kavelynopeus
    arcpy.CalculateField_management(Orig_lyr, "Kavely_T_P", expression, "PYTHON", "")
    expression2 = "180.0"
    arcpy.CalculateField_management(Orig_lyr, "KavelMatkO", expression2, "PYTHON", "")

    ##OrigReader = arcpy.UpdateCursor(Orig_lyr)
    ##DestReader = arcpy.UpdateCursor(Dest_lyr)

    ##for row in OrigReader:
    ##    row.Kavely_T_P = 180.0 / Kavelynopeus
    ##    row.KavelMatkO = 180.0
    ##    OrigReader.updateRow(row)
    ##    del row

    ##for row in DestReader:
    ##    row.Kavely_P_T = 180.0 / Kavelynopeus
    ##    row.KavelMatkD = 180.0
    ##    DestReader.updateRow(row)
    ##    del row

    ##del OrigReader
    ##del DestReader

    Valmis()
    ##arcpy.SetProgressorPosition(40)
    msg("----------------------")

    #Vaihdetaan valinta kantakaupungin ulkopuolisille alueille:
    arcpy.SelectLayerByAttribute_management(Orig_lyr, "SWITCH_SELECTION", "")
    ##arcpy.SelectLayerByAttribute_management(Dest_lyr, "SWITCH_SELECTION", "")

    #Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin ulkopuolella:
    #Kantakaupungin ulkopuolella matka autolle on 135 metriä

    msg("Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin ulkopuolella")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lasketaan aika ja matka lähtöpaikasta parkkipaikalle/parkkipaikalta kohteeseen kantakaupungin ulkopuolella...")
    Aloitus()

    # Calculate walking times with Field Calculator
    expression = "135.0 / %s" % Kavelynopeus
    arcpy.CalculateField_management(Orig_lyr, "Kavely_T_P", expression, "PYTHON", "")
    expression2 = "135.0"
    arcpy.CalculateField_management(Orig_lyr, "KavelMatkO", expression2, "PYTHON", "")


    ##OrigReader = arcpy.UpdateCursor(Orig_lyr)
    ##DestReader = arcpy.UpdateCursor(Dest_lyr)

    ##for row in OrigReader:
    ##    row.Kavely_T_P = 135.0 / Kavelynopeus
    ##    row.KavelMatkO = 135.0
    ##    OrigReader.updateRow(row)
    ##    del row

    ##for row in DestReader:
    ##    row.Kavely_P_T = 135.0 / Kavelynopeus
    ##    row.KavelMatkD = 135.0
    ##    DestReader.updateRow(row)
    ##    del row

    ##del OrigReader
    ##del DestReader

    #Poistetaan valinnat:
    arcpy.SelectLayerByAttribute_management(Orig_lyr, "CLEAR_SELECTION", "")
    ##arcpy.SelectLayerByAttribute_management(Dest_lyr, "CLEAR_SELECTION", "")


    #####################################
    #REITITYS: OD-COST MATRIX LASKENTA
    #####################################

    #Tarkistetaan onko aiempia OD-Cost-Matrixeja ja luodaan uniikki nimi:
    env.workspace = temp
    ODnimi = "Kokonaismatkaketju_ODC_MATRIX"
    ODPath = ODnimi + ".lyr"

    ExDel(ODnimi)
        
    Valmis()
    ##arcpy.SetProgressorPosition(45)
    msg("----------------------")

    #Tehdään OD Cost Matrix Layer:
    msg("Tehdään OD Cost Matrix Layer")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Tehdään OD-Cost-Matrix Layer...")
    Aloitus()

    if Grafiikka == "true" or "True":
        GrafOut = "STRAIGHT_LINES"
    else:
        GrafOut = "NO_LINES"

    if "Hierarkia" in NDparams:
        Hierarkia = "USE_HIERARCHY"
    else:
        Hierarkia = "NO_HIERARCHY"

    arcpy.MakeODCostMatrixLayer_na(NetworkData, ODnimi, Impedanssi, "", LaskKohteet, Accumulation, "ALLOW_DEAD_ENDS_ONLY", "", Hierarkia, "", GrafOut)

    #Lisätään OD cost matrix Locationit ja määritetään parametrit:
    msg("Lisätään OD cost matrix Locationit")
    Aloitus()

    Lahtopaikat = Orig_lyr
    Kohdepaikat = Dest_lyr

    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lisätään OD-cost-matrix Lähtöpaikat...Tässä menee hetki...")                                                                            
    arcpy.AddLocations_na(ODnimi, "Origins", Lahtopaikat, "Name NameO #", "5000 Meters", "", "", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "", "EXCLUDE", "")
    ##arcpy.SetProgressorPosition(55)
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Lisätään OD-cost-matrix Kohdepaikat...Tässä menee hetki...") 
    arcpy.AddLocations_na(ODnimi, "Destinations", Kohdepaikat, "Name NameD #", "5000 Meters", "", "", "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "", "EXCLUDE", "")

    ##arcpy.SetProgressorPosition(65)
    Valmis()
    msg("----------------------")

    #Suoritetaan OD cost matrix laskenta:
    msg("Suoritetaan OD-cost-matrix laskenta")
    ##arcpy.SetProgressorLabel("KOKONAISMATKAKETJUN LASKENTA...Suoritetaan OD-cost-matrix laskenta...") 
    Aloitus()

    arcpy.Solve_na(ODnimi, "SKIP", "TERMINATE")
    Valmis()
    ##arcpy.SetProgressorPosition(70)
    msg("----------------------")

    ################################################################################
    #JOINATAAN KOKONAISMATKOIHIN TIEDOT KOHDE/LÄHTÖPISTEISTÄ (kävelyyn kuluva aika)
    ################################################################################

    #Valitaan muokattavaksi OD C M:n Lines layer:
    arcpy.SelectData_management(ODnimi, "Lines")
    Lines = ODnimi + "/" + "Lines"

    #Lisätään Lines_lyr:iin tarvittavat kentät Joinin mahdollistamiseksi:
    arcpy.AddFieldToAnalysisLayer_na(ODnimi, "Lines", "LahtoNimi", "TEXT")
    arcpy.AddFieldToAnalysisLayer_na(ODnimi, "Lines", "KohdeNimi", "TEXT")

    #Muodostetaan Joinin id-kentät:
    arcpy.CalculateField_management(Lines, "LahtoNimi", "!Name!.split(\" -\")[0]", "PYTHON_9.3")
    arcpy.CalculateField_management(Lines, "KohdeNimi", "!Name!.split(\"- \")[1]", "PYTHON_9.3")

    #Eksportataan Line-feature shapeksi, jotta Join saadaan toimimaan:
    if gdbCheck == True:

        #Geodatabasessa tiedostonimessä ei saa olla tiedostomuodon päätettä (.shp)
        if ".shp" in TulosNimi:
            OutLineNimi = TulosNimi[:-4] 
        else:
            OutLineNimi = TulosNimi
    else:
        if not ".shp" in TulosNimi:
            OutLineNimi = TulosNimi + ".shp"
        else:
            OutLineNimi = TulosNimi
            
    env.workspace = temp
    nameCheck = os.path.join(temp, OutLineNimi)

    if arcpy.Exists(nameCheck):
        unique = arcpy.CreateUniqueName(nameCheck)
        OutLines = unique
        Outnimi = string.split(unique, ".")[0]
        LogName = Outnimi
        
    else:
        OutLines = nameCheck
        Outnimi = nameCheck

    # Save Lines to disk
    msg("----------------------")
    Aloitus()
    msg("Save preliminary results to disk")
    arcpy.Select_analysis(Lines, OutLines)
    Valmis()
    msg("----------------------")

    #Poistetaan väliaikaistiedostot:
    env.workspace = temp
    ExDel(KohdePath)
    ExDel(LahtoPath)
    ExDel(KantisPath)
    ExDel(Kantis)

    # Return filepath to Shapefile
    return [OutLines, Origins, Destinations]
    Feeders, "", "", "", "TRIM_POLYS", distance_from_line)
Existing_TX_SA = Existing_TX_SA.getOutput(0)

#Load Elements
arcpy.na.AddLocations(Existing_TX_SA, "Facilities", Existing_TX, "",
                      "25 Meters")
arcpy.na.AddLocations(Existing_TX_SA, "Facilities", Injection_TX, "",
                      "25 Meters")

#Solve
arcpy.na.Solve(Existing_TX_SA, "SKIP")

#CHECK FOR ERRORS

#Export polygon layer
Existing_TX_Polygons_300m = arcpy.SelectData_management(
    Existing_TX_SA, "Polygons")

#C2#
Existing_TX_SA_600m = arcpy.na.MakeServiceAreaLayer(
    network, "Existing_TX_SA_600m", "Length", "TRAVEL_FROM", "600",
    "DETAILED_POLYS", "MERGE", "DISKS", "NO_LINES", "NON_OVERLAP", "NO_SPLIT",
    Feeders, "", "", "", "TRIM_POLYS", distance_from_line)
#Existing_TX_SA_600m = Existing_TX_Polygons_600m.getOutput(0)

#Load Elements
arcpy.na.AddLocations(Existing_TX_SA_600m, "Facilities", Injection_TX, "",
                      "25 Meters")
arcpy.na.AddLocations(Existing_TX_SA_600m, "Facilities", Existing_TX, "",
                      "25 Meters")

#Solve
msg("Suoritetaan OD-cost-matrix laskenta")
arcpy.SetProgressorLabel(
    "KOKONAISMATKAKETJUN LASKENTA...Suoritetaan OD-cost-matrix laskenta...")
Aloitus()

arcpy.Solve_na(ODnimi, "SKIP", "TERMINATE")
Valmis()
arcpy.SetProgressorPosition(70)
msg("----------------------")

################################################################################
#JOINATAAN KOKONAISMATKOIHIN TIEDOT KOHDE/LÄHTÖPISTEISTÄ (kävelyyn kuluva aika)
################################################################################

#Valitaan muokattavaksi OD C M:n Lines layer:
arcpy.SelectData_management(ODnimi, "Lines")
Lines = ODnimi + "/" + "Lines"

#Lisätään Lines_lyr:iin tarvittavat kentät Joinin mahdollistamiseksi:
arcpy.AddFieldToAnalysisLayer_na(ODnimi, "Lines", "LahtoNimi", "TEXT")
arcpy.AddFieldToAnalysisLayer_na(ODnimi, "Lines", "KohdeNimi", "TEXT")

#Muodostetaan Joinin id-kentät:
arcpy.CalculateField_management(Lines, "LahtoNimi", "!Name!.split(\" -\")[0]",
                                "PYTHON_9.3")
arcpy.CalculateField_management(Lines, "KohdeNimi", "!Name!.split(\"- \")[1]",
                                "PYTHON_9.3")

#Eksportataan Line-feature shapeksi, jotta Join saadaan toimimaan:
if gdbCheck == True:
Exemple #16
0
    "DETAILED_POLYS", "MERGE", "DISKS", "NO_LINES", "NON_OVERLAP", "NO_SPLIT",
    Feeders, "", "", "", "TRIM_POLYS", distance_from_line)
Existing_TX_SA = Existing_TX_SA.getOutput(0)

#Load Elements
arcpy.na.AddLocations(Existing_TX_SA, "Facilities", Existing_TX,
                      "field mapping", "25 Meters")
arcpy.na.AddLocations(Existing_TX_SA, "Point Barriers", Injection_TX,
                      "field mapping", "25 Meters")

#Solve
arcpy.na.Solve(Existing_TX_SA, "SKIP")
#CHECK FOR ERRORS

#Export polygon layer
Existing_TX_Polygons = arcpy.SelectData_management(Existing_TX_SA, "Polygons")

##T2##
#SA of 200m was drawn from the injection TX sites.
#Setting existing TX SA as a barrier prevents the SA made in the previous step from being crossed or considered as a valid injection TX SA.
#This method allows to include LV lines that extend from the injection TX, are terminal,
#and can be most directly attributed to the injection TX to be prioritized as treatment sites.

Treatment_SA = arcpy.na.MakeServiceAreaLayer(
    network, district + "_Treatment_SA", "Length", "TRAVEL_FROM", "200",
    "DETAILED_POLYS", "NO_MERGE", "DISKS", "NO_LINES", "NON_OVERLAP",
    "NO_SPLIT", Feeders, "", "", "", "TRIM_POLYS", distance_from_line)
Treatment_SA = Treatment_SA.getOutput(0)

#Load Elements
arcpy.na.AddLocations(Treatment_SA, "Facilities", Injection_TX, "",
Exemple #17
0
    print txt
    arcpy.AddMessage(txt)
    return

##---PROCESSES---
# Convert raster to polygon
msg("Converting %s to polygons" %subPatchRaster)
tmpPoly = "in_memory/tmpPoly"
arcpy.RasterToPolygon_conversion(subPatchRaster,tmpPoly,"NO_SIMPLIFY")
dslvPoly =  "in_memory/dslvPoly"
arcpy.Dissolve_management(tmpPoly,dslvPoly,"grid_code")

# Convert the subpatch polygons to a coverage
msg("Converting subpatch zones to an Arc/Info coverage")
arcpy.FeatureclassToCoverage_conversion("%s POLYGON" %dslvPoly,subpatchCov)
subpatchCovPoly = arcpy.SelectData_management(subpatchCov,"polygon").getOutput(0)
subpatchCovArc = arcpy.SelectData_management(subpatchCov,"arc").getOutput(0)

# Select records into tmpTable
msg("Creating connectitivty table")
subPatchEdgeTbl = "in_memory/subPatchEdgeTbl"
selString = r'"$LEFTPOLYGON" > 1 AND "$RIGHTPOLYGON" > 1'
arcpy.TableSelect_analysis(subpatchCovArc,subPatchEdgeTbl,selString)

# Join ID codes to the subPatchedgeTable
msg("Joining IDs to connecitivty table")
arcpy.JoinField_management(subPatchEdgeTbl, "LEFTPOLYGON", subpatchCovPoly, "SUBPATCHPOLY#", "GRID_CODE")
arcpy.JoinField_management(subPatchEdgeTbl, "RIGHTPOLYGON", subpatchCovPoly, "SUBPATCHPOLY#", "GRID_CODE")

# Initialize output edge list
edgeList = open(edgeListFN, 'w')
Exemple #18
0
    "NO_LINES", "OVERLAP", "NO_SPLIT", "", "", "ALLOW_UTURNS", "Oneway",
    "TRIM_POLYS", "100 Meters", "NO_LINES_SOURCE_FIELDS", "NO_HIERARCHY", "")

# Process: Add Locations
arcpy.AddLocations_na(
    Service_Area, Select_Layer_Type, Destinations_Layer, "Name Address #",
    "5000 Meters", "",
    "Hennepin_County_Street_Centerlines SHAPE;StreetCenterlines_NetworkDataset_Junctions NONE",
    "MATCH_TO_CLOSEST", "APPEND", "NO_SNAP", "5 Meters", "INCLUDE",
    "Hennepin_County_Street_Centerlines #;StreetCenterlines_NetworkDataset_Junctions #"
)

# Process: Solve
arcpy.Solve_na(Service_Area_with_Destinations, "SKIP", "TERMINATE", "", "")

# Process: Select Data
arcpy.SelectData_management(Solved_Service_Area, "Polygons")

# Process: Make Feature Layer
arcpy.MakeFeatureLayer_management(
    Polygons, SAPolygons_Layer, "", "",
    "ObjectID ObjectID VISIBLE NONE;Shape Shape VISIBLE NONE;FacilityID FacilityID VISIBLE NONE;Name Name VISIBLE NONE;FromBreak FromBreak VISIBLE NONE;ToBreak ToBreak VISIBLE NONE"
)

# Process: Clip
arcpy.Clip_analysis(Parcels_shp, SAPolygons_Layer, AllWalkableParcels_shp, "")

# Process: Select
arcpy.Select_analysis(AllWalkableParcels_shp, WalkableParcels_shp,
                      "\"LOT_TYPE\" = 'Residential'")