ArcGis

ArcGis

    Видеоуроки

    Построение графа

    В данном уроке показано, как с помощью модуля Network Analyst преобразовать сеть линейных объектов в граф (путь между вершинами измеряется длиной рёбер). Показано, как узнать количество вершин и рёбер в графе, получить необходимые данные для расчёта коэффициентов Карла Канского. Все замечания и вопросы просьба отправлять на адрес alexanderakl@mail.ru

    Центр и диаметр графа

    В данном уроке показано, как автоматически находить центр и диаметр графа, построенного с помощью Network Analyst. Центром графа называется такая вершина в графе, сумма кратчайших расстояний от которой до всех остальных вершин наименьшая. Диаметром графа называется наибольшее кратчайшее расстояние между всеми парами вершин. Все замечания и вопросы просьба отправлять на адрес alexanderakl@mail.ru

    Центр графа. Число Кёнига

    В данном уроке показан ещё один (более быстрый) способ нахождения центра графа; показано, как автоматически находить число Кёнига для каждой вершины графа. Все замечания и вопросы просьба отправлять на адрес alexanderakl@mail.ru

    3 функции Network Analyst

    В данном уроке показано, как использовать некоторые функции модуля Network Analyst. Как построить кратчайший маршрут между произвольными точками сети, как строить зоны транспортной доступности в сети, как находить ближайшие объекты к данной точке. Все замечания и вопросы просьба отправлять на адрес alexanderakl@mail.ru

    Решение задачи о транспортной проницаемости региона

    В данном уроке показано, как с помощью программы ArcGIS for Desktop рассчитать транспортную проницаемость любого региона. Все замечания и вопросы просьба отправлять на адрес romanpanov1994@gmail.com

    Топологические ярусы

    Код для shp-файлов

    import arcpy directory = arcpy.GetParameterAsText(0) inputy = arcpy.GetParameterAsText(1) arcpy.FeatureToPolygon_management(directory + inputy + ".shp", directory + 'polygons.shp') arcpy.MakeFeatureLayer_management(directory + 'polygons.shp', "polygons_lyr") i = 1 while int(arcpy.GetCount_management(directory + 'polygons.shp').getOutput(0))>0: arcpy.Dissolve_management(directory + 'polygons.shp',directory + 'dissolve_polygons_1.shp',"Id") arcpy.FeatureToLine_management(directory + 'dissolve_polygons_1.shp', directory + 'line' + '_' + inputy + '_' + 'top_yarus' + '_' + str(i) + '.shp') arcpy.SelectLayerByLocation_management("polygons_lyr","INTERSECT",directory + 'line' + '_' + inputy + '_' + 'top_yarus' + '_' + str(i) + '.shp') arcpy.CopyFeatures_management("polygons_lyr", directory + 'poly' + '_' + inputy + '_' + 'top_yarus' + '_' + str(i) + '.shp' ) arcpy.DeleteFeatures_management(arcpy.SelectLayerByLocation_management("polygons_lyr","INTERSECT",directory + 'line' + '_' + inputy + '_' + 'top_yarus' + '_' + str(i) + '.shp')) arcpy.Delete_management(directory + 'dissolve_polygons_1.shp') i = i + 1 arcpy.Delete_management(directory + 'polygons.shp')

    В данном уроке показано, как строить топологические ярусы произвольной транспортной сети. Как создавать собственный инструмент в ArcToolbox. Все замечания и вопросы просьба отправлять на адрес alexanderakl@mail.ru

    Транспортная освоенность территории. Расчёт численной характеристики рисунка сети с помощью фрактальной размерности ("Box counting method")

    Код для shp-файлов

    directory = Сюда необходимо в кавычках вписать путь к файлам, с которыми вы будете работать filelines = Сюда необходимо в кавычках вписать название файла с сетью (без расширения) hexfield = Сюда необходимо в кавычках вписать название файла с шестиугольниками (без расширения) import arcpy import os import scipy from scipy import optimize import numpy from numpy import * fitfunc = lambda p, x: (p[0] + p[1] * x) errfunc = lambda p, x, y: (y - fitfunc(p, x)) arcpy.MakeFeatureLayer_management(directory + '/' + filelines + '.shp', filelines + '_lyr') arcpy.MakeFeatureLayer_management(directory + '/' + hexfield + '.shp', hexfield + '_lyr') a = int(arcpy.GetCount_management(directory + '/' + filelines + '.shp').getOutput(0)) rows = arcpy.SearchCursor(directory + '/' + filelines + '.shp') total = [] for row in rows: value = row.getValue("Unique_ID") total.append(int(value)) i = 0 while i < Сюда необходимо вписать число, равное числу строк в таблице линейного слоя (слоя с сетью): print i arcpy.SelectLayerByAttribute_management(filelines + '_lyr',"NEW_SELECTION", "FID = %s" % i) arcpy.SelectLayerByAttribute_management(hexfield + '_lyr', "NEW_SELECTION", "Unique_ID = %s" % (total[i])) rt = arcpy.FeatureClassToFeatureClass_conversion(hexfield + '_lyr',directory, "one_hex.shp") aa = arcpy.Describe(directory + '/one_hex.shp').extent xmin = aa.xmin ymin = aa.ymin squares = [4,16,64,256] intersections = [1] for n in range(len(squares)): arcpy.CreateFishnet_management(directory + '/fishnet' + '_' + str(squares[n]) + '.shp', str(xmin) + ' ' + str(ymin), str(xmin) + ' ' + str(ymin+1),"0","0",int((squares[n])**(0.5)),int((squares[n])**(0.5)),"#","NO_LABELS",directory + '/one_hex.shp',"POLYGON") arcpy.Clip_analysis(directory + '/fishnet' + '_' + str(squares[n]) + '.shp',directory + '/one_hex.shp', directory + '/fish_net_clip' + '_' + str(squares[n]) + '.shp') arcpy.Delete_management(directory + '/fishnet' + '_' + str(squares[n]) + '.shp') arcpy.MakeFeatureLayer_management(directory + '/fish_net_clip' + '_' + str(squares[n]) + '.shp', 'fish_net_clip' + '_' + str(squares[n]) + '_lyr') c = int(arcpy.GetCount_management(arcpy.SelectLayerByLocation_management('fish_net_clip' + '_' + str(squares[n]) + '_lyr',"INTERSECT", filelines + '_lyr')).getOutput(0)) intersections.append(c) arcpy.Delete_management('fish_net_clip' + '_' + str(squares[n]) + '_lyr') arcpy.Delete_management(directory + '/fish_net_clip' + '_' + str(squares[n]) + '.shp') edge = [1,0.5,0.25,0.125,0.0625] logx = log(edge) logy = log(intersections) qout,success = optimize.leastsq(errfunc, [0,0],args=(logx, logy),maxfev=30000) arcpy.CalculateField_management(hexfield + '_lyr',"FracDim","qout[1]","PYTHON") arcpy.Delete_management(directory + '/one_hex.shp') i = i + 1

    Код для gdb-файлов

    directory = Сюда необходимо в кавычках вписать путь к файлам, с которыми вы будете работать. Например: "C:/5course/euroasia/euroasia.gdb" filelines = Сюда необходимо в кавычках вписать название файла с сетью (без расширения). Например: "eu_diss" hexfield = Сюда необходимо в кавычках вписать название файла с шестиугольниками (без расширения). Например: "Europe_FracDim" import arcpy import os import scipy from scipy import optimize import numpy from numpy import * fitfunc = lambda p, x: (p[0] + p[1] * x) errfunc = lambda p, x, y: (y - fitfunc(p, x)) arcpy.MakeFeatureLayer_management(directory + '/' + filelines, filelines + '_lyr') arcpy.MakeFeatureLayer_management(directory + '/' + hexfield, hexfield + '_lyr') a = int(arcpy.GetCount_management(directory + '/' + filelines).getOutput(0)) rows = arcpy.SearchCursor(directory + '/' + filelines) total = [] for row in rows: value = row.getValue("Unique_ID") total.append(int(value)) i = 1 while i < Сюда необходимо вписать число, равное числу строк в таблице линейного слоя (слоя с сетью). Например: 16674: print i arcpy.SelectLayerByAttribute_management(filelines + '_lyr',"NEW_SELECTION", "OBJECTID = %s" % i) arcpy.SelectLayerByAttribute_management(hexfield + '_lyr', "NEW_SELECTION", "Unique_ID = %s" % (total[i-1])) arcpy.FeatureClassToFeatureClass_conversion(hexfield + '_lyr',directory, "one_hex") aa = arcpy.Describe(directory + '/one_hex').extent xmin = aa.xmin ymin = aa.ymin squares = [4,16,64,256] intersections = [1] for n in range(len(squares)): arcpy.CreateFishnet_management(directory + '/fishnet' + '_' + str(squares[n]), str(xmin) + ' ' + str(ymin), str(xmin) + ' ' + str(ymin +1),"0","0",int((squares[n])**(0.5)),int((squares[n])**(0.5)),"#","NO_LABELS",directory + '/one_hex',"POLYGON") arcpy.Clip_analysis(directory + '/fishnet' + '_' + str(squares[n]), directory + '/one_hex', directory + '/fish_net_clip' + '_' + str (squares[n])) arcpy.Delete_management(directory + '/fishnet' + '_' + str(squares[n])) arcpy.MakeFeatureLayer_management(directory + '/fish_net_clip' + '_' + str(squares[n]), 'fish_net_clip' + '_' + str(squares[n]) + '_lyr') c = int(arcpy.GetCount_management(arcpy.SelectLayerByLocation_management('fish_net_clip' + '_' + str(squares[n]) + '_lyr',"INTERSECT", filelines + '_lyr')).getOutput(0)) intersections.append(c) arcpy.Delete_management('fish_net_clip' + '_' + str(squares[n]) + '_lyr') arcpy.Delete_management(directory + '/fish_net_clip' + '_' + str(squares[n])) edge = [1,0.5,0.25,0.125,0.0625] logx = log(edge) logy = log(intersections) qout,success = optimize.leastsq(errfunc, [0,0],args=(logx, logy),maxfev=30000) arcpy.CalculateField_management(hexfield + '_lyr',"FracDim","qout[1]","PYTHON") arcpy.Delete_management(directory + '/one_hex') i = i + 1

    В данном уроке показано, как автоматически рассчитать транспортную освоенность территории (подробнее тут (пункт 4)), как рассчитать фрактальную размерность произвольной сети при помощи "Box counting method". Данный алгоритм можно применять для любых масштабов исследования (необходимо выбрать соответствующий размер шестиугольника) и для любых сетей. !ВНИМАНИЕ! Данный скрипт работает при условии, что на компьютере установлены модули "numpy" и "scipy"! Все замечания и вопросы просьба отправлять на адрес alexanderakl@mail.ru

    Анимация

    В данном уроке показано, как делать анимацию, на примере эволюции произвольной транспортной сети. Все замечания и вопросы просьба отправлять на адрес alexanderakl@mail.ru