Mais

Substituindo arcpy.AddMessage () por código aberto?


Recentemente, herdei alguns scripts Python antigos que continham módulos ArcPy. Estou usando a versão 10.0.

Estou procurando um sistema de mensagens de erro que substitua arcpy.AddMessage ()?


Presumo que você esteja tentando converter seus scripts para que possam ser usados ​​em software de código aberto ou com bibliotecas de código aberto, caso contrário, o título da pergunta não faria muito sentido para mim.

Em primeiro lugar, você deve estar ciente de que arcpy.AddMessage só faz sentido em um contexto específico: quando usado em um ferramenta de script que é usado dentro do ArcGIS. Ele não faz muito mais do que uma declaração de impressão, mas a imprime na interface da ferramenta em vez de em seu console. Portanto, se você está tentando converter seus scripts usando código aberto, basta substituir essas partes por um simples impressão declaração (se executando a partir do console ou um IDE, se você estiver usando uma biblioteca GUI, como Tkinter ou PyQt, então você teria que usar comandos diferentes para exibir mensagens em sua interface).

Se você é abordando erros especificamente então você usaria sua instrução em um bloco try / catch ou em uma instrução condicional (que aborda tudo o que falha).

Se você ficar com o Esri, também pode usar o comando arcpy.AddError, mas deve estar ciente de que, ao contrário adicionar mensagem ou addWarning este comando irá termine a execução de sua ferramenta no segundo que aparece! Portanto, tenha muito cuidado para só use quando um erro realmente ocorrerou sua ferramenta irá travar (mesmo que não tenha ocorrido nenhum erro).


Como verificar se um documento de mapa real é carregado / aberto no ArcMap

Estou trabalhando com C #, Visual Studio 2010 e ArcMap. Eu tenho uma pergunta bastante simples que não tenho certeza da resposta por causa do meu status Noob com ArcObjects e ArcMap.

Estou familiarizado com muitas das interfaces ArcObjects, como IMxDocument, IMap, IActiveView e IPageLayout.

Eu queria saber como verificar se um documento de mapa real é carregado no ArcMap ou aberto no ArcMap. Estou trabalhando em uma função booleana com um clique de botão. Só não tenho certeza de quais interfaces ou ArcObjects (se houver) seriam necessários para retornar True se houver um documento de mapa carregado ou não.


2 respostas 2

Como alternativa à resposta de Jason, se você quiser continuar com os.walk, normalmente faço o seguinte para localizar arquivos CSV e trabalhar com eles

Dessa forma, você pode apenas usar a fileList para trabalhar

Oh, acabei de ver seu problema. Você está juntando todos os arquivos de lista para criar sua variável full_path. Se você não precisar se aprofundar nos subdiretórios onde seus arquivos csv estão localizados, posso usar o módulo glob. Também usei o caractere rawstring r, esse rapaz é muito útil, pois permite que você copie e cole seus caminhos sem ter que adicionar outra barra invertida para cada diretório ou alterá-los para barras normais:


Projeto 2: ferramenta de reprojeção em lote para conjuntos de dados vetoriais

Alguns departamentos de GIS determinaram uma única projeção padrão para manter seus dados de origem. Os conjuntos de dados brutos, no entanto, podem ser obtidos de terceiros em outras projeções. Esses conjuntos de dados precisam ser reprojetados na projeção padrão do departamento. A reprojeção em lote, ou a reprojeção de muitos conjuntos de dados de uma vez, é uma tarefa adequada para scripts.

Neste projeto, você praticará os fundamentos do Python escrevendo um script que reprojeta os conjuntos de dados vetoriais em uma pasta. A partir desse script, você criará uma ferramenta de script que pode ser facilmente compartilhada com outras pessoas.

A ferramenta que você escreverá deve ser semelhante à imagem abaixo. Possui dois parâmetros de entrada e nenhum parâmetro de saída. Os dois parâmetros de entrada são:

  1. Uma pasta no disco contendo conjuntos de dados vetoriais a serem reprojetados.
  2. O caminho para um conjunto de dados vetoriais cuja referência espacial será usada na reprojeção. Por exemplo, se você deseja reprojetar em NAD 1983 UTM Zona 10, você deve navegar para algum conjunto de dados vetoriais já em NAD 1983 UTM Zona 10. Este pode ser um dos conjuntos de dados na pasta que você forneceu no primeiro parâmetro, ou ele pode existir em outro lugar no disco.

A execução da ferramenta faz com que os conjuntos de dados reprojetados sejam colocados no disco na pasta de destino.

Requisitos

Para receber o crédito total, seu script:

  • deve reprojetar conjuntos de dados vetoriais de shapefile na pasta para coincidir com a projeção do conjunto de dados de destino
  • deve anexar "_projected" ao final de cada nome do conjunto de dados projetado. Por exemplo: CityBoundaries_projected.shp
  • deve pular a projeção de quaisquer conjuntos de dados que já estão na projeção de destino
  • deve relatar uma mensagem de geoprocessamento informando quais conjuntos de dados foram projetados. Nesta mensagem, os nomes dos conjuntos de dados podem ser separados por espaços. Na mensagem, não inclua conjuntos de dados que foram ignorados porque já estavam na projeção de destino. Isto deve ser uma única mensagem, nem uma mensagem por conjunto de dados projetado. Observe um exemplo deste tipo de mensagem personalizada abaixo na linha "Projetada...:"

A conclusão bem-sucedida dos requisitos acima é suficiente para obter 90% do crédito neste projeto. Os 10% restantes são reservados para esforços "além" que podem incluir, mas não estão limitados a, o seguinte:

  • Sua mensagem de geoprocessamento de conjuntos de dados projetados contém vírgulas entre os nomes dos conjuntos de dados, sem nenhuma vírgula "final" extra no final.
  • A ajuda do usuário é fornecida para sua ferramenta de script. Isso significa que quando você abre a caixa de diálogo da ferramenta e passa o mouse sobre o ícone "i" ao lado de cada parâmetro, a ajuda aparece em uma caixa pop-up. A Ajuda do ArcGIS Pro pode lhe ensinar como fazer isso.

Tu es não necessário para lidar com transformações de datum neste script. Presume-se que cada conjunto de dados na pasta usa o mesmo datum, embora os conjuntos de dados possam estar em projeções diferentes. Manipular transformações faria com que você tivesse que adicionar um parâmetro adicional na ferramenta Project e tornaria seu script mais complicado do que você provavelmente gostaria para esta atribuição.

Dados de amostra

A pasta de dados da Lição 2 contém um conjunto de shapefiles vetoriais para você trabalhar ao concluir este projeto (exclua quaisquer subpastas em sua pasta de dados da Lição 2 - você pode ter uma chamada PracticeData - antes de iniciar este projeto). Esses shapefiles foram obtidos do Catálogo de Distribuição de GeoData do Departamento de Transporte do Estado de Washington e representam várias características geográficas ao redor do estado de Washington. Para o propósito deste projeto, coloquei esses conjuntos de dados em várias projeções. Essas projeções compartilham o mesmo datum (NAD 83) para que você não precise lidar com transformações de datum.

Os conjuntos de dados e suas projeções originais são:

  • CityBoundaries e StateRoutes - NAD_1983_StatePlane_Washington_South_FIPS_4602
  • CountyLines - NAD_1983_UTM_Zone_10N
  • Balsas - USA_Contiguous_Lambert_Conformal_Conic
  • PopulatedPlaces - GCS_NorthAmerican_1983

Entregáveis

As entregas para este projeto são as seguintes:

  • o arquivo de origem .py contendo seu script
  • o arquivo .tbx contendo sua ferramenta de script
  • um pequeno artigo (cerca de 300 palavras) descrevendo como você abordou o projeto, como lidou com sucesso com quaisquer obstáculos e o que aprendeu ao longo do caminho. Você deve incluir os requisitos que atendeu ou não atendeu. Se você adicionou alguns dos esforços "além", indique-os para que o avaliador possa procurá-los.

As dicas a seguir podem ajudar a melhorar sua possibilidade de sucesso com este projeto:

    Não use a ferramenta Esri Batch Project neste projeto. Em essência, você precisa fazer sua própria variação de uma ferramenta de projeto em lote neste projeto, executando a ferramenta Projeto dentro de um loop. Sua ferramenta será mais fácil de usar porque é personalizada para a tarefa em questão.

Existem várias maneiras de inserir "_projected" no nome de um conjunto de dados, mas pode ser útil começar removendo temporariamente ".shp" e adicioná-lo novamente mais tarde. Para fazer seu código funcionar para um arquivo de forma (que tem a extensão .shp) e uma classe de recurso em um geodatabase (que não tem a extensão .shp), você pode usar o seguinte:

No código acima, fc é o nome de sua classe de recurso. Se for o nome de um arquivo de forma, ele incluirá o .shp. A função de substituição procura por qualquer string ".shp" (o primeiro parâmetro) no nome do arquivo e o substitui por nada (simbolizado no segundo parâmetro por aspas vazias ""). Portanto, depois de executar esse código, a variável rootName conterá o nome da classe de recurso sem o ".shp". Uma vez que replace (.) Não muda nada se a string fornecida como o primeiro parâmetro não ocorre em fc, o código acima pode ser substituído por apenas uma única linha:

Você também pode potencialmente cortar os últimos quatro caracteres usando algo como

mas números codificados diferentes de 0 ou 1 em seu script podem tornar o código menos legível para outra pessoa. Ver uma função como substituir é muito mais fácil para alguém interpretar do que ver -4 e tentar descobrir por que esse número foi escolhido. Portanto, você deve usar replace (.) Em sua solução.


A primeira coisa é que sua função fileExists pode ser substituída pela função os.path.isfile

Agora, aqui você não pode ter tamanho negativo de string, para torná-lo menos confuso, você pode fazer apenas:

no entanto, eu nem mesmo criaria uma função para isso, porque string vazia é False no significado booleano, então:

que pode ser alterado usando a função de filtro:

Já falando em abrir arquivos, é melhor usar com instrução, é a forma mais segura, bonita e pythônica. Então, é isso:

Outra coisa é que as funções / variáveis ​​do Python devem ser nomeadas usando o sublinhado como separador. Então, no final, o que temos é:

Vejo duas boas estratégias para realizar a tarefa.

Uma solução é ler todo o texto em uma lista e, em seguida, retroceder até o início do arquivo e escrever as linhas desejadas.

A desvantagem dessa abordagem é que ela é mal escalonada se o arquivo for grande, porque todo o conteúdo deve ser lido primeiro na memória. A outra abordagem seria sobrescrever o arquivo durante a leitura. Isso usa dois objetos de arquivo, cada um controlando sua própria posição no arquivo.

Observe alguns outros problemas com seu código.

Primeiro, PEP 8, o guia de estilo oficial do Python, recomenda lower_case_with_underscore para nomes de funções e duas linhas em branco entre as funções.

A função fileExists não testa apenas a existência do arquivo - na verdade, verifica se você pode abri-lo para leitura, o que é uma condição mais rigorosa, pois também envolve permissões de arquivo. Mas não vejo nenhuma razão para verificar especificamente a existência de arquivos. Todos os tipos de erros de E / S são possíveis, como negação de permissão do sistema de arquivos, sistema de arquivos somente leitura, cota de disco ou falha de hardware. Além disso, mesmo se o arquivo existir quando você verificar, ele pode desaparecer durante a fração de segundo entre if not fileExists (...) e a chamada de abertura real (...). Além disso, a função rmoveEmptyLines não tem como relatar a falha ao chamador. (Imprimir uma mensagem de erro não conta!) Portanto, a única abordagem razoável é Apenas façae lidar com qualquer exceção que possa ocorrer.

Qualquer chamada open () deve ser escrita usando um com bloco, que fechará automaticamente o identificador de arquivo ao sair do bloco.


Script Python: usando classes de recursos com serviços GP

Eu estava trabalhando em um serviço de geoprocessamento (GP) que poderia permitir a um usuário especificar com qual classe de recurso em um geodatabase registrado no servidor uma tarefa GP trabalhará. Eu testei o uso da ferramenta Truncate Table primeiro para basicamente limpar todas as linhas de uma classe de recurso, preservando o esquema.

Depois de criar um modelo simples com apenas uma ferramenta e um parâmetro de modelo (Tabela de entrada), eu o executei com sucesso e comecei o processo de publicação. No entanto, ao publicar um modelo como um serviço GP, haveria três escolhas: & # 8220Valor definido pelo usuário & # 8221 (valor especificado pelo usuário para o parâmetro - por exemplo, quais recursos serão usados ​​como um FeatureSet), "Lista de escolha" (este um é criado ao executar o modelo no ArcMap e ter várias camadas adicionadas ao Índice) e, finalmente, “Valor constante” (os mesmos dados de entrada serão usados ​​para o parâmetro). A única opção aplicável em meu cenário é usar um valor definido pelo usuário quando os usuários especificam qual classe de recurso no geodatabase será usada. Uma vez que novas classes de recursos serão criadas, a opção da lista de opções não pode ser usada. Usar um valor constante também não é uma opção, pois quero permitir que um usuário especifique uma classe de recurso dinamicamente, em vez de permitir que ele execute a tarefa GP na mesma classe de recurso o tempo todo.

No entanto, FeatureClass não é um tipo de entrada com suporte para Serviços GP, o que torna impossível publicar e usar meu modelo diretamente. Isso significa que terei que implementar uma lógica de pesquisa e passar apenas uma string para o serviço, em vez da própria classe de recurso. Essa string representaria um nome de classe de recurso. Portanto, o que eu precisava fazer é obter um nome de classe de recurso de um usuário e, em seguida, usar a lógica para anexar o nome da classe de recurso ao caminho do geodatabase. O serviço GP, então, encontrará a classe de recurso em um geodatabase especificado de antemão e executará a ferramenta Truncate Table.

Tive dificuldades para tornar isso possível no ModelBuilder usando a substituição de variável in-line para o caminho da tabela de entrada, então decidi mudar completamente para Python. Eu criei uma ferramenta de script que pede um nome de classe de recurso de entrada e, em seguida, uso essa string no caminho de dados com o qual o serviço GP pode trabalhar. O código é o seguinte:

Avalie:


DEV203x Introdução ao Bootstrap: Uh-oh

Fiquei muito animado em ver que a Microsoft agora está oferecendo MOOCs por meio do edX. Eu imediatamente me inscrevi para introdução ao Bootstrap e Transact-SQL. O Bootstrap abriu em 1 ° de abril, então gastei algum tempo obtendo os vídeos, baixando as notas e preparando minha seção do OneNote para isso.

Eu vagarosamente cliquei para o primeiro laboratório, que parecia promissor & # 8211 uma tarefa detalhada, claramente projetada para testar o conhecimento adquirido com os vídeos e notas, com regras de envio claras. Em seguida, rolei até o final e vi o seguinte:

Eu mencionei em vários posts anteriores que as avaliações de pares em um MOOC são um obstáculo para mim. Eu mudei um pouco minha opinião sobre o uso de aulas em vídeo (embora por pouco), mas fazer avaliações de pares uma exigência é um pouco demais para mim.

Embora minha necessidade de terminar o que comecei seja forte, tenho muitas outras coisas a fazer também, portanto, para esta, posso me contentar em apenas pegar o conteúdo para referência / aprendizagem individualizada em um estágio posterior.


Exibir subtipos e suas descrições para uma classe de recurso

Publiquei esta essência hoje para verificar os subtipos que estão disponíveis em uma determinada classe de recurso.

importar arcpy
ftr = r & quotC: //Some//Arb//Folder//work.gdb//ftr"
subs = arcpy. da. ListSubtypes (ftr)
para k, v em subs. iteritens ():
imprimir k, v [& # 39Nome & # 39]

É bastante autoexplicativo, então eu o postei no estado em que se encontra, como um trecho de código útil. Os códigos de subtipo são retornados como chaves no dicionário, enquanto os próprios valores são dicionários contendo todas as propriedades do subtipo.

Estou interessado apenas na descrição do subtipo, e é por isso que estou imprimindo o valor no dicionário de valores na chave & # 8216Nome & # 8217. A descrição completa dos recursos da função está aqui.

Por outro lado, não consigo me acostumar com a nova estrutura da ajuda online.


Cary Chadwick

13h35 EDT

14h15 EDT

AUTORES: Paula Kay Lazrus, St. John's University

ABSTRATO: A ideia de criar uma oportunidade para os alunos que estão aprendendo GIS pela primeira vez, para utilizar suas habilidades recém-adquiridas, é atraente e desafiadora. Em colaboração com o Jardim Botânico de Nova York, foi desenvolvido um projeto que permitiria aos alunos aplicar habilidades que ainda estavam dominando para a produção de um produto tangível. Pares de alunos exploraram uma planta específica e sua distribuição na área de Nova York e, em seguida, criaram layouts de mapa e um mapa final da história de seu projeto. Os alunos envolvidos no projeto não tinham experiência anterior em GIS e muitas vezes não tinham acesso ao software GIS fora dos laboratórios institucionais. Os desafios incluíam a aquisição básica de habilidades suficientes no período de tempo necessário para concluir o projeto, bem como questões de compreensão de questões fundamentais relacionadas às questões que eles deveriam abordar.

14h15 EDT

AUTORES: Keith Ratner, Salem State Glenn Hazelton, Northeastern University

ABSTRATO: Onde o GIS está sendo ensinado no Ensino Superior, no mundo da Geografia percebeu-se que a disciplina está perdendo o GIS para outras áreas de estudo. Para onde está migrando? O que isso significa para a geografia? Keith Ratner apresentará a visão da perspectiva da Geografia. Glenn Hazelton discutirá a variedade de alunos que ele vê em suas aulas. Juntos, esperamos gerar uma discussão interessante. Nosso objetivo conjunto é gerar uma discussão sobre o desenvolvimento de uma abordagem interdisciplinar coordenada para educar as pessoas sobre SIG e a ciência das tecnologias geoespaciais.

14h15 EDT

AUTORES: Lyn Malone, World Views GIS

ABSTRATO: Os participantes deste workshop aprenderão como trabalhar com ArcGIS Online, StoryMaps, aplicativos de coleta de dados móveis, como Collector for ArcGIS e Survey123, e outros recursos geoespaciais históricos. Como parte deste workshop, os participantes começarão a pensar em desenvolver uma lição ou exercício que possa ser usado em um de seus cursos. Este workshop é fortemente recomendado para professores de estudos sociais do ensino médio e para professores de ciências sociais de faculdades e universidades.

14h45 EDT

AUTORES: Shane Bradt, UNH Cooperative Extension

ABSTRATO: Embora as tecnologias geoespaciais tenham sido ensinadas como um tópico e utilizadas em extensão na UNH Cooperative Extension por quase duas décadas, o recente aumento do uso do ArcGIS Online e aplicativos relacionados fez melhorias substanciais nos programas de extensão em New Hampshire. Antes focado em GIS desktop e unidades de GPS padrão, o Geospatial Technologies Training Center agora ensina uma variedade de workshops sobre tecnologias de mapeamento online e móvel, incluindo ArcGIS Online, Story Maps, crowdsource mapping, Survey123 e Collector. Além de ajudar o público do NH a aprender como colocar essas tecnologias em uso em suas vidas, o UNH Cooperative Extension começou a incorporar abordagens de base do ArcGIS Online em uma variedade de programas de extensão, bem como para comunicação interna e colaboração. Enquanto alguns aplicativos do ArcGIS Online serviram simplesmente como uma maneira de melhorar a comunicação baseada na web com o público, outros mudaram profundamente a maneira como a programação é entregue. Nestes casos, o ArcGIS Online não apenas permitiu que a UNH Cooperative Extension criasse uma nova programação, mas também permitiu que a organização atingisse novos públicos. Venha participar desta sessão para aprender como UNH Cooperative Extension está usando ArcGIS Online para divulgação e compartilhar exemplos de sua própria divulgação usando mapeamento online.

14h45 EDT

AUTORES: Mike Wagner, Escolas Públicas do Condado de Loudon

ABSTRATO: O Semestre Geoespacial é uma parceria única entre escolas de ensino médio na Virgínia e o departamento de Ciência e Tecnologia Integrada da James Madison University (JMU). Alunos do último ano do ensino médio que participam do Semestre Geoespacial têm aulas de tecnologia geoespacial em sua escola de origem e podem ganhar créditos da JMU. Um aspecto fundamental do programa é o foco em projetos locais conectando alunos, tecnologia e sua comunidade. Mike Wagner, professor líder de GIS nas Escolas Públicas do Condado de Loudon, compartilhará o modelo de implementação de seu condado para este programa empolgante.

15:30 EDT

Como você ensina os alunos a usar GIS e outras tecnologias geoespaciais? O que funcionou melhor para você e que conselho você daria para iniciantes?

Redes de troca de mesa redonda
As sessões finais do dia oferecem oportunidades para os participantes se relacionarem com outras pessoas sobre tópicos críticos em educação e GIS. O objetivo dessas sessões é compartilhar ideias, recursos, projetos e estratégias de ensino de sucesso. As sessões serão facilitadas por líderes de discussão, mas o conteúdo da discussão será totalmente moldado pelos participantes. As discussões da Mesa Redonda serão resumidas na sessão de encerramento final.

15:30 EDT

Como você usou GIS e outras tecnologias geoespaciais para implementar seu próprio currículo?

Redes de troca de mesa redonda
As sessões finais do dia oferecem oportunidades para os participantes se relacionarem com outras pessoas sobre tópicos críticos em educação e GIS. O objetivo dessas sessões é compartilhar ideias, recursos, projetos e estratégias de ensino de sucesso. As sessões serão facilitadas por líderes de discussão, mas o conteúdo da discussão será totalmente moldado pelos participantes. As discussões da Mesa Redonda serão resumidas na sessão de encerramento final.

15:30 EDT

O que você mais valoriza e menos sobre o Dia do Educador GIS como está configurado atualmente? O que mais você gostaria de ver incluído?

Redes de troca de mesa redonda
As sessões finais do dia oferecem oportunidades para os participantes se relacionarem com outras pessoas sobre tópicos críticos em educação e GIS. O objetivo dessas sessões é compartilhar ideias, recursos, projetos e estratégias de ensino de sucesso. As sessões serão facilitadas por líderes de discussão, mas o conteúdo da discussão será totalmente moldado pelos participantes. As discussões da Mesa Redonda serão resumidas na sessão de encerramento final.

4:15 pm EDT

17:00 EDT

07:30 EDT

07:30 EDT

07:30 EDT

8h00 EDT

8h45 EDT


Domingo, 15 de julho de 2018

Decisões de localização

Procurar o lugar ideal para morar pode ser complicado quando há vários fatores que você deseja considerar. Esta semana, em Applications in GIS, tivemos a tarefa de ajudar um casal fictício a encontrar uma área ideal para morar perto da Universidade da Flórida e do Centro Médico Regional do Norte da Flórida (seus locais de trabalho). Ambos os locais de trabalho estão na cidade de Gainesville, FL, localizada no condado de Alachua. Além de considerar o deslocamento diário para ambas as partes, o casal quer morar em uma área onde haja pessoas próximas à sua faixa etária (40 a 49) e maioria de proprietários.

Para iniciar a análise, dados raster foram compilados para mostrar a distância euclidiana em torno da UF e do NFRMC. Em seguida, dados raster adicionais foram criados a partir de informações do censo para determinar onde os indivíduos da mesma faixa etária que o casal residia, bem como onde a maioria dos proprietários morava na área. Cada conjunto raster foi reclassificado de acordo para ser usado em uma análise ponderada posterior. Todos os dados precisavam estar no mesmo formato para serem usados ​​na ferramenta de análise ponderada de forma adequada e, portanto, cada conjunto de dados precisava ser reclassificado.

Abaixo estão meus mapas desta semana. O primeiro mapa mostra todos os dados individualmente em mapas separados. Há setores censitários destacados em cada um para mostrar áreas potenciais para se viver, se apenas esses dados estivessem sendo considerados. O segundo mapa contém os resultados da análise ponderada. Originalmente, o casal queria que todos os quatro pedidos fossem considerados igualmente na análise, mas depois de ver o tráfego na área decidiu que mais ênfase deveria ser dada à localização em relação ao trabalho. O primeiro quadro no segundo mapa mostra os resultados da ponderação da distância da UF e NFRMC em 30% e as considerações de dados do censo em 20%. O segundo quadro mostra os resultados da ponderação de cada fator igualmente a 25%. Decidi alterar apenas ligeiramente os percentuais para a distância do trabalho, uma vez que as condições de viagem de horas extras podem mudar com a implementação de novas obras rodoviárias ou transporte público. As considerações sobre o estilo de vida em uma área tendem a mudar mais lentamente, ou os empregos podem mudar, então decidi não colocar muita ênfase no tempo de deslocamento, mas aumentá-lo conforme solicitado.


Assista o vídeo: ArcGIS Pro SDK for.net. Перлов А. Дата+ (Outubro 2021).