Страница 1 из 2
					
				Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 16 авг 2024, 05:13
				 Ostran2004
				Дано: шейп-файл и таблица полигонов 20 000 выделов ландшафтов, относящихся к 377 видам, отдельной колонкой прописано районирование - 16 районов (ряд видов повторяется в нескольких районах).
Можно ли подсчитать матрицу пересечений: сколько видов относящихся к тому или иному району представлены в других районах?
			 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 16 авг 2024, 07:11
				 trir
				
			 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 16 авг 2024, 13:23
				 gamm
				не, там чисто табличная операция, не пространственное пересечение. Для первой строки что-то типа 
select reg,count(*) as cnt from tab where tab.type in (select type from tab where tab.reg = 1) group by reg
А дальше 16 раз union, ничего более умного в голову не приходит. Либо грузить в R/Python, и там спокойно посчитать.
			 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 16 авг 2024, 15:07
				 _taras_
				Ещё можно попробовать экселевский инструмент сводная таблица
			 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 16 авг 2024, 16:29
				 gamm
				В сводной таблице, насколько я помню, куб строится, это немного другое. Хотя могли и такое предусмотреть
			 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 18 авг 2024, 23:06
				 Ostran2004
				_taras_ писал(а): ↑16 авг 2024, 15:07
Ещё можно попробовать экселевский инструмент сводная таблица
 
К сожалению, в сводной таблице можно посчитать сумму площадей или количество контуров, а не уникальных значений.
Вопрос решен "ручным" методом  

 , хотя хотелось програмно 

 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 19 авг 2024, 06:53
				 _taras_
				
К сожалению, в сводной таблице можно посчитать сумму площадей или количество контуров, а не уникальных значений.
[/quote]
Сводная таблица - поля данных - параметр количество... Использую для подсчета уникальных значений (либра офис). Думаю, что и экселе тоже самое.
 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 19 авг 2024, 10:51
				 gamm
				задача воспринималась буквально, считалось число уникальных видов, без учета сколько раз он встречался в регионе. Программу нужно рассматривать как прототип. На питоне, вроде питон в Арке есть.
Код: Выделить всё
import numpy as np
# generate random data 
n_reg    =    16
n_type   =   377
n_parcel = 20000
reg_column = 0
type_column = 1
dat_mtr = np.zeros((n_parcel,2),dtype=int)
dat_mtr[:,reg_column] = np.random.randint(1, high=n_reg+1, size=n_parcel, dtype=int)
dat_mtr[:,type_column] = np.random.randint(1, high=n_type+1, size=n_parcel, dtype=int)
# create table
reg_list = np.sort(np.unique(dat_mtr[:,reg_column]))
n_reg = len(reg_list)
result_mtr = np.zeros((n_reg,n_reg),dtype=int)
pair_mtr, pair_cnt = np.unique(dat_mtr,axis=0,return_counts=True)
for i_reg in range(n_reg):
  cur_reg = reg_list[i_reg]
  cur_reg_type_set = pair_mtr[pair_mtr[:,reg_column] == cur_reg,type_column]
  cur_ind = np.isin(pair_mtr[:,type_column],cur_reg_type_set)
  cur_reg_list, cur_cnt = np.unique(pair_mtr[cur_ind,reg_column],return_counts=True)
  cur_reg_pos = np.where(np.isin(reg_list,cur_reg_list))
  result_mtr[i_reg,cur_reg_pos] = cur_cnt
#endfor
print(result_mtr)
 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 20 авг 2024, 00:19
				 Ostran2004
				_taras_ писал(а): ↑19 авг 2024, 06:53
К сожалению, в сводной таблице можно посчитать сумму площадей или количество контуров, а не уникальных значений.
 
Сводная таблица - поля данных - параметр количество... Использую для подсчета уникальных значений (либра офис). Думаю, что и экселе тоже самое.
[/quote]
![Изображение]() 
Именно так и делаю, но тогда он выдает количество отдельных контуров с данным индексом...
 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 20 авг 2024, 00:30
				 Ostran2004
				gamm писал(а): ↑19 авг 2024, 10:51
задача воспринималась буквально, считалось число уникальных видов, без учета сколько раз он встречался в регионе. Программу нужно рассматривать как прототип. На питоне, вроде питон в Арке есть.
Код: Выделить всё
import numpy as np
# generate random data 
n_reg    =    16
n_type   =   377
n_parcel = 20000
reg_column = 0
type_column = 1
dat_mtr = np.zeros((n_parcel,2),dtype=int)
dat_mtr[:,reg_column] = np.random.randint(1, high=n_reg+1, size=n_parcel, dtype=int)
dat_mtr[:,type_column] = np.random.randint(1, high=n_type+1, size=n_parcel, dtype=int)
# create table
reg_list = np.sort(np.unique(dat_mtr[:,reg_column]))
n_reg = len(reg_list)
result_mtr = np.zeros((n_reg,n_reg),dtype=int)
pair_mtr, pair_cnt = np.unique(dat_mtr,axis=0,return_counts=True)
for i_reg in range(n_reg):
  cur_reg = reg_list[i_reg]
  cur_reg_type_set = pair_mtr[pair_mtr[:,reg_column] == cur_reg,type_column]
  cur_ind = np.isin(pair_mtr[:,type_column],cur_reg_type_set)
  cur_reg_list, cur_cnt = np.unique(pair_mtr[cur_ind,reg_column],return_counts=True)
  cur_reg_pos = np.where(np.isin(reg_list,cur_reg_list))
  result_mtr[i_reg,cur_reg_pos] = cur_cnt
#endfor
print(result_mtr)
 
Спасибо, но, к сожалению для меня это сложнее китайского  
 
  
 , так как я не инфотматик работающий в географии, а географ, использующий ГИС.
 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 20 авг 2024, 10:36
				 gamm
				выложите сюда ваш файл, в текстовом виде, два столбца - район и вид, разделитель ; в архиве, чтобы был короче. Прогоним, поглядим, что получилось. 
Программу легко переделать, чтобы она читала файл и писала текстовую таблицу. Если есть Питон (а при наличии Арки он точно есть), программу можно будет запустить снаружи.
			 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 21 авг 2024, 00:34
				 Ostran2004
				gamm писал(а): ↑20 авг 2024, 10:36
выложите сюда ваш файл, в текстовом виде, два столбца - район и вид, разделитель ; 
в архиве, чтобы был короче. Прогоним, поглядим, что получилось. 
Программу легко переделать, чтобы она читала файл и писала текстовую таблицу. Если есть Питон (а при наличии Арки он точно есть), программу можно будет запустить снаружи.
 
Файл выложил, попробуем сравнить результаты...
 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 21 авг 2024, 06:43
				 gamm
				Запуск (годится любой 3-й питон), вывод результата в консоль и файл
текст программы ниже, имена файлов в тексте. В первую строку и первый столбец добавлены номера районов (они могут быть не последовательными числами).
Код: Выделить всё
import numpy as np
# load data
in_fn = "d:/temp/test/Landscape_for_analis.txt"
out_fn = "d:/temp/test/Landscape_for_analis_mtr.txt"
reg_column = 0
type_column = 1
dat_mtr = np.loadtxt(in_fn,dtype=int,skiprows=1,delimiter=";")
# create table
reg_list = np.sort(np.unique(dat_mtr[:,reg_column]))
n_reg = len(reg_list)
result_mtr = np.zeros((n_reg,n_reg),dtype=int)
pair_mtr, pair_cnt = np.unique(dat_mtr,axis=0,return_counts=True)
for i_reg in range(n_reg):
  cur_reg = reg_list[i_reg]
  cur_reg_type_set = pair_mtr[pair_mtr[:,reg_column] == cur_reg,type_column]
  cur_ind = np.isin(pair_mtr[:,type_column],cur_reg_type_set)
  cur_reg_list, cur_cnt = np.unique(pair_mtr[cur_ind,reg_column],return_counts=True)
  cur_reg_pos = np.where(np.isin(reg_list,cur_reg_list))
  result_mtr[i_reg,cur_reg_pos] = cur_cnt
#endfor
final_mtr = np.zeros((n_reg+1,n_reg+1),dtype=int)
final_mtr[1:,1:] = result_mtr
final_mtr[0,1:] = reg_list
final_mtr[1:,0] = reg_list
np.set_printoptions(linewidth=200)
print(final_mtr)
np.savetxt(out_fn,final_mtr,fmt="%3d")
Результат
Код: Выделить всё
  0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16
  1  48  38  36  17  26  36  16   2   2   0   2   2  13   4  11   2
  2  38  69  41  36  44  53  24   4  11   0   3   6  26  16  22   3
  3  36  41 129  32  39  74  38  22  38   8  17  23  50  32  50  19
  4  17  36  32  73  43  46  24   3  12   0   2   5  24  31  26   2
  5  26  44  39  43  80  55  38   3  19   0   2   5  35  30  34   4
  6  36  53  74  46  55 131  59  10  42   4   6  11  58  45  61   6
  7  16  24  38  24  38  59  91   9  40   2   8   8  64  53  62   9
  8   2   4  22   3   3  10   9  47  36  18  35  26  38  11  42  32
  9   2  11  38  12  19  42  40  36 103  18  30  30  84  52  91  38
 10   0   0   8   0   0   4   2  18  18  24  18  11  18   5  19  17
 11   2   3  17   2   2   6   8  35  30  18  41  22  31   8  36  29
 12   2   6  23   5   5  11   8  26  30  11  22  35  31  14  31  22
 13  13  26  50  24  35  58  64  38  84  18  31  31 162  76 134  46
 14   4  16  32  31  30  45  53  11  52   5   8  14  76 109  81  16
 15  11  22  50  26  34  61  62  42  91  19  36  31 134  81 222  67
 16   2   3  19   2   4   6   9  32  38  17  29  22  46  16  67  76
 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 22 авг 2024, 00:13
				 Ostran2004
				Отлично, 100% совпадение результатов!
			 
			
					
				Re: Расчет матрицы пересечений в ArcGIS или Exel
				Добавлено: 22 авг 2024, 13:31
				 gamm
				
"отлично" находится на кнопке с пальцев вверх   
