Esse script abaixo em Pytton, realiza uma conexão dentro do banco de dados do ArcGis (MSSQL).
Depois pega a tabela ALUNO e a tabela ESCOLA, que está com dados GeoCodificados.
Em seguindo verifica a distancia de cada Aluno para cada Escola, e grava em outra tabela dentro do MSSQL.
Que foi criada com o nome ALUNO_ESCOLA_DISTANCIA, pelo mesmo script abaixo.
O resultado de registros será a quantidade de aluno X a quantidade de escolaas.
Exemplo:
10 Alunos x 5 Escolas = Total de registros 50
# -*- coding: cp1252 -*-import arcpyimport pyodbcimport loggingimport sysimport tracebackimport sde_connectionimport math# Variaveis Locais:#conexão com o o SQL SERVERworkspace = sde_connection.connect("NOME_BANCO", "NOME_SERVIDOR", "USUARIO", "SENHA", "SDE.DEFAULT")diretorioTrabalho = r'\\srvgeo\D\LocatorSJC'arquivoLog = diretorioTrabalho + r'\Locator_Educacao_Distancia.log'#informando o nome das tabelas que existe no MSSQLptFC1 = workspace + r'\DBO.ALUNO'ptFC2 = workspace + r'\DBO.ESCOLA'#define onde será criado a tabela, no caso uso o mesmo caminhooutGDB = workspaceoutTableName = r'ALUNO_ESCOLA_DISTANCIA'outTable = outGDB + "/" + outTableName# Configuracao Logginglogging.basicConfig(filename=arquivoLog, level=logging.INFO, format='%(asctime)s:%(levelname)s:%(message)s')logging.info('Inicio - Script Locator')arcpy.env.overwriteOutput = True# Criando tabela de destinoarcpy.CreateTable_management(outGDB,outTableName)arcpy.AddField_management(outTable,"INPUT_FID","LONG")arcpy.AddField_management(outTable,"NEAR_FID","LONG")arcpy.AddField_management(outTable,"DISTANCE","DOUBLE")# Criar e preencher dois dicionários com coordenadas X e Y para cada# OBJECT na segunda classe recurso usando um SearchCursorptFC2XCoordDict = {}ptFC2YCoordDict = {}with arcpy.da.SearchCursor(ptFC2,["OBJECTID","SHAPE@XY"]) as cursor:for row in cursor:ptFC2XCoordDict[row[0]] = row[1][0]ptFC2YCoordDict[row[0]] = row[1][1]# Abre um Cursor pronto para ter registros escritos para cada par de ObjectIDsiCursor = arcpy.da.InsertCursor(outTable,["INPUT_FID","NEAR_FID","DISTANCE"])# Usa um SearchCursor para ler as linhas (e coordenadas X, Y) do primeiro# Classe de recursowith arcpy.da.SearchCursor(ptFC1,["OBJECTID","SHAPE@XY"]) as cursor:for row in cursor:x1 = row[1][0]y1 = row[1][1]for i in range(len(ptFC2XCoordDict)):x2 = ptFC2XCoordDict[i+1]y2 = ptFC2YCoordDict[i+1]# Prepara e insere a linha Inserir CursoriRow = [row[0],i+1,math.sqrt((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1))]iCursor.insertRow(iRow)del iCursorprint "Done!"
Tags: Script Python / ArcGis / MSSQL Where to find the distance between two points, Spatial Join
Créditos: http://gis.stackexchange.com/questions/113446/performing-point-distance-analysis-using-basic-level-license-of-arcgis-for-deskt