Mais

Erro ValueError de lyr.replaceDataSource ()?

Erro ValueError de lyr.replaceDataSource ()?


Estou tentando escrever um script que me permite examinar documentos de mapa e substituir a fonte de dados de cada camada em cada documento de mapa. Tudo está funcionando logicamente, eu acredito, e todos os meus loops estão funcionando como deveriam. Os conjuntos de dados referenciados existem. Ainda assim, estou recebendo este erro:

Traceback (última chamada mais recente): Arquivo "C: Python27 ArcGIS10.1 Lib site-packages pythonwin pywin framework scriptutils.py", linha 326, em RunScript exec codeObject em a Principal.dict Arquivo "C: Users Daimon Nurse Desktop DFMPROJECT Scripts editmapdocument8.py", linha 18, em Lyr.replaceDataSource (workspace_path, workspace_type, dataset_name) Arquivo "C: Arquivos de programas (x86) ArcGIS Desktop10. 1 arcpy arcpy utils.py ", linha 181, em fn_ return fn (* args, ** kw) Arquivo" C: Arquivos de programas (x86) ArcGIS Desktop10.1 arcpy arcpy_mapping.py ", linha 680, em replaceDataSource, retorna convertArcObjectToPythonObject (self._arc_object.replaceDataSource (* gp_fixargs ((workspace_path, workspace_type, dataset_name, validate), True))) ValueError: Camada: erro inesperado

Este é o código que estou usando:

import arcpy import os PATH2 = r "C:  Usuários  Daimon Nurse  Desktop  DFMPROJECT" arcpy.env.workspace = PATH2 arcpy.env.overwriteOutput = Verdadeiro para arquivo em arcpy.ListFiles ("*. mxd"): filePath = os.path.join (PATH2, file) MapDoc = arcpy.mapping.MapDocument (filePath) lyrList = arcpy.mapping.ListLayers (MapDoc) i = 1 para Lyr em lyrList: imprimir Lyr workspace_path = r "C:  Usuários  Daimon Nurse  Desktop  DFMPROJECT  DFM "workspace_type =" FILEGDB_WORKSPACE "dataset_name = 'Zona {0}'. Format (i) imprimir dataset_name imprimir workspace_type imprimir workspace_path imprimir os.path.join (workspace_path, dataset_name) Lyr.replacepaceDataSource , dataset_name) i = i + 1

Estes são os resultados impressos na primeira iteração para dataset_name, workspace_type, workspace_path e os.path.join respectivamente:

Zone1 FILEGDB_WORKSPACE C:  Users  Daimon Nurse  Desktop  DFMPROJECT  DFM C:  Users  Daimon Nurse  Desktop  DFMPROJECT  DFM  Zone1

O problema era que eu estava listando o conjunto de dados na função replaceatasource quando na verdade só precisava listar o nome da classe de recurso em si. por exemplo:

para a tabela em arcpy.mapping.ListTableViews (mxd): imprimir table.name filename1 = table.name table.replaceDataSource (PATH, workspacetype, filename1) print "SUBSTITUÍDO!"

Atualizando a fonte de dados no projeto ArcGIS PRO com arcpy

Tentando atualizar a fonte de dados para camadas em mapas do ArcGIS Pro programaticamente. Portanto, devo estar entendendo mal a sintaxe para fazer isso explicado aqui. Porque o seguinte não funciona:

Isso não gera um erro. ele simplesmente não atualiza as fontes de dados conforme desejado. O exemplo ESRI é assim:

Isso talvez funcione apenas para o projeto como um todo?

O problema que você está tendo é que lyr.connectionProperties retorna um dicionário, mas sua nova conexão é um caminho de espaço de trabalho. Você só precisa acessar a chave certa no dicionário:

Stephen, obrigado. Agradeço seu carrilhão. Eu percebo que connection_info é um dicionário. Mas eu não tinha certeza de como usá-lo. A palavra-chave "banco de dados" atualiza apenas o banco de dados. Na verdade, estou tentando mudar isso para usar uma conta diferente (novo 'usuário' e 'senha') e esperava fazer isso usando um novo arquivo de conexão SDE. Talvez você não possa Faz?

Se você olhar para as outras chaves no dicionário, preciso que mais do que 'banco de dados' seja atualizado.

Não sou um especialista nesses arquivos de conexão SDE. Mas meu entendimento sempre foi que eles armazenam uma referência ao servidor / instância do banco de dados, nome do banco de dados, autenticação (e senha / pr). Então, basicamente, o que está no dicionário acima. Portanto, apenas atualizar o 'banco de dados' no dicionário não seria suficiente, eu acho. Para ficar seguro, tentei, e sem resultado.


Atualizando caminhos de fonte de dados de letras de unidade mapeadas para caminhos UNC

Então, eu meio que estou puxando meu cabelo para fora depois de ter andado em círculos por algumas horas. Espero que alguém que tenha feito este exercício possa ajudar.

Historicamente, a maioria dos dados que meu grupo adiciona ao MXD & # x27s vem de uma letra de unidade mapeada. Há uma atualização iminente da letra da unidade e isso irá essencialmente quebrar todos os links em todos os mapas que temos. Achei que seria fácil preparar um script Python para substituir nossos dados mapeados com letras de unidade (por exemplo, G: Path To Data.shp) por um caminho UNC (por exemplo, ServerName Folder Path To Data. shp).

Eu estava lendo o artigo de ajuda ESRI & # x27s que recomenda o uso do método mxd.findAndReplaceWorkspacePaths. Desenvolvi um dicionário Python onde as chaves eram as letras das minhas unidades atuais e os valores eram o caminho UNC correspondente. Usei o código de amostra abaixo como referência.

Meu script basicamente apenas percorreu cada MXD em uma pasta, percorreu cada par de chave / valor em meu dicionário e fez o findAndReplaceWorkspacePaths para cada letra de unidade. Eu executei meu código e alguns dos caminhos foram atualizados perfeitamente, mas outros não. Não era exclusivo para uma unidade específica, mas parecia que minhas classes de recursos de geodatabase foram mapeadas muito bem, mas os shapefiles não.

Pensando que era algo em meu código, tentei fazer um loop em cada camada do MXD e usei o método findAndReplaceWorkspacePath em camadas individuais. Mesmo resultado. Algumas camadas seriam atualizadas conforme o esperado e outras não.

Então entrei no Arc Catalog, naveguei até meu MXD, cliquei com o botão direito e usei a ferramenta Set Data Source integrada. Tentei atualizar manualmente uma das minhas camadas que falhou usando a ferramenta ESRI & # x27s. Atualizei a & quotNova fonte de dados & quot para o caminho UNC e parecia ok, salvei um novo MXD, abri-o e ele ainda direcionava para a pasta mapeada, não para o caminho UNC! Portanto, agora estou pensando que ambas as versões do meu código estão bem, mas algo está errado no mundo ESRI.

Em seguida, abro manualmente um MXD, clico com o botão direito do mouse nas propriedades da camada e atualizo a fonte de dados para o caminho UNC. Ele o mantém na unidade de rede mapeada! Não vai me deixar trocá-lo.

Em seguida, vou adicionar dados e colar o caminho UNC completo e ele adiciona com a unidade de rede mapeada. Em seguida, removo todos os dados desse espaço de trabalho e tento adicioná-los novamente com o caminho UNC completo e funciona! Portanto, por algum motivo, se os dados de uma área de trabalho já existirem em um mapa, quaisquer novos dados adicionados a partir da mesma área de trabalho (UNC ou unidade mapeada) serão adicionados usando essas mesmas configurações?

Remover e adicionar novamente todas as camadas não é realmente uma opção, pois removeria consultas, estilos, rótulos, etc. Alguém executou uma operação semelhante com êxito? Eu & # x27m usando ArcMap 10.3, mas eu poderia ir para 10.4 em uma dev box se fosse apenas um bug com 10.3.


ArcPy substitui a fonte de dados

Eu tenho alguns MXD & # x27s que originalmente têm shapefiles como fonte, mas precisamos substituir a fonte de dados por um SDE. Existe uma maneira fácil de percorrer as camadas e substituí-las uma de cada vez? Não tenho certeza de como obter a string de referência SDE.

Para obter a string de conexão SDE, a maneira mais simples é referenciar o arquivo de conexão SDE armazenado em sua pasta de dados de aplicativo local quando você configura sua conexão SDE no ArcMap.

A função abaixo encontrará dinamicamente esse arquivo de conexão para você com base em um nome de conexão SDE fornecido. Ele irá dinamicamente para a pasta appdata no diretório correto da versão de instalação do ArcMap.

Eu tenho uma caixa de ferramentas Python que usamos internamente e uma das ferramentas permite que você repath camadas rapidamente de uma fonte de dados (SDE, arquivo / GDB pessoal, pasta shapefile) para qualquer outra fonte de dados, desde que o nome da classe de recurso seja idêntico tanto na fonte de dados original quanto na de destino . Abaixo está o trecho de código relevante. Este é semelhante ao que / u / ccd849 postou, mas requer que você configure um modelo MXD com os links corretos, enquanto minha versão só precisa do espaço de trabalho atual com seus shapefiles e o caminho do espaço de trabalho SDE de saída que você pode gerar usando o link acima (ou forneça manualmente).


ValueError: nenhum gradiente fornecido para qualquer Tensorflow variável

Estou tentando implementar uma rede convolucional de uma classe para classificar números no conjunto de dados MNIST, a abordagem proposta é & quotA rede geral consiste em uma rede extratora de características e uma rede classificadora. A rede extratora de recursos essencialmente incorpora as imagens da classe de destino de entrada em um espaço de recursos. Os recursos extraídos são então anexados aos dados de classe pseudo-negativos, gerados a partir de um Gaussiano centrado em zero no espaço de recursos. Os recursos anexados são então alimentados em uma rede de classificação que é caracterizada por uma rede neural totalmente conectada. A rede de classificação atribui uma pontuação de confiança para cada representação de recurso. A saída da rede de classificação é 1 ou 0. Aqui, 1 corresponde à amostra de dados pertencente à classe de destino e 0 corresponde à amostra de dados pertencente à classe negativa. Toda a rede é treinada ponta a ponta usando perda de entropia cruzada binária. & Quot de Oza, Poojan / Patel, Vishal M. Rede neural convolucional de uma classe 2018

no processo de implementação, estou recebendo o seguinte erro: ValueError: Nenhum gradiente fornecido para qualquer variável: ['dense / kernel: 0', 'dense / bias: 0', 'dense_1 / kernel: 0', 'dense_1 / bias: 0 ',' dense_2 / kernel: 0 ',' dense_2 / bias: 0 ']

o erro aparece depois que a função model.fit é chamada.


Não foi possível chamar model.build (). & ldquoValueError: Você não pode construir seu modelo chamando `build` se suas camadas não suportam entradas do tipo float. & rdquo

Tenho tentado implementar o artigo & quot Uma imagem vale 16x16 palavras: Transformers for Image Recognition at Scale & quot paper de Alexey Dosovitskiy et al usando TensorFlow. Ao implementar o modelo, encontro o seguinte erro

Meu código está dividido em dois arquivos chamados model.py e train.py

O arquivo train.py é como abaixo

O arquivo model.py é como abaixo


2 respostas 2

Este é um problema conhecido do cpython no Windows. O erro ocorre quando o preto tenta executar vários workers em máquinas de & gt60 core porque o número padrão de workers de processo fornecido por os.cpu_count () quebra algum outro limite de janelas (número de processos em espera? Não tenho certeza). Black & gt = 19.10b0 tem uma correção para isso, então tente atualizar a versão do black em sua configuração de pré-confirmação, se puder?

Você pode tentar corrigir esta linha site-packages black.py, linha 435

que é o que eu acredito essencialmente em ProcessPoolExecutor em Python 3.8 e posterior.