Mais

ArcObjects .NET - Como fechar / liberar FeatureClass, Workspace, Factory


Eu tenho um processo demorado. Eu quero evitar vazamentos de recursos ou conexões de banco de dados desonestos.

Em intervalos durante o processo, quero fazer isso:

  1. obter uma fábrica de espaço de trabalho ArcSDE (Oracle)
  2. abrir um espaço de trabalho da fábrica (ponto em que obtenho uma conexão de banco de dados aberta)
  3. obter uma classe de recurso existente ou tabela no espaço de trabalho,
  4. consultar a classe ou tabela de recursos, passar por cima do cursor fazendo meu negócio
  5. em seguida, solte / feche tudo de forma que:

    • A conexão do banco de dados e o bloqueio da tabela da perspectiva do ArcSDE / Oracle (conforme revelado por algo como "sdemon -o info -I users" ou uma consulta da tabela sde.table_locks) é fechada / liberada.
    • o processo é resiliente para reinicializações do ArcSDE / Oracle (ou seja, não estou deixando algo pendurado que não funcionará mais tarde após a reinicialização noturna)
    • Todas as referências RCW, COM e memória são liberadas.

Basicamente, devido à natureza de longa duração do processo, Quero ter certeza de que não tenho vazamentos de recursos ou conexões não autorizadas e meu processo pode sobreviver a reinicializações do ArcSDE / Oracle.

Já vi discussões como:

E isso, do qual cito

Cada fábrica de espaço de trabalho mantém um conjunto de espaços de trabalho ativos atualmente conectados que são referenciados pelo aplicativo. Quando qualquer um dos métodos Open * listados anteriormente são chamados, a fábrica do espaço de trabalho verifica se um espaço de trabalho foi aberto anteriormente com um conjunto de propriedades correspondente. Nesse caso, uma referência à instância existente é retornada.

Tudo isso me sugere que eu deve release (por exemplo, classe ComReleaser ou loop Marshal.ReleaseComObject () equivalente), provavelmente nesta ordem:

  • cursor
  • featureclass / table
  • área de trabalho
  • fábrica de espaço de trabalho

Depois, há discussões como essa em que as pessoas fazem tudo isso e talvez até espalhem System.GC.Collect () e sua conexão com o banco de dados ainda está viva.

Oh gurus, qual é a informação final sobre isso?


Você já cobriu muitos aspectos em sua postagem. No entanto, para expandir sua pergunta, sempre siga este padrão:

if (obj! = null) ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject (obj); obj = nulo;

Então ligueSystem.GC.Collect ()para forçar o coletor de lixo a remover quaisquer referências ao DBMS.

A ordem de liberação deve ser Cursors, Features (IFeature), FeatureClasses, Workspaces e outros ArcObjects instanciados.

Os aplicativos ArcGIS Desktop e ArcEngine são STA (aplicativo de thread único). Não é seguro nem recomendado usar ArcObjects em threads (Workers); Pode-se usar a serialização e desserialização de objetos para conseguir isso. Para mais detalhes, dê uma olhada aqui.


Recuperando a fábrica da classe COM para o componente com CLSID falhou devido ao seguinte erro: 80040154

Desenvolvi um serviço Windows usando C # .NET para gerar relatório em PDF. Para gerar o arquivo PDF, estou usando uma dll de terceiros. O aplicativo está sendo executado na minha plataforma Windows XP. Quando implantei o serviço na versão de 64 bits do Windows Server 2008, recebi este erro:

A recuperação da fábrica da classe COM para o componente com CLSID <46521B1F-0A5B-4871-A4C2-FD5C9276F4C6> falhou devido ao seguinte erro: 80040154.

Registrei a DLL usando o comando regsvr32. Consigo ver este CLSID no registro. Mas o problema persiste.

Qual pode ser o problema?


ArcObjects .NET - Como fechar / liberar FeatureClass, Workspace, Factory - Sistemas de Informação Geográfica

ArcObject .Net com VS 2013

Use este repositório como um memorando para orientá-lo na configuração, depuração e desenvolvimento do AO.

Lição 1: Ambiente de configuração e depuração

OK, vamos começar nosso primeiro projeto AO no VS2013! Na barra de menus: ARQUIVO - & gt Novo projeto, em seguida, abra a estrutura em árvore dentro do painel esquerdo na caixa de diálogo de abertura, encontre Visual C # - & gt ArcGIS - & gt Suplementos de área de trabalho - & gt Suplemento ArcMap.

No Assistente de suplementos do ArGIS, certifique-se de marcar a opção "Botão" em Tipos de suplemento. Isso criará um modelo de um controle de botão para ArcMap. Você deve conseguir encontrar um arquivo cs com o nome "Button1.cs". Substitua este arquivo pelo em aqui. Antes de construirmos o controle de botão, abra o Soultion Explorer do seu VS 2013, clique com o botão direito do mouse no nome do projeto e escolha as propriedades. Verifique 2 lugares:

  1. A estrutura de destino na seção Aplicativo deve ser ".NET Framework 4"
  2. Na seção Debug, certifique-se de que "Start external program" esteja definido como seu programa ArcMap

Ainda no Solution Explorer, clique com o botão direito em References e escolha “Add ArcGIS References.”. Precisamos das duas referências a seguir para construir essa solução. Eles não estão incluídos neste modelo padrão:

Agora você está pronto para construir a solução! Antes de fazer isso, ainda há algumas tarefas de limpeza que temos que fazer na extremidade do ArcMap. Vá para a pasta de instalação do ArcMap, geralmente localizada em: C: Arquivos de programas (x86) ArcGIS Desktop10.3 bin, encontre um arquivo chamado "ArcMap.exe.config". Abra-o com privilégios de administrador. É um arquivo XML e pesquise a seguinte seção localizada na parte superior do arquivo:

Por padrão, ArcMap é configurado para rodar em .Net Framework Runtime 2.0, que é um conflito com o controle de botão que iremos construir no VS 2013. Comente essa linha e descomente a linha acima para habilitar .Net Framework Runtime 4.0 para ArcMap . OK, agora você deve ser capaz de criá-lo sem nenhum problema. Para ter certeza de que estamos na mesma página para a seção seguinte, verifique o arquivo "config.esriaddinx". Você pode encontrar este arquivo em Solution Explorer. Aqui está o que eu tenho (eu removi seções não relacionadas)

Ele nos dá um bom resumo da ferramenta que acabamos de construir. Seu nome é "ArcMapAddin1" e seu alvo é o ArcMap 10.3 rodando no .Net Framework Common Lauguage Runtime 4.0. Este controle de botão recebeu a legenda "Meu botão" e foi categorizado em "Controles de suplemento". Lembre-se disso, pois você precisará deles mais tarde.

Se clicarmos no botão "Iniciar" com uma seta verde no VS2013, você deverá ser capaz de ver o ArcMap está começando. VS2013 fará todos os trabalhos sujos para nós: invocar ArcMap 10.3 e anexar o depurador ao seu processo, carregar todos os símbolos necessários de vários assemblies para facilitar a depuração. Então, estamos prontos para depurar!

Você pode colocar um ponto de interrupção em qualquer linha de origem em Button1.cs, mas nada acontece, certo? É porque esse controle é um componente da IU e requer que o usuário clique nele para invocar qualquer ação. Então, onde está nosso botão? Não está na IU! Bem, é realmente inconveniente e o ESRI pode fazer um trabalho melhor adicionando automaticamente o botão na barra de ferramentas durante a depuração.

De qualquer forma, teremos que fazer isso manualmente. Você precisará ir para Personalizar - & gt Gerenciador de suplementos, você poderá ver nosso botão em "Meus suplementos", graças à ESRI! O nome deve corresponder ao nome em config.esriaddinx, o arquivo XML que peço que você preste atenção.

Em seguida, clique no botão "Personalizar", na aba Barras de Ferramentas, você pode criar uma nova barra de ferramentas para conter o nosso trabalho. Eu criei um chamado "Monkeybar", você pode nomeá-lo como quiser, apenas certifique-se de que não irá duplicar os existentes no ArcMap. Alterne para a guia Comandos, o painel esquerdo lista todas as categorias disponíveis, lembra do que eu disse para você se lembrar? O nome da categoria é "Add-In Controls"! Se você clicar nele, no lado direito, você verá "Meu Botão" como o comando.

Agora você pode arrastar "Meu botão" para sua nova barra de ferramentas! A próxima etapa será adicionar algumas camadas ao mapa. A maneira mais rápida de fazer isso é adicionando um mapa base que trará o sistema de coordenadas também. Eu escolhi ESRI World Topo. Possui projeção tipo web Mercator. Você pode encontrar meu arquivo mxd aqui

Agora, se você clicar no botão (por padrão, é com um ícone redondo azul), você deve ser capaz de ver quatro pontos redondos vermelhos aparecendo nos quatro cantos do mapa. Você pode precisar ampliar totalmente para vê-los. Se você colocar um ponto de interrupção na linha 59 de Button1.cs e clicar em nosso botão no ArcMap, a execução será suspensa e você poderá fazer a depuração passo a passo no código-fonte Button1.cs dentro do VS2013.

Você pode notar que a maioria das lógicas de Button1.cs estão fora da função OnClick. E se você quiser depurar o código, digamos, na linha 33? Bem, essa função é chamada de "o construtor padrão da classe" e apenas invocada uma vez quando este botão é clicado pela primeira vez. Para depurar os códigos lá, teremos que encerrar a sessão de depuração atual clicando no botão quadrado vermelho no VS 2013, em seguida, colocar um novo ponto de interrupção na linha 33 e começar novamente.

BTW, alguém pode me dizer o que significa a linha 36? Qual é a seção do lado direito do sinal + =? Se você não sabe, é hora de revisar o C # antes de passar para as lições futuras.

Lição 2: Faça o trabalho pesado fora do ArcMap

Quando o Arcpy foi lançado, uma das coisas interessantes é que os GISers têm permissão para realizar o trabalho de processamento de dados sem ter que abrir o ArcMap. AO permite que você faça isso desde o primeiro dia, você só precisa de um pouco mais de esforço de programação :)

Nesta sessão, vamos desenvolver um aplicativo de linha de comando do Windows que é capaz de rodar sem o ArcMap envolvido (Isso não é totalmente verdade: se você não tem a licença ArcEngine, você ainda precisa ter o ArcMap instalado no sistema em ordem para obter o acesso à licença). De qualquer forma, vamos fechar os olhos e o pretenso ArcMap está fora do radar aqui.

Para fazer um caso divertido, decidi brincar com alguns dados reais do Banco de Dados de Restauração dos Grandes Lagos. Por meio de sua interface de mapa, você pode baixar todos os projetos GLRD em formato csv. Tomaremos esse dump como dados de origem. Cada linha desse arquivo contém um registro de projeto com lat / lon, que podemos convertê-lo em uma classe de recurso de ponto. Se você é um GISer, provavelmente já fez isso centenas de vezes, você pode se perguntar: qual a parte divertida disso? Tudo bem, vamos adicionar um pouco de diversão: e se eu só quiser extrair o projeto para o estado de Michigan? Bem, se você ainda tiver problemas para encontrar o local para baixar este arquivo csv, clique aqui.

Voltemos ao VS2013. ARQUIVO - & gt Projeto, no painel esquerdo dentro da janela Novo projeto: Instalado - & gt Modelos - & gt Visual C # - & gt ArcGIS, se você clicar em "Estendendo ArcObjects", o painel central exibirá todos os modelos disponíveis, escolha "Aplicativo de console ( Área de Trabalho)". Você deve ver "ArcGIS Project Wizard" aparecendo, na primeira página, vamos manter tudo como padrão e clicar em "Next". Em seguida, você precisará escolher o tipo de licença para seus produtos ESRI para que o programa saiba quais componentes podem ser incorporados em seu programa. Eu escolhi "Avançado" e clique em Concluir para carregar o modelo.

Se você abrir o "Solution Explorer", deverá ver dois arquivos cs criados pelo ESRI. Substitua "Program.cs" por este. Novamente, antes de construir o programa, você terá que adicionar algumas referências extras. Você se lembra da primeira etapa do "ArcGIS Project Wizard"? Eu o convenci a pular, você realmente poderia carregar referências extras lá.

1.ESRI.ArcGIS.Version 2.ESRI.ArcGIS.Geodatabase 3.ESRI.ArcGIS.Geometry

Agora, você deve ser capaz de construir o programa. Essa ferramenta deve ser executada na linha de comando com dois argumentos:

C: DesktopConsoleApplication1.exe glrd.csv michigan

O primeiro argumento é o caminho para o arquivo csv que você acabou de baixar, o segundo é o nome do estado. Se você falhar em alimentar esses dois argumentos, o programa será encerrado imediatamente. Então, você pode perguntar: como eu poderia configurar este insdie VS2013? No Solution Explorer, clique com o botão direito do mouse no projeto, vá em "propriedades", em Debug, coloque os argumentos dentro de "Argumentos da linha de comando". Ao fazer isso, toda vez que você depurar o programa, o material que você colocar nele será alimentado.

Este é um aplicativo "autônomo" e vamos nos concentrar no código. Existem duas tarefas realizadas no código:

  1. Analisa um arquivo csv do Excel usando consulta SQL
  2. Crie um arquivo Geodatabase e preencha-o com geometria de pontos e atributos

A primeira tarefa é necessária se tivermos que filtrar o conteúdo primeiro. Para o caso que configurei, gostaríamos de descobrir apenas os projetos em um único estado dos Grandes Lagos. Conseguimos isso na Linha 33 usando OleDbCommand no Excel. A Microsoft oferece uma abordagem muito simples para manipular dados do Excel usando a instrução SQL. Eu o recomendo fortemente para seu trabalho de programação.

Se encontrarmos um número positivo de projetos para um estado, podemos prosseguir para colocá-los dentro de uma geodatabase. Preste atenção no fluxo desse processo:

  1. Obtenha a fábrica que é capaz de criar geodatabase com base em arquivo, consulte a linha 135.
  2. Crie uma nova classe de recurso na linha 147.
  3. Faça um loop nos registros do projeto, crie um novo recurso e, em seguida, insira-os na classe de recurso por meio de FeatureBuffer e FeatureCursor, que são recomendados para inserção em massa. Veja a linha 156. Assim que o loop for concluído, libere o curosr para gravar todos os registros de volta no disco.

Durante a criação da classe de recursos, você terá que definir:

Este é um procedimento bastante padrão. Estou surpreso que o ESRI não tenha um trecho ou amostra de código para isso. Eu só encontro isso na conta do github da ESRI. Esteja ciente de que o exemplo usa "esriDataSourcesFile.TextFileWorkspaceFactory", que liberou o programador de lidar com o arquivo csv diretamente. No entanto, a liberdade sempre vem da compreensão do sistema. Com a abordagem que apresentei, agora você tem mais flexibilidade para lidar com arquivos do Excel.

Antes de encerrarmos, vamos voltar ao modelo padrão que a ESRI nos oferece:

Essas são as rotinas para inicializar componentes ESRI, incluindo licenciaese, e desligar tudo no final. Seu código que envolve coisas ESRI deve ser escrito no meio.

Antes de dispensarmos, você poderia dar uma olhada na assinatura da função ParseCSV, o que List & ltdynamic & gt significa? Se você ler o código com atenção, qual é o tipo de material que colocamos na Lista na linha 38? Novamente, se você não tem ideia, seu conhecimento C # precisa ser atualizado!

OK, terminamos. Até a próxima, que a força esteja com você!

Lição 3: ArcObjects ou ArcPy, ser ou não ser

Em primeiro lugar, não pretendo criar uma guerra santa aqui. Ambos são ótimos! Eu só quero ilustrar a diferença entre AO e AP em um caso particular. Felizmente, não importa se você é um apoiador AO ou AP, isso pode ser útil para você escolher a ferramenta certa para a tarefa certa.

Vamos descrever a tarefa primeiro: se você está familiarizado com o Graph como uma estrutura de dados no contexto da ciência da computação, você deve saber que é uma estrutura fundamental para conduzir qualquer tipo de operação, como rastreamento de rede, caminho mais curto, fluxo máximo, etc. Dado um conjunto de dados pré-processado NHD Plus para Grandes Lagos em formato de banco de dados geográfico, gostaríamos de criar o gráfico em sua forma de lista auxiliar. Examinando o geodatabase cuidadosamente, descobrimos que existem duas classes de recursos que são particularmente úteis para esta tarefa: NHD_Flowline e Hydro_Net_Junctions. Como você deve saber, NHD Plus é um conjunto de dados que foi processado e construído com uma rede de fluxo usando a tecnologia ESRI. No entanto, o geodatabase ESRI é proprietário, portanto, não podemos tirar proveito dos dados existentes para construir nossa lista de adjacência (na verdade, exagerei um pouco aqui, porque o ESRI fornece uma biblioteca C ++ de código aberto para manipular um geodatabase baseado em arquivos).

Usando essas duas classes de recursos, poderíamos fazer nosso trabalho usando o ArcPy de uma maneira bastante direta. Aqui está o código. Você pode notar que o script usou um arquivo shp em vez de um geodatabase. Eu não menti, eu tenho uma versão usando Geodatabase aqui. Se você trabalha para meu empregador, deve conseguir visualizá-lo. Se você configurar este script em sua área de trabalho com ArcMap 10.3 instalado e NHD Plus para Great Lakes pronto (deixe-me saber se você precisa deste 'NHDPlusV21_GL_04.gdb' usado no teste), você pode descobrir que pode levar até 6 para 12 horas para ser concluído. Aposto que você também notaria que o gargalo está aqui e aqui.

Podemos fazer alguma melhoria aí? Infelizmente, não há realmente muito que possamos fazer, já que o ESRI apenas expôs funcionalidades limitadas do ArcPy, principalmente o geoprocessamento usando o que quer que esteja dentro da caixa de ferramentas do ArcMap. Em outras palavras, todos os seus scripts ArcPy fazem uma coisa: uma combinação de qualquer número de ferramentas que a ESRI oferece no ArcMap. Você tem capacidade de 64 bits, mas não ajuda muito neste caso, que é mais provável que seja limitado pela CPU.

Vamos jogar a moeda e verificar o outro lado: ArcObjects .Net, este malvado sucessor de ArcObject para Visual Basic fornece um invólucro de camada fina em cima de ArcObjects COMs e deve ser capaz de acessar todos os aspectos das tecnologias ESRI, bem, se você tiver licença apropriada adquirida. Para ter um jogo limpo, vamos nos ater à mesma metodologia que o ArcPy adota. Acreditamos que poderíamos ter um script C # melhor executado usando AO com base no fato de que AO oferece uma granularidade mais fina do que AP em termos de programação. Ao quebrar esses dois gargalos e ir uma camada mais profunda dentro do AO, podemos fazer a diferença.

A primeira coisa, vamos explicar a parte entediante primeiro: Aqui estão dois POCOs para representar o nó e seus sucessores:

Vértice como o nó é usado para rastrear a Id do nó, o número de fluxos de entrada e o mais importante: os nós de downstream armazenados em uma Lista. A classe DownstreamNode contém o ID do nó, o ID do fluxo de entrada e o mais importante: os dados de velocidade em uma lista (nosso pensamento original é usar essa velocidade para calcular o tempo de viagem ao longo dos fluxos).

No script C #, precisamos abrir o geodatabase baseado em arquivo e obter as referências às classes de recursos que gostaríamos de examinar:

Como agora temos classes de recursos em mãos, estamos prontos para lidar com as consultas espaciais, que normalmente são feitas no ArcPy por três linhas de código:

A terceira linha "arcpy.SelectLayerByLocation_management" é a chave. Como teremos que percorrer cada ponto de junção contra a camada NHD_Flowline (um ponto contra todas as polilinhas), suspeitamos que "SelectLayerByLocation_management" pode ser ineficiente devido ao design. "SelectLayerByLocation_management" provavelmente está programado desta forma:

  1. Construir índice espacial em NHD_Flowline
  2. Pesquise o índice usando um determinado ponto e encontre todos os candidatos que residem em uma subárvore de polilinhas
  3. Varredura linear de todos os candidatos contra determinado ponto usando operadores geométricos para descartar falsos positivos
  4. Retornar conjunto de resultados

É possível que a primeira etapa, o índice, seja reconstruído toda vez que invocarmos "arcpy.SelectLayerByLocation_management", o que é um desperdício. E se o construirmos uma vez e usarmos o mesmo índice para todos os pontos? Disseram-me que a consulta espacial AO deve ser feita usando:

Não tenho certeza de como foi implementado, mas realmente parece perto de "arcpy.SelectLayerByLocation_management". Portanto, decido seguir um caminho diferente: "IFeatureIndex" e "IIndexQuery2", que parece promissor por nos fornecer um controle de escala mais preciso. Aqui está o meu código:

Criamos uma coclasse FeatureIndex e pedimos a ela para criar o índice espacial em relação à classe de recurso fornecida (parece que FeatureIndex realmente cria o índice no sistema de arquivos, pensei que poderia tirar proveito do índice dentro do geodatabase.) E então o lançamos para IIndexQuery2, que possui um método chamado: IntersectedFeatures. Se estivermos certos, isso executará as etapas acima de 2 a 4.

Podemos facilmente colocar códigos juntos como um aplicativo de console ESRI usando C #, bem, se você seguiu meus tutoriais anteriores. Uma coisa que vale a pena mencionar é calcular o comprimento geodésico de uma polilinha com coordenadas lon / lat. No ArcPy, novamente, só precisa de uma linha de código:

Você pode pensar que deveria ser assim tão simples. Bem, segure seu pensamento, veja como isso foi feito em AO, dado que a polilinha é uma IPolilina:

Desculpe, não me pergunte como uma instância LinearUnitClass padrão poderia funcionar aqui. É bastante confuso. Eu segurei meu impluso para colocar meu próprio código Haversine lá porque eu acredito que a ESRI tem uma solução melhor perto do Pólo Norte / Sul. Você tem que acreditar! :) Mais uma vez, um guru da AO me disse que esse comprimento geodésico na polilinha deve ser feito no nível dos segmentos usando um método diferente. Não gostei muito: na verdade, intencionalmente fiz meu código C # um pouco bagunçado, até tentei usar o Linq, mas o Linq do C # é pálido em comparação com a compreensão de lista do Python. Porque eu sei: C # no CLR contra COM na plataforma Windows definitivamente vai ser mais rápido que o Python, sem mencionar que o ArcPy está no topo do invólucro de invólucros.

Se você conseguiu compilar o código com sucesso, não se apresse em executá-lo, faça uma xícara de café e tenha seu livro favorito em mãos, o último script ArcPy demorou horas! Bem, no meu laptop, tive tempo de tomar uma xícara de café e ler algumas notícias online, no entanto, surpreendentemente, esta versão AO foi concluída em 15 minutos! Minha matemática é ruim, alguém pode me dizer quantas vezes este é mais rápido que a versão AP?

Novamente, não quero provar que AO é melhor do que AP ou convencê-lo a mudar para AO. Eu gostaria de dar a todos a oportunidade de atualizar sua base de conhecimento e pensar fora da caixa! É possível que você perca o senso de desempenho enquanto desfruta das menos linhas de código do ArcPy. Eu gosto do ArcPy, realmente gosto, mas em muitos cenários, eu sinto como se estivesse usando uma camisa de adolescente. Então, meu conselho é: se você se preocupa com o desempenho ou sente que o ArcPy está muito lento para você, você pode considerar o uso do ArcObject, o que normalmente não o decepcionará, pelo menos não desta vez para o nosso caso de teste. :)

Eu sei, eu sei, devemos discutir ArcObject, não ArcPy. No entanto, anteriormente, em "ArcObject .Net com VS 2013". (tudo bem, não somos uma série de TV :), fiquei chocado com o ganho de desempenho ao mudar de ArcPy para ArcObject. Achei que valeria a pena fazer uma investigação sobre o ArcPy, sua implementação e capacidade. Se você não planeja aprender ArcPy, ignore este capítulo.

O ArcPy foi introduzido pela primeira vez em 2010 com o realse do ArcGIS 10 (bem, é realmente apenas 9.4, mas chamá-lo de 10 o fez parecer mais novo). Na verdade, havia "arcgisscripting" de volta ao ArcGIS 9.2, ele suportava não apenas Python, mas também outras linguagens de script, como VBScript, Perl. No entanto, logo após a Microsoft interromper o suporte a VB, VBScript, Jscript, a ESRI tomou a decisão de descartar todos os scripts, exceto Python. Ele foi criado para fornecer capacidade de script apenas em tarefas de geoprocessamento. A caixa de ferramentas de geoprocessamento foi lançada no ArcMap 9.2. Ele foi projetado para simplificar certos trabalhos de processamento de dados:

  1. Caixa de ferramentas de análise
  2. Caixa de ferramentas de cartografia
  3. Caixa de ferramentas de conversão
  4. Caixa de ferramentas de gerenciamento de dados
  5. Caixa de ferramentas de edição
  6. Caixa de ferramentas de geocodificação
  7. Caixa de ferramentas de referência linear
  8. Caixa de ferramentas multidimensional
  9. Caixa de ferramentas de estatísticas espaciais

No ArcPy, cada função de geoprocessamento no ArcMap é definida como uma função dentro dos módulos ArcPy. Você pode gerar o casco de contexto de uma classe de recurso de ponto pelas duas linhas de código a seguir:

A função "MinimumBoundingGeometry_management" é equivalente à ferramenta "Minimum Bounding Geometry", que pode ser encontrada ArcMap- & gt Toolbox - & gt Data Management. ArcPy simplesmente automatiza esta ferramenta permitindo ao usuário enviar parâmetros desta ferramenta de uma maneira programática. Depois de uma segunda olhada, você pode notar que todas as funções seguem a convenção de nomenclatura samae:

nome da ferramenta + '_' + alias da caixa de ferramentas

Se você não tiver certeza do apelido de uma determinada caixa de ferramentas, clique com o botão direito na caixa de ferramentas e em propriedade.

De acordo com o blog da ESRI, aqui está o objetivo do ArcPy:

"ArcPy é um pacote de site que se baseia (e é o sucessor) do módulo de script de arcg. Seu objetivo é criar a base para uma maneira útil e produtiva de realizar análise de dados geográficos, conversão de dados, gerenciamento de dados e automação de mapas com Python. "

Na primeira edição do ArcPy, além do geoprocessamento, ele também fornece alguns outros módulos: Mapeamento (arcpy.mapping), Análise espacial (arcpy.sa) e Analista geoestatístico (arcpy.ga). No 10.1, o acesso a dados (arcpy.da) e o tempo (arcpy.time) foram introduzidos. Ele também inclui algumas outras bibliotecas / utilitários.

Como todos sabemos, toda a customização de produção do ESRI pode ser feita através do ArcObject e o ArcObject foi desenvolvido com base no Microsoft COM no sistema Windows. Por exemplo, o meio para executar ferramentas de geoprocessamento é através do GPDispatch coclass (definição de coclass). Ele apenas permite que o usuário envie argumentos por string e consuma qualquer resultado que a interface retornar. Portanto, a ESRI o chama de "objeto de granulação grossa", veja aqui. ArcPy, no entanto, implementa suas funcionalidades de geoprocessamento no topo desta interface. Como alguns dos documentos da ESRI indicam, ArcPy também é um modelo de baixa granularidade.

"Arcpy.mapping foi criado para o analista profissional de GIS (bem como para desenvolvedores). Tradicionalmente, os cenários listados acima tinham que ser feitos usando ArcObjects e muitas vezes provou ser um ambiente de programação muito difícil de aprender para o profissional GIS médio. Arcpy.mapping é um modelo de objeto granulado, o que significa que as funções são projetadas de forma que uma única função arcpy.mapping possa substituir muitas linhas do código ArcObjects. "

Portanto, você poderia facilmente fazer algo incrível por meio do ArcPy em apenas algumas linhas de código:

Os códigos acima irão renderizar todos os recursos do mxd, usando a configuração definida no mxd, para um arquivo pdf.

Você pode querer perguntar: devemos considerar o ArcPy como um substituto do ArcObject? Ainda assim, de acordo com a ESRI:

"Arcpy.mapping não é um substituto para ArcObjects, mas sim uma alternativa para os diferentes cenários que ele suporta. ArcObjects ainda é necessário para um desenvolvimento mais refinado e personalização de aplicativos, enquanto arcpy.mapping se destina a automatizar o conteúdo de documentos e camadas de mapa existentes Arquivo."

Você também pode querer saber: se ArcPy é capaz de chamar ArcObject diretamente? A resposta é não. Mas, tenho certeza, o ArcPy ainda se comunica de alguma forma com o ArcObject indiretamente, implicitamente. Como sempre, "a curiosidade matou o gato". Vou abrir o capô do ArcPy um pouco e ver o que há lá. Na minha área de trabalho, o ArcPy foi instalado em:

C: Arquivos de programas (x86) ArcGIS Desktop10.2 arcpy arcpy

Lá, você encontrará uma estrutura de pacote do módulo python clássico. Existe uma subpasta chamada "arcobjects", você está convencido? Tenho certeza que não. Então, vamos abrir alguns arquivos py. A classe "MapDocument" é definida em _mapping.py. A declaração da classe é como:

Se você está familiarizado com C # ou Java, pode considerar "mixins" como uma interface. Não há nenhum construtor explícito definido no MapDocument, portanto, de acordo com a Ordem de Resolução do Método do Python (MRO, profundidade primeiro antes de 2.3 e algoritmo C3 depois, você pode examinar o comportamento do MRO por class.mro ()), seus construtores de classes base será invocado:

Parece que MapDocumentMethods invoca sua classe base iniciar diretamente se super () realmente retorna sua classe base. No entanto, como estamos lidando com herança múltipla aqui, super (MapDocumentMethods, self).iniciar(mxd) realmente invoca o construtor da segunda classe base do MapDocument: "_BaseArcObject". Se você quiser entender mais sobre os comportamentos elegantes do super, clique aqui. Vamos dar uma olhada em _BaseArcObject:

Ele tem um construtor capaz de receber argumentos de entrada de comprimento variável. Ele também define uma variável de membro estático, "_arc_object". A função "gp._gp.CreateObject" é realmente definida no espaço de nomes "geoprocessamento", lembra que mencionamos que o geoprocessamento é o primeiro módulo introduzido para ArcPy? Para gp, é uma instância da classe Geoprocessor:

Agora, chegamos à origem: ArcPy se comunica com ArcObject através de "arcgisscripting", que é o antecessor de ArcPy. Você não encontrará arcgisscripting dentro da pasta ArcPy, na verdade ele reside em "C: Arquivos de programas (x86) ArcGIS Desktop10.2 bin", com o nome de "arcgisscripting.pyd", que na verdade é uma DLL.

Como discutimos no capítulo anterior e neste capítulo, por causa da interoperabilidade com COM, você deve esperar alguma perda de desempenho se usar ArcPy e não ArcObject. A quantidade de perdas que você pode obter depende, na verdade, das tarefas. Aqui está um benchmark que encontrei na Internet em relação ao ArcGIS 9.3. @dbGLC me lembrou que este gráfico foi tirado de uma presnetation discutindo a possibilidade de invocar AO COM diretamente usando Python usando alguns pacotes Python COM, como comtypes. O tópico de discussão original está aqui. Você pode encontrar muitas idéias brilhantes lá.

Novamente, este capítulo pretende ajudá-lo a entender o que é o ArcPy. ArcObject e ArcPy são ótimas ferramentas para diferentes cenários. Se você quiser saber mais sobre o ArcPy, recomendo os repositórios do ESRI no github aqui. Deixe-me saber se você pode encontrar alguma função de geoprocessamento cara chamada dentro de um loop enorme. :)

Lição 5: Diagrama de modelo de objeto ArcObjects (OMD)

Se você é um desenvolvedor de AO experiente, não importa se você prefere VBA, VB, VB.Net, C #, Java ou C ++ (ordenado pela popularidade :), você deve pegar esses diagramas algumas vezes para, pelo menos, procurar um propósito. Bem, se você é um novato AO, assim como eu, pode achar que fui exagerado. Eu não vou te culpar porque eu pensei assim também. No entanto, uma vez que você comece a implementar uma função por meio de AO seriamente, esses diagramas seriam sua arma final, especialmente depois de algumas pesquisas no Google que desperdiçam tempo. Sem brincadeira, sempre brinquei com meus colegas: desenvolvedor sênior é alguém que consegue resolver um quebra-cabeça técnico que não é respondido pelos buscadores. Infelizmente, ArcObjects se enquadra nesta categoria mais do que outras tecnologias! Duas razões: 1. AO tem um grupo de usuários relativamente pequeno 2. O ESRI fez um trabalho muito ruim para manter a documentação da API do desenvolvedor. Eu pago $ 1.500 por ano pela assinatura do EDN, mas ainda me sinto impotente com mais freqüência do que esperava.

As pessoas sempre aprendem com suas próprias lições (bem, alguém cai no mesmo rio mais de uma vez). Depois de algumas experiências frustrantes com o Google e os documentos do EDN, de repente me lembrei da época em que era jovem: vi aqueles gurus AO parados e ruminando na frente de um enorme quadro branco com um diagrama de alguns centímetros pregado nele. Lembrei-me de que o diagrama que eles olhavam é chamado Diagrama de modelo de objeto AO, também conhecido como OMD (Oh My Darling)! Espere um minuto, onde estão meus queridos? Na minha área de trabalho, eles estão localizados em:

C: Arquivos de programas (x86) ArcGIS DeveloperKit10.4 Diagrams

Existem 68 pdfs nesta pasta, bem, havia muito menos para a versão anterior do AO. Se você for um amador como eu, gostaria de recomendar a leitura de GeoDatabaseObjectModel.pdf primeiro. Ele contém a maioria das coisas que você pode precisar para iniciar a programação AO. Vamos dar uma olhada juntos!

Em primeiro lugar, você precisa entender que a ESRI é um seguidor sincero da UML. Todos os símbolos estranhos que você pode ver são, na verdade, derivados de diagramas de classes UML com alguma invenção da ESRI. Aqui está uma boa referência para o diagrama de classes UML. Se você não quiser gastar 3 minutos repassando esses conceitos e símbolos associados, o ESRI tem uma UML 101 em cada diagrama.

A ESRI fez sua invenção. O que são interface de entrada e interface de saída? Mesmo depois de fazer a aula de UML para um semaster completo, não há nenhuma pista do que diabos eles podem ser! Não se preocupe, a ESRI oferece explicações em sua série "Learning ArcObjects", que está disponível online e offline para cada lançamento. Aqui está o charpter: Lendo OMDs. Agora você deve saber que a interface de entrada é a interface que a classe especificada realmente implementa, a interface de saída é, na verdade, um registro de eventos, o ESRI a chama de coletor de eventos. É um truque da velha escola para registrar seu manipulador de eventos. Se você for tão ingênuo quanto eu, você pode simplesmente considerá-lo como um Evento no contexto de .Net.

Lembra que mencionei antes que aqueles gurus imprimiram ORM tão grande quanto um mapa em pequena escala usando plotter? Por quê? Se você abrir GeoDatabaseObjectModel.pdf, isso é o que você verá bem, a menos que tenha uma TV LED extremamente grande como tela:

Agora, você sabe por que o plotter é necessário, não é?

Se você conhece a interface de seu interesse, é sempre conveniente consultar o OMD correspondente diretamente. Caso contrário, você sente que está brincando de esconde-esconde.

OK, vamos brincar de esconde-esconde. Aqui está o negócio: eu gostaria de abrir um arquivo baseado em GeoDatabase e obter as informações sobre as classes de recursos nele. Se você é um programador, você deve saber que abrir um arquivo do disco geralmente usa algumas funções como "abrir" ou "abrirfile" etc. Já que somos OOP, deve haver uma classe que podemos aplicar esta função. Antes de mergulhar no oceano My Darlings, pego seus braços e digo: espere um minuto, mais uma coisa que preciso mencionar: três regras de sobrevivência para jogar com My Darlings (OMD):

eu. Durante o rastreamento de interface, toda vez que uma interface que implementa IUnknown é alcançada, você sabe que é o fim. Observe que eu uso a "interface" do workd e não a classe? AO é construído com base no padrão Microsoft COM. Está basicamente dizendo que toda chamada de função deve ser feita em uma instância de algum tipo de interface. Por protocolo, cada interface definida no domínio de COM deve implementar a interface IUnknown. Não se preocupe com o que está em IUnknown, mantê-lo desconhecido não é uma má ideia. Tudo que você precisa saber é que é um beco sem saída, uma vez que vemos uma interface no OMD que implementa IUnknown diretamente. Alcançamos o nível mais alto da hierarquia OMD.

WorkspaceFactory é uma classe que implementa IWorkspaceFactory, que é uma interface de entrada e implementa IUnknown. Isso nos diz que IWorkspaceFactory é uma interface de nível superior.

II. O acesso às funções definidas em uma interface é sempre por meio de uma instância de determinado tipo de classe. Este tipo de classe é uma classe Coclass ou "instanciável", que é um tipo de classe cuja instância só pode ser recuperada por meio de outras classes. Isso pode significar a recuperação da fábrica, singlton ou upcasting. Ainda vamos usar WorkspaceFactory como exemplo.

Em .Net, as WorkspaceFactory no OMD são implementadas como duas unidades: interface "WorkspaceFactory" e classe "WorkspaceFactoryClass", que implementa a interface "WorkspaceFactory" junto com outras interfaces que WorkspaeFactory deve fazer de acordo com OMD. "WorkspaceFactory" é uma interface vazia que provavelmente funciona como um espaço reservado. Por quê? Não sei. Se você souber, por favor me avise :)

Pela descompilação, podemos dizer que o construtor de WorkspaceFactoryClass está com o modificador de acesso "interno", o que significa que só pode ser acessado dentro do assembly. "extern" significa que este construtor é implementado em outro lugar. O atributo MethodImpl associado ao construtor é atribuído a MethodImplOptions.InternalCall, que indica "a chamada é interna, ou seja, chama um método que é implementado dentro do common language runtime.". Tudo isso garante que não possamos criar uma instância de WorkspaceFactoryClass em nosso código. Portanto, WorkspaceFactoryClass se qualifica para ser um classe "instanciável".

No OMD, a classe Abstract, a classe instanciável e a coclass podem ser facilmente identificadas pela forma do retângulo. A classe abstrata é um retângulo sombreado 2D, a classe instanciada é um retângulo 3D sem sombra, coclass é um retângulo sombreado 3D.

III. Uma vez que essas classes geralmente implementam várias interfaces. É muito comum ver no código AO, para acessar um método declarado na interface D, que está implementado na classe C, você deve obter uma instância da classe A primeiro, depois lançá-la em uma interface B usando "as". Como a classe C implementa a interface B e a interface D, agora você converte tudo o que tem em mãos de B para D.

Agora você pode mergulhar! A única pista que temos é que parece que todos os conjuntos de dados são acessados ​​por meio do padrão de projeto Abstract Factory. Como gostaríamos de abrir um GDB baseado em arquivo, encontro FileGDBWorkspaceFactory em DataSourcesGDBObjectModel.pdf

Ele tem um retângulo 3d sombreado, então podemos inicializar uma instância de FileGDBWorkspaceFactory diretamente ou criar tal coisa por meio de refletor. Ele tem uma interface de entrada: IWorkspaceFactory e essa interface é descrita em GeoDatabaseObjectModel.pdf. Veja a imagem anterior, ela tem uma função chamada "OpenFromFile ()", que é o método que esperamos. Este método retorna uma interface IWorkspace, veja o diagrama abaixo:

Observe que ele implementa IFeatureWorkspace, uma vez que estamos procurando meios de acessar as informações da classe de recursos, isso parece interessante. OK, ele tem dois métodos: OpenFeatureClass e OpenFeatureDataset, o primeiro é para acessar uma classe de recursos se o nome do alias da classe de recurso for conhecido antecipadamente, o último, por outro lado, é para fazer o loop de classes de recurso dentro de uma classe de recurso conjunto de dados se os nomes das classes de recursos são desconhecidos, mas o nome do conjunto de dados da classe de recursos é fornecido.

Ao examinar a descrição de FeatureDataset, a interface IFeatureClassContainer define a maneira de acessar IFeatureClass por meio do índice, que são exatamente as funções que esperamos percorrer todas as classes de recursos dentro de um arquivo GDB. Abaixo está o código para demonstrar esse processo. Esta é uma cópia direta do meu projeto que requer o desenvolvimento de um SOE.

Bem, espero que este exemplo seja simples o suficiente para lhe dar uma ideia de como usar o OMD. Para ser honesto, não tenho certeza se fiz um bom trabalho aqui. Então, se eu não fiz, por favor me avise. :)

Lição 6: ArcGIS Server Object Extension (SOE) e Ferramenta de Geoprocessamento ##

Não tenho Chacne para atualizar esta série por um tempo. Copiei / colei aqui algumas notas que fiz para o nosso projeto. Pela minha experiência pessoal, essas duas abordagens de desenvolvimento do lado do servidor são úteis, embora SOE pareça ser mais popular e capaz, a ferramenta de geoprocessamento oferece uma possibilidade para desenvolvedores que migram do Arcpy. Além disso, a ferramenta de geoprocessamento tem um fluxo de trabalho natural já construído para lidar com tarefas de geoprocessamento que podem levar muito tempo para serem concluídas. Se você perguntar minha opinião, devo dizer "Luke, use a força!".

### Extensão de objeto de servidor (SOE) ###

####Introdução Desenvolvendo Extensões de Objeto de Servidor (SOE) é a forma padrão que a ESRI oferece para personalizar o comportamento do servidor ArcGIS. Claro, SOE também é um COM.

A melhor referência para este recurso, bem, se você tiver o SDK instalado, está no arquivo de ajuda:

ArcObjects SDK for ArcGIS 10.4 - & gt ArcObjects Ajuda para desenvolvedores .NET - & gt Desenvolvendo com ArcGIS - & gt Estendendo ArcGIS for Server - & gt Desenvolvendo extensões de objeto de servidor

O memorando aqui NÃO irá guiá-lo para desenvolver um SOE. Em vez disso, rastreamos o procedimento para depurar, construir e implementar o SOE de maneira adequada no desktop e no servidor ArcGIS.

Bem, não fique desapontado se você vier aqui e espera aprender como codificar SOE. Seguindo o documento listado no auxiliar do SDK, você deve conseguir fazer isso. Ou, se você precisar de um atalho com uma amostra completa, experimente este github ESRI.

#### Depuração Sem ArcGIS Server, a depuração SOE deve ser feita no nível de teste de unidade. Se você não quiser separar a lógica SOE do arquivo de código do modelo SOE padrão, tente uma estrutura de simulação, como o moq. No entanto, o desenvolvedor ESRI não tornou suas classes "amigáveis ​​ao mockup", por exemplo, a classe ServerLogger é definida como uma classe lacrada, o que impede que a maioria do framework do mockup herde e substitua por mock.

Se você tem capacidade de depuração no ArcGIS Server, aqui estão algumas dicas:

  1. Certifique-se de abrir o projeto SOE usando uma conta de administrador
  2. Quando você anexa aos processos do ArcGIS Server, certifique-se de selecionar todos os ArcSOC.exe com o tipo de (Gerenciou)

Não consegui depurar o código dentro de Init, Shutdown e Construct. SOE é executado dentro do contêiner ArcSOC. Como essas 3 funções são chamadas durante a construção e o encerramento do SOE, é difícil dizer a qual processo posso anexar.

#### A implantação da implantação SOE segue um procedimento de duas etapas, assumindo que o tipo SOE é MapServer e o serviço é REST.

  1. Se construir o projeto SOE no VS, um arquivo "soe" será criado como um arquivo. No ArcGIS Server Manager, vá para Site - & gt Extensões - & gt Adicionar extensão, carregue este arquivo "soe" e o ArcGIS Server cuidará de tudo para você, como o registro COM.
  2. Prepare os dados do mapa no ArcMap e publique-os como serviços de mapa com a opção de "staging", que significa "Não faça upload, apenas prepare os dados". Isso criará um arquivo sd em "C: Users hellocomrade AppData Local ESRI Desktop10.4 Staging". No ArcGIS Server Manager, Services - & gt Publish Service, alimente o assistente com o arquivo sd e em Capacidades, certifique-se de verificar o SOE que você carregou na etapa 1. Se tudo correr bem, o serviço de mapa será iniciado com o seu SOE.
  3. Vá para "http: // localhost: 6080 / arcgis / rest / services /" e selecione o serviço de mapa definido na etapa 2, role para baixo até o final da página, você verá "Extensões com suporte" aparecendo.

####Introdução Desenvolvendo função de geoprocessamento customizada é um "novo" recurso da ESRI lançado por meio do ArcPy? Na verdade, de volta ao 9.3, esse recurso foi fornecido para ArcObject .Net. No entanto, a documentação estava "escondida" no livro e a ESRI pareceu tímida em apresentar esse recurso ao desenvolvedor AO. Você ainda não consegue encontrar um modelo na integração do Visual Studio para esse recurso por meio do AO .Net SDK. Você terá que resolver tudo do zero

A melhor referência para este recurso, bem, se você tiver o SDK instalado, está no arquivo de ajuda:

ArcObjects SDK for ArcGIS 10.4 - & gt ArcObjects Ajuda para desenvolvedores .NET - & gt Desenvolvendo com ArcGIS - & gt Aprendendo ArcObjects - & gt Estendendo ArcObjects - & gt Ferramentas de função de geoprocessamento personalizadas

Espero que agora você entenda por que disse que ESRI era tímido neste caso. Veja a estrutura em árvore?

O memorando aqui NÃO irá guiá-lo para criar tal ferramenta. Em vez disso, rastreamos o procedimento para construir e implantar adequadamente esta ferramenta no ArcMap e no servidor ArcGIS.

Bem, não fique desapontado se você vier aqui e espera aprender como codificar essa ferramenta. Seguindo o documento listado no auxiliar do SDK, você deve conseguir fazer isso. Ou, se precisar de um atalho com uma amostra completa, que está faltando no documento auxiliar do SDK, você pode tentar este github ESRI.

Uma observação lateral: quando você implementa IGPFunction2, IsLicensed pode simplesmente retornar verdadeiro sem condição se você tiver certeza de que essa ferramenta não será distribuída a terceiros que podem não saber o tipo de licença, especialmente extensões, é necessária. Por quê? se você planeja usar esta ferramenta no Desktop, Engine e Server, você terá que verificar todos eles em um if. mais se. caso contrário, se você esquecer e isLicensed retornar falso, sua ferramenta não funcionará. Por que simplesmente retornar true de isLicensed sem verificar e deixar o software de hospedagem (nossa ferramenta é apenas uma dll) informar ao usuário se a ferramenta pode ser executada lançando uma exceção durante o tempo de execução? :) Mas não é elegante.

#### Registro Dado um código-fonte pronto para compilar como um COM gerenciado no VS 2013, a primeira coisa que eu faria é clicar com o botão direito do mouse no nome do projeto - & gt properties - & gt Build, marque "Register for COM Interop". Isso tornará o tipo dentro do assembly visível para o cliente COM por meio do utilitário: RegAsm.exe. Ao verificar isso, o compilador C # gerará o arquivo tlb e usará o arquivo tlb para concluir o registro. Esta etapa realmente faz NÃO soa mais como necessário para o ArcGIS 10 series. A ESRI decidiu registrar o COM nativo e o COM gerenciado sem usar o registro do sistema por meio de sua própria ferramenta "ESRIRegAsm.exe". Que diabos? Mesmo a ESRI não confia mais no registro do sistema MS, triste.

"Informações adicionais do produto devem ser fornecidas no registro usando um utilitário Esri chamado ESRIRegAsm.exe. ESRIRegAsm.exe substitui o utilitário Microsoft RegAsm.exe padrão."

Se você tiver um projeto de biblioteca de classe ArcGIS criado por meio do modelo ArcGIS, o registro será feito automaticamente como um evento pós-construção. É por isso que o complemento ArcMap pode sempre aparecer automaticamente no ArcMap. No entanto, isso não é verdade para o nosso caso, uma vez que estamos desenvolvendo uma função GP que não é tão bem suportada pelo ESRI em termos de integração VS.

Mas tudo bem. ESRI não significa isso. Basta navegar na pasta da sua dll compilada, clicar com o botão direito sobre ela, no menu de contexto, ver "Registrar"? Isso vai bastar! O mundo é perfeito? Não! Quando essa caixa de diálogo para registro for exibida, você poderá ver o produto como "Desktop" ou "Engine" ou ambos exibidos. Então você terá que escolher um para o registro.

Mas todo o propósito de uma ferramenta GP é que ela possa funcionar como um serviço GP no servidor ArcGIS. Onde está o registro do meu servidor ArcGIS? Acontece que existem dois ESRIRegAsm.exe! Um para a linha de 32 bits da ESRI, o outro é para a linha de servidores de 64 bits.

32 bits: C: Arquivos de programas (x86) Arquivos comuns ArcGIS bin

64 bits: C: Arquivos de programas Arquivos comuns ArcGIS bin

Se você deseja registrar sua ferramenta para o servidor, use o segundo binário na linha de comando. (Certifique-se de abrir o cmd usando privilégios de administrador a linha de comando coz não pedirá a confirmação da permissão do administrador como outros softwares podem fazer, então você receberá um erro "Não é possível gravar no disco"). Isso é o que eu fiz:

"C: Arquivos de programas Arquivos comuns ArcGIS bin esriregasm.exe" c: temp GPNetTrace.dll

Ignorei intencionalmente a opção / p: de modo que a caixa de diálogo pop-up me pedirá para escolher o produto no qual gostaria de me registrar. Uma coisa que você pode querer saber é: assim que o registro for feito e o produto estiver ativado, digamos ArcGIS Server, esta dll no local registrado, para nosso caso está em C: Temp, será bloqueada pelo processo. Você não poderá atualizá-lo. Então faz NÃO registrar dll em sua pasta bin ou obj para um projeto VS, o vinculador VS não será mais capaz de criar dll para você.

Primeiro, você precisa adicionar esta ferramenta ao ArcMap como uma caixa de ferramentas. Na janela do catálogo. Criar uma nova caixa de ferramentas em "Minha caixa de ferramentas" e, em seguida, clicar com o botão direito na caixa de ferramentas recém-criada, Add- & gtTool, aparecerá uma lista de todas as caixas de ferramentas registradas, incluindo aquela que acabamos de registrar. Como encontrar nossa ferramenta? Bem, isso depende da própria ferramenta.

A segunda função "GetFunctionNames" é um método definido na interface "IGPFunctionFactory", isso é necessário para que o software ESRI possa extrair o nome da ferramenta a partir da implementação desta interface. O nome que aparecerá na lista da caixa de ferramentas como raiz será "name.Category", que é "NetworkNavigation", e o nome da ferramenta extra será name.DisplayName, que é "Network Trace", internamente, esta ferramenta é rastreada pelo nome .Name, que é "TraceNetwork". Agora, você deve ser capaz de encontrar e adicionar a ferramenta ao ArcMap.

Tudo bem, as preliminares terminaram. Vamos depurar! Como nossa ferramenta foi compilada como uma dll, temos que anexar o depurador a qualquer binário que realmente execute o código em nossa biblioteca. No VS, Debug- & gtAttach to Process. Para fazer isso, certifique-se de abrir o VS usando uma conta de administrador.

Supondo que você consiga obter trabalho de processamento em segundo plano de 64 bits com o seu código, isso significa que você tem

em seu código. Se falhar na execução, o boato é que sua dll não foi registrada corretamente com o ESRIRegAsm.exe de 64 bits. Não consigo fazer esta parte funcionar na minha área de trabalho, mas você pode ter sorte. Nesse caso, você precisará anexar o depurador com o processo denominado "RuntimeLocalSerer.exe". Na verdade, existem dois processos com o mesmo nome. Um é executado para CLR gerenciado, o outro é para COM nativo. Acredito que você deva anexar com um gerenciado (verifique a coluna Tipo na tabela "Processos disponíveis". Dito isso, você pode anexar com ambos pressionando Ctrl no teclado enquanto clica no nome do processo.

Digamos que o processamento em segundo plano de 64 bits não funciona bem com você. Então, você terá que desabilitá-lo no ArcMap. Geoprocessamento - & gt Opções de geoprocessamento - & gt Processamento em segundo plano - & gt Ativar, desmarque a caixa "Ativar" para desativar o processamento em segundo plano. Agora, você pode simplesmente anexar o depurador ao processo ArcMap.


Espaços de trabalho multi-root

Os espaços de trabalho com várias raízes são um recurso avançado do VS Code que permite configurar várias pastas distintas para fazer parte do espaço de trabalho. Em vez de abrir uma pasta como área de trabalho, você abrirá um arquivo JSON & ltname & gt.code-workspace que lista as pastas da área de trabalho. Por exemplo:

Um espaço de trabalho multi-root aberto no VS Code

Observação: A diferença visual entre ter uma pasta aberta e abrir um arquivo .code do espaço de trabalho pode ser sutil. Para lhe dar uma dica de que um arquivo .code-workspace foi aberto, algumas áreas da interface do usuário (por exemplo, a raiz do Explorador de Arquivos) mostram um extra (Área de trabalho) sufixo ao lado do nome.

Espaços de trabalho multi-root sem título

É fácil adicionar ou remover pastas em sua área de trabalho. Você pode começar abrindo uma pasta no VS Code e depois adicionar mais pastas conforme achar necessário. A menos que você já tenha aberto um arquivo de espaço de trabalho .code, na primeira vez que você adicionar uma segunda pasta a um espaço de trabalho, o VS Code criará automaticamente um espaço de trabalho & quotuntitled & quot. Em segundo plano, o VS Code mantém automaticamente um arquivo de espaço de trabalho sem título.code para você, que contém todas as pastas e configurações de espaço de trabalho de sua sessão atual. O espaço de trabalho permanecerá com o & quot sem título & quot até que você decida salvá-lo no disco.

Um espaço de trabalho multi-root sem título aberto no VS Code

Observação: Não há realmente nenhuma diferença entre um espaço de trabalho sem título e um espaço de trabalho salvo, exceto o fato de que um espaço de trabalho sem título é criado automaticamente para sua conveniência e sempre será restaurado até que você o salve. Excluímos automaticamente os espaços de trabalho sem título (após solicitar sua confirmação) quando você fecha uma janela na qual um espaço de trabalho sem título está aberto.


Receiver 4.12 para Windows

Observação: A Citrix recomenda que você baixe a versão mais recente do aplicativo Citrix Workspace. A versão 1904 ou posterior contém correções de segurança críticas. Para obter mais informações, consulte o artigo do Knowledge Center CTX251986

Compatível com
Windows 10, 8.1, 7, 2008R2, Thin PC, bem como Windows Server 2016, 2012 e 2012R2.

Somas de verificação ADB1AFF0625F6EE0C9745F6F8C523398CF3F4732EB3D2CA5966E97AE6D57536F

Correção para habilitar a atualização automática do receptor

Ação necessária para continuar as atualizações automáticas no Receptor.
Um novo certificado de segurança foi lançado recentemente para aprimorar ainda mais a segurança do Citrix Receiver. No entanto, este certificado desativa a funcionalidade de atualização automática do receptor. É importante que vocês baixe e instale a ferramenta de atualização automática do Receiver lançada recentemente para restaurar a funcionalidade de atualização do Receiver.

Reveja a documentação do produto para obter a lista completa de recursos.

Acesso de alto desempenho a aplicativos e desktops virtuais do Windows, acesso de qualquer lugar a partir de seu desktop, menu iniciar, IU do Receiver ou acesso à web com Chrome, Internet Explorer ou Firefox.

O Citrix Receiver pode ser usado em PCs, tablets e thin clients associados ou não ao domínio. Fornece uso de alto desempenho de Skype for Business virtualizado, linha de negócios e aplicativos de engenharia HDX 3D Pro, multimídia, acesso a aplicativo local.

idiomas disponíveis
Inglês, francês, alemão, japonês, coreano, russo, chinês simplificado, espanhol e chinês tradicional.

Scripts para implantação do Citrix Receiver para Windows

Este arquivo ZIP contém scripts de amostra para implantar e configurar o Citrix Receiver. É um download opcional, fornecido no estado em que se encontra pela Citrix para servir de exemplo. Antes de usar, os administradores de TI devem personalizar os scripts para se adequarem ao seu ambiente. Os scripts de desinstalação e instalação podem ser usados ​​conforme observado no guia de atualização do Citrix Receiver para Windows (CTX135933).

Modelos Citrix ADMX / ADML para Editor de Política de Grupo

Este arquivo ZIP contém arquivos ADMX e ADML para implantar e configurar o Citrix Receiver usando o editor de objeto de política de grupo. É um download opcional, para ser usado por administradores de TI, e não para usuários finais. Os modelos administrativos (arquivos ADMX e ADML) podem ser usados ​​conforme observado no guia de atualização do Citrix Receiver para Windows (CTX135933).


8 novas maneiras de capacitar funcionários de primeira linha e transformar a maneira como trabalham com o Microsoft 365

As empresas na vanguarda da transformação digital reconhecem como é fundamental capacitar todos os seus funcionários com a tecnologia e as ferramentas certas. É por isso que, em setores como varejo, hospitalidade e manufatura, há um movimento em andamento para capacitar digitalmente a força de trabalho da Firstline - mais de 2 bilhões de pessoas em todo o mundo que trabalham em funções orientadas a serviços ou tarefas.

Com o Microsoft 365, a nuvem de produtividade mundial, estamos em uma posição única para ajudar empresas de todos os tamanhos e em todos os setores a fornecer a seus funcionários as ferramentas e a experiência de que precisam para fazer seu melhor trabalho, sem sacrificar a segurança de sua organização ou clientes ' dados. Fornecer aos funcionários da Firstline as ferramentas de que precisam exige que as empresas abordem a experiência do usuário, a segurança e a conformidade exclusivas e o gerenciamento de TI.

Microsoft 365 para funcionários de primeira linha

O Microsoft 365 combina os melhores aplicativos de produtividade intuitivos da classe com serviços de nuvem inteligentes para capacitar sua força de trabalho de primeira linha.

É inspirador ver como os líderes do setor, como a IKEA e a Mattress Firm, estão gerando níveis mais altos de envolvimento dos funcionários e aprimorando a experiência do cliente, colocando ferramentas como o Microsoft Teams nas mãos de sua força de trabalho de primeira linha. A IKEA está conectando todos na organização com recursos familiares, como chat e chamadas de vídeo, e digitalizando processos de primeira linha, como gerenciamento de turnos, para economizar tempo e custos.

Este vídeo foi criado pela Microsoft, com o acordo do Grupo Ingka.

A Mattress Firm está capacitando os funcionários da Firstline com acesso em tempo real às informações, recursos e experiência de que precisam para encantar os clientes e fornecer uma experiência de compra melhor.

Antes da feira da National Retail Federation (NRF) da próxima semana, estamos empolgados em apresentar novos recursos para os funcionários da primeira linha que virão para o Microsoft 365. Aqui está uma olhada no que está por vir:

Novas ferramentas que tornam mais fácil para os Trabalhadores de Primeira Linha se comunicarem e gerenciarem tarefas

  1. Walkie Talkie em equipes—Esta nova experiência push-to-talk permite comunicação de voz clara, instantânea e segura na nuvem, transformando smartphones e tablets de funcionários ou da empresa em um walkie-talkie. A funcionalidade, incorporada nativamente ao Teams, reduz o número de dispositivos que os funcionários devem carregar e diminui os custos de TI. Ao contrário dos dispositivos analógicos com redes inseguras, os clientes não precisam mais se preocupar com crosstalk ou espionagem de terceiros. E uma vez que o Walkie Talkie funciona por Wi-Fi ou dados de celular, ele pode ser usado em locais geográficos. O recurso estará disponível no aplicativo móvel Teams e se integrará ao recém-revelado Samsung Galaxy XCover Pro, um dispositivo desenvolvido para trabalhadores na linha de frente de qualquer setor. Walkie Talkie estará disponível em versão privada no Teams no primeiro semestre deste ano.

Experiência intuitiva push-to-talk para conectar membros da equipe em departamentos e locais.

  1. Segmentação, publicação e geração de relatórios de tarefasCom o Tasks in Teams, agora os clientes podem conduzir a execução consistente das operações da loja em escala em todos os locais de uma organização. A liderança corporativa e regional pode enviar listas de tarefas direcionadas aos locais relevantes, como lojas de varejo específicas, e monitorar seu progresso por meio de relatórios automáticos em tempo real. Os gerentes têm ferramentas para direcionar facilmente as atividades em suas lojas, e os funcionários da primeira linha têm uma lista priorizada simples disponível por meio de seu dispositivo pessoal ou fornecido pela empresa, mostrando-lhes exatamente o que fazer a seguir. A segmentação, a publicação e a geração de relatórios de tarefas chegarão às equipes no primeiro semestre deste ano.

A sede corporativa pode direcionar, atribuir e rastrear tarefas em todos os locais. Os funcionários de primeira linha podem visualizar as tarefas atribuídas a eles e na loja.

  1. Integrações de gerenciamento de força de trabalho- Os clientes que usam os principais sistemas de gerenciamento de força de trabalho de terceiros - como Kronos e JDA - para agendamento e horário e presença agora podem começar a se integrar diretamente com Shifts por meio de Shifts Graph APIs e SDK. Os cenários com suporte incluem gerenciamento de turnos, programações, grupos de programação, solicitações de troca, solicitações de folga e solicitações de mudança aberta. O conector JDA para Shifts é de código aberto e está disponível no GitHub. O conector Kronos para Shifts também estará disponível no GitHub no final deste trimestre.

Recursos aprimorados de gerenciamento de identidade e acesso que tornam mais fácil para os profissionais de TI manter a produtividade e a segurança dos Firstline Workers

  1. Login por SMS- Com a entrada de SMS, os Firstline Workers podem entrar em sua conta do Azure Active Directory (Azure AD) usando códigos SMS únicos - reduzindo a necessidade de lembrar nomes de usuário e senhas para todos os seus aplicativos Microsoft 365 e personalizados. Uma vez inscrito, o usuário é solicitado a inserir seu número de telefone, o que gera um texto SMS com uma senha de uso único. O login por SMS é uma experiência de login único (SSO), permitindo que os funcionários da Firstline acessem perfeitamente todos os aplicativos que estão autorizados a usar. Esse novo método de login pode ser habilitado para grupos selecionados e configurado no nível do usuário no portal My Staff - ajudando a reduzir a carga de TI.

Códigos SMS de uso único em dispositivos móveis para agilizar a experiência de login para funcionários de primeira linha.

  1. Desconexão de dispositivo compartilhado—Muitos funcionários de primeira linha usam um único tablet ou dispositivo móvel que é compartilhado entre os turnos. Isso pode representar desafios de segurança exclusivos para a organização quando diferentes funcionários que têm acesso a diferentes tipos de dados usam o mesmo dispositivo ao longo do dia. Com a desconexão do dispositivo compartilhado, os Firstline Workers poderão se desconectar de todos os seus aplicativos Microsoft 365 e personalizados e sessões de navegador com um clique no final do turno - evitando que seus dados, bem como qualquer acesso aos dados do cliente, sejam acessíveis para o próximo usuário desse dispositivo.

Com um clique, os funcionários da Firstline podem sair de um dispositivo Android compartilhado e de todos os aplicativos e sessões do navegador para evitar que dados confidenciais sejam compartilhados com outro usuário do dispositivo.

  1. Controles de acesso fora do turno para o aplicativo Teams—Os administradores de TI agora podem configurar equipes para limitar o acesso dos funcionários ao aplicativo em seus dispositivos pessoais fora do horário de trabalho. Esse recurso ajuda a garantir que os funcionários não trabalhem involuntariamente enquanto não estiverem em turno e ajuda os empregadores a cumprir os regulamentos trabalhistas. Este recurso começará a ser implementado para os clientes neste trimestre.

Exibir uma mensagem e / ou desabilitar o acesso ao aplicativo Teams quando os funcionários da primeira linha estiverem fora do turno.

  1. Gerenciamento de usuário delegado—Os gerentes de primeira linha podem aprovar redefinições de senha e permitir que os funcionários usem seus números de telefone para login por SMS, tudo por meio de um único portal personalizável habilitado por TI para gerentes de primeira linha. O gerenciamento de usuário delegado pode dar aos gerentes de primeira linha acesso ao portal My Staff, para que eles possam desbloquear os problemas da equipe - reduzindo a carga de gerenciamento de identidade em TI e mantendo os funcionários conectados aos aplicativos de que precisam no trabalho.

Por meio do portal My Staff, o gerenciamento de usuário delegado permite que um gerente de primeira linha gerencie as credenciais de sua equipe e ajude com redefinições de senha.

  1. Provisionamento de entrada de SAP SuccessFactors para Azure AD—O serviço de provisionamento de usuários do Azure AD agora se integra ao SAP SuccessFactors, tornando mais fácil do que nunca integrar e gerenciar as identidades dos Trabalhadores de Primeira Linha em escala, em qualquer aplicativo usando o Azure AD. Esse recurso - em visualização pública - se baseia na capacidade de provisionar usuários para o Azure AD do Workday, outro sistema de gerenciamento de capital humano (HCM) popular, já disponível de maneira geral. A integração com esses sistemas de registro ajuda a TI a dimensionar a integração e a produtividade do Firstline Workers & # 8217 desde o primeiro dia.

Com o serviço de provisionamento de usuário do Azure AD agora integrado ao SAP SuccessFactors, bem como ao Workday, é mais fácil do que nunca integrar identidades de usuário do Firstline Workers em escala. Mostrado aqui, você pode iniciar o ciclo de provisionamento e usar a barra de progresso e os registros de provisionamento para rastrear o processo de provisionamento.

Espera-se que todos esses recursos sejam implementados no primeiro semestre deste ano, exceto onde indicado.

Capacitando Trabalhadores de Primeira Linha para obter uma vantagem competitiva

Uma nova pesquisa em parceria com a Harvard Business Review Analytic Services destaca o potencial inexplorado dos trabalhadores de primeira linha no varejo.

Olhando para a frente

Este é apenas o próximo passo em nossa jornada para capacitar cada pessoa e cada organização no planeta para alcançar mais. Nosso objetivo é construir ferramentas e experiências para o ambiente de trabalho moderno e para os trabalhadores em todos os níveis da organização. Continuaremos a desenvolver e trazer para o mercado capacidades e experiências do Firstline Worker desenvolvidas para o propósito em parceria com nossos clientes e líderes do setor. E continuaremos a inovar e construir recursos que simplificam o trabalho, unem as pessoas e ajudam as organizações, grandes e pequenas, a obter mais resultados. Venha nos ver na próxima semana na NRF 2020 no estande # 4501.


ArcObjects .NET - Como fechar / liberar FeatureClass, Workspace, Factory - Sistemas de Informação Geográfica

  • Alemão
  • inglês
  • Espanhol
  • Français
  • Italiano
  • 日本語
  • 한국어
  • Português
  • Русский
  • 简体 中文
  • Tcheco
  • polonês

Inovação e gerenciamento de programa sincronizado e colaborativo para novos programas

Integração de tecnologias de sistemas mecânicos, de software e eletrônicos para sistemas veiculares

Produtos de consumo e varejo

Inovação de produtos por meio do gerenciamento eficaz de formulações integradas, embalagens e processos de fabricação

O desenvolvimento de novos produtos alavanca os dados para melhorar a qualidade e a lucratividade e reduzir o tempo de colocação no mercado e os custos

Colaboração da cadeia de suprimentos em design, construção, manutenção e retirada de ativos de missão crítica

Maquinaria industrial e equipamento pesado

Integração do planejamento do processo de manufatura com design e engenharia para a complexidade da máquina de hoje

Visibilidade, conformidade e responsabilidade para os setores financeiro e de seguros

Inovação na construção naval para reduzir de forma sustentável o custo de desenvolvimento de frotas futuras

A Siemens PLM Software, líder em software de mídia e telecomunicações, oferece soluções digitais para tecnologia de ponta, dando suporte a produtos complexos em um mercado em rápida mudança.

Dispositivos médicos e produtos farmacêuticos

“Inovação de produto personalizado” por meio da digitalização para atender às demandas do mercado e reduzir custos

Tempo de lançamento no mercado mais rápido, menos erros para desenvolvimento de software

Remova barreiras e cresça enquanto mantém seus resultados financeiros. Estamos democratizando os gêmeos digitais mais robustos para suas pequenas e médias empresas.


484 pensamentos sobre & ldquoWorkspace Environment Management (WEM) 2106 & rdquo

Tenho um problema com a limpeza dos perfis wem. Parece que os perfis têm caminhos muito longos e a ferramenta de limpeza falha com & # 8220error ao verificar os perfis! & # 8221. Se eu verificar um único perfil e remover os arquivos com os caminhos mais longos, tudo funcionará bem. Existe uma solução alternativa para isso? Estamos executando 1912 ltsr cu2.

Sakari, eu grito aqui porque eu encontrei muito isso. O Google Chrome é notório por essas árvores de subpasta realmente profundas para seus dados (com longas sequências de caracteres aleatórios para um único nome de pasta). Acredito que a origem do problema seja o mapeamento da unidade e o contexto do aplicativo. Se o perfil do usuário & # 8217s estiver em uma unidade de rede como y :, mapeado para servername something UPM_Profiles quando um aplicativo diferente (como WEM) está tentando acessar essas pastas diretamente pelo caminho UNC, o comprimento é estendido em 40 ou mais personagens. Não tenho certeza de como resolvê-lo, mas achei que seria útil saber como esses caminhos (que são muito longos para existir) foram criados.

Nós atualizamos para o WEM 2012 e a seguinte pasta
& # 8220C: Arquivos de programas (x86) Norskale Norskale Infrastructure Services DBSync & # 8221 não & # 8217não existe mais. Você tem alguma ideia se esse é um comportamento normal?

Estou supondo que eles removeram esta pasta quando removeram a tecnologia de sincronização de cache do agente mais antiga.

Ei, Carl, você viu problemas em que desativa a tela inicial do WEM, mas ela não funciona, ainda exibe a tela inicial no login?


Parâmetros obrigatórios

Instalações

Use este parâmetro para especificar um ou mais locais que servem como instalações. Este serviço identifica a melhor instalação ou instalações para atender os pontos de demanda.

  • url - Especifique uma solicitação de consulta REST para qualquer recurso, mapa ou serviço de geoprocessamento do ArcGIS Server que retorna um conjunto de recursos JSON. Esta propriedade é opcional. No entanto, os recursos ou url devem ser especificados.
  • recursos - especifique uma variedade de recursos. Esta propriedade é opcional. No entanto, os recursos ou a propriedade url devem ser especificados.

    geometry - Especifique a geometria do ponto de entrada contendo as propriedades xey junto com uma propriedade spatialReference. Se a propriedade spatialReference for definida para todo o JSON, não há necessidade de definir essa propriedade para cada geometria. Isso reduz o tamanho do JSON de entrada se a entrada tiver muitos recursos e melhora o desempenho. Esta propriedade não é necessária se as coordenadas estiverem na mesma referência espacial que seu conjunto de dados de rede. Se as coordenadas estiverem em uma referência espacial diferente, você deve especificar o ID conhecido da referência espacial (WKID). Consulte o sistema de coordenadas geográficas e o sistema de coordenadas projetadas para consultar os valores WKID.

Como melhor prática, é recomendado especificar explicitamente o spatialReference e especificá-lo para todo o JSON em vez de cada geometria individual.

Atributos para instalações

Ao definir as instalações, você pode definir propriedades para cada um - como seu nome ou tipo - usando os seguintes atributos:

O nome da instalação. O nome é incluído no nome das linhas de alocação de saída se a instalação fizer parte da solução.

  • 0 (Candidato) —Uma instalação que pode fazer parte da solução.
  • 1 (Obrigatório) - Um recurso que deve fazer parte da solução.
  • 2 (Concorrente) —Uma instalação rival que potencialmente remove a demanda de suas instalações. As instalações do concorrente são específicas para maximizar a participação no mercado e os tipos de problemas de participação no mercado alvo, sendo ignorados em outros tipos de problemas.

A ponderação relativa da instalação, que é usada para avaliar a atratividade, conveniência ou parcialidade de uma instalação em comparação com outra.

Por exemplo, um valor de 2,0 pode capturar a preferência dos clientes que preferem, em uma proporção de 2 para 1, fazer compras em uma instalação em vez de outra. Fatores que potencialmente afetam o peso da instalação incluem metragem quadrada, vizinhança e idade do edifício. Os valores de peso diferentes de um são honrados apenas pelos tipos de problemas de maximização da participação no mercado e de participação no mercado alvo, eles são ignorados em outros tipos de problemas.

O valor de impedância no qual interromper a pesquisa de pontos de demanda de uma determinada instalação. O ponto de demanda não pode ser alocado a uma instalação que está além do valor indicado aqui.

Este atributo permite que você especifique um valor de corte diferente para cada ponto de demanda. Por exemplo, você pode descobrir que as pessoas em áreas rurais estão dispostas a viajar até 16 quilômetros para chegar a uma instalação, enquanto os habitantes da cidade só estão dispostos a viajar até 2 milhas. Você pode modelar esse comportamento definindo o valor de corte para todos os pontos de demanda que estão em áreas rurais como 10 e definindo o valor de corte dos pontos de demanda em áreas urbanas como 2.

O campo Capacidade é específico para o tipo de problema de cobertura máxima capacitada; os outros tipos de problema ignoram esse campo.

Capacidade especifica quanta demanda ponderada a instalação é capaz de atender. O excesso de demanda não será alocado a uma instalação, mesmo se essa demanda estiver dentro do limite de medição padrão da instalação.

Qualquer valor atribuído ao campo Capacity substitui o parâmetro Default Capacity (Default_Capacity em Python) para a instalação fornecida.

Especifique a direção em que um veículo pode chegar e sair da instalação.

Um dos inteiros listados na coluna Valor codificado na tabela a seguir deve ser especificado como um valor desse atributo. Os valores na coluna Configuração são os nomes descritivos para valores de atributo CurbApproach que você pode ter visto ao usar o software de extensão ArcGIS Network Analyst.

O veículo pode se aproximar e sair da instalação em qualquer direção, portanto, uma inversão de marcha é permitida na instalação. Esta configuração pode ser escolhida se for possível e desejável que seu veículo dê meia volta na instalação. Essa decisão pode depender da largura da estrada e da quantidade de tráfego ou se a instalação possui um estacionamento onde os veículos podem entrar e dar meia-volta.

Todas as combinações de chegada e partida são permitidas com a abordagem de ambos os lados do meio-fio do veículo.

Quando o veículo se aproxima e sai da instalação, a instalação deve estar no lado direito do veículo. É proibido fazer meia-volta. Isso é normalmente usado para veículos como ônibus que devem chegar com o ponto de ônibus do lado direito.

A combinação permitida de chegada e partida para o lado direito da abordagem do meio-fio do veículo é mostrada.

Quando o veículo se aproxima e sai da instalação, a instalação deve estar no lado esquerdo do veículo. É proibido fazer meia-volta. Isso normalmente é usado para veículos como ônibus que devem chegar com o ponto de ônibus no lado esquerdo.

A combinação permitida de chegada e partida para o lado esquerdo da abordagem do meio-fio do veículo é mostrada.

Quando o veículo se aproxima da instalação, a instalação pode estar em qualquer um dos lados do veículo, no entanto, quando ele sai, o veículo deve continuar na mesma direção em que chegou. É proibido fazer inversão de marcha.

As combinações permitidas de chegada e partida para a abordagem de meio-fio sem retorno são mostradas.

O atributo CurbApproach foi projetado para funcionar com os dois tipos de padrões de direção nacionais: tráfego à direita (Estados Unidos) e tráfego à esquerda (Reino Unido). Primeiro, considere um incidente no lado esquerdo de um veículo. Está sempre do lado esquerdo, independentemente de o veículo se deslocar na metade esquerda ou direita da estrada. O que pode mudar com os padrões de direção nacionais é a sua decisão de abordar um incidente de uma das duas direções, ou seja, termina no lado direito ou esquerdo do veículo. Por exemplo, se você deseja chegar a um incidente e não ter uma faixa de tráfego entre o veículo e o incidente, escolha 1 (Lado direito do veículo) nos Estados Unidos e 2 (Lado esquerdo do veículo) no Reino Unido.

Com o tráfego pela direita, a abordagem do meio-fio que deixa o veículo mais próximo da instalação é o lado direito do veículo. Com o tráfego pela esquerda, a abordagem do meio-fio que deixa o veículo mais próximo da instalação é o lado esquerdo do veículo.

A direção na qual um ponto está se movendo. As unidades são graus e são medidas no sentido horário a partir do norte verdadeiro. Este campo é usado em conjunto com o campo BearingTol.

Os dados de rumo geralmente são enviados automaticamente de um dispositivo móvel equipado com um receptor GPS. Tente incluir dados de rumo se você estiver carregando um local de entrada que está se movendo, como um pedestre ou um veículo.

A utilização desse campo tende a evitar a adição de localizações às bordas erradas, o que pode ocorrer quando um veículo está próximo a um cruzamento ou viaduto, por exemplo. O rumo também ajuda a ferramenta a determinar de que lado da rua está o ponto.

O valor de tolerância do rolamento cria uma faixa de valores de rolamento aceitáveis ​​ao localizar pontos móveis em uma aresta usando o campo Rolamento. Se o valor do campo Rolamento estiver dentro da faixa de valores aceitáveis ​​que são gerados a partir da tolerância do rolamento em uma aresta, o ponto pode ser adicionado como um local de rede lá, caso contrário, o ponto mais próximo na próxima aresta mais próxima é avaliado.

As unidades estão em graus e o valor padrão é 30. Os valores devem ser maiores que 0 e menores que 180. Um valor 30 significa que quando o Network Analyst tenta adicionar um local de rede em uma borda, uma faixa de valores de rolamento aceitáveis ​​é gerado 15 graus para cada lado da borda (esquerda e direita) e em ambas as direções digitalizadas da borda.

Este campo só é usado no processo de resolução se os campos Bearing e BearingTol também tiverem valores, entretanto, inserir um valor de campo NavLatency é opcional, mesmo quando os valores estão presentes em Bearing e BearingTol. NavLatency indica quanto custo se espera que decorra desde o momento em que as informações de GPS são enviadas de um veículo em movimento para um servidor e o momento em que a rota processada é recebida pelo dispositivo de navegação do veículo.

As unidades de NavLatency são iguais às unidades do atributo de impedância.

Exemplos de sintaxe para instalações

Sintaxe para especificar recursos usando uma estrutura JSON para recursos

Sintaxe para especificar recursos usando um URL que retorna uma resposta JSON

Exemplos de instalações

Exemplo 1: Especificando instalações na mesma referência espacial que seu conjunto de dados de rede usando uma estrutura JSON. O exemplo também mostra como especificar alguns atributos para os incidentes.

Exemplo 2: Especificando recursos na referência espacial Web Mercator usando uma estrutura JSON

Exemplo 3: Especificando instalações usando um URL

O URL faz uma consulta para alguns recursos de um serviço de mapa. Um URL que consulta recursos de um serviço de recurso também pode ser especificado.

Demand_points

Use este parâmetro para especificar um ou mais pontos de demanda. O serviço identifica as melhores instalações com base em grande parte em como as instalações atendem aos pontos de demanda especificados.

  • url - Especifique uma solicitação de consulta REST para qualquer recurso, mapa ou serviço de geoprocessamento do ArcGIS Server que retorna um conjunto de recursos JSON. Esta propriedade é opcional. No entanto, recursos ou url devem ser especificados.
  • recursos - especifique uma variedade de recursos. Esta propriedade é opcional. No entanto, os recursos ou a propriedade url devem ser especificados.

    geometry - Especifique a geometria do ponto de entrada contendo as propriedades xey junto com uma propriedade spatialReference. Se a propriedade spatialReference for definida para todo o JSON, não há necessidade de definir essa propriedade para cada geometria. Isso reduz o tamanho do JSON de entrada se a entrada tiver muitos recursos e melhora o desempenho. Esta propriedade não é necessária se as coordenadas estiverem na mesma referência espacial que seu conjunto de dados de rede. Se as coordenadas estiverem em uma referência espacial diferente, você deve especificar o ID conhecido da referência espacial (WKID). Consulte o sistema de coordenadas geográficas e o sistema de coordenadas projetadas para consultar os valores WKID.

Como melhor prática, é recomendado especificar explicitamente o spatialReference e especificá-lo para todo o JSON em vez de cada geometria individual.

Atributos para demand_points

Ao especificar os pontos de demanda, você pode definir propriedades para cada um - como seu nome ou peso - usando os seguintes atributos:

O nome do ponto de demanda. O nome é incluído no nome da linha ou linhas de alocação de saída se o ponto de demanda fizer parte da solução.

O nome do grupo ao qual o ponto de demanda pertence. Este campo é ignorado para os tipos de problema Maximize Capacited Coverage, Target Market Share e Maximize Market Share.

Se os pontos de demanda compartilham um nome de grupo, o solucionador aloca todos os membros do grupo na mesma instalação. (Se as restrições, como uma distância de corte, impedirem que qualquer um dos pontos de demanda no grupo alcance a mesma instalação, nenhum dos pontos de demanda será alocado.)

A ponderação relativa do ponto de demanda. Um valor de 2,0 significa que o ponto de demanda é duas vezes mais importante do que um com peso de 1,0. Se os pontos de demanda representam famílias, por exemplo, o peso pode indicar o número de pessoas em cada família.

O valor de impedância no qual interromper a pesquisa de pontos de demanda de uma determinada instalação. O ponto de demanda não pode ser alocado a uma instalação que está além do valor indicado aqui.

Este atributo permite que você especifique um valor de corte para cada ponto de demanda. Por exemplo, você pode descobrir que as pessoas em áreas rurais desejam viajar até 10 milhas para chegar a uma instalação, enquanto aquelas em áreas urbanas desejam viajar até 2 milhas. Você pode modelar esse comportamento definindo o valor de corte para todos os pontos de demanda que estão em áreas rurais como 10 e definindo o valor de corte dos pontos de demanda em áreas urbanas como 2.

As unidades para este valor de atributo são especificadas pelo parâmetro measure_units.

Um valor para este atributo substitui o conjunto padrão para a análise usando o parâmetro default_measurement_cutoff.O valor padrão é Nulo, o que resulta no valor padrão definido pelo parâmetro default_measurement_cutoff sendo usado para todos os pontos de demanda.

Substitua o valor padrão definido para a análise pelo parâmetro measure_transformation_model.

Substitua o valor padrão definido para a análise pelo parâmetro measure_transformation_model.

Especifique a direção em que um veículo pode chegar ou partir do ponto de demanda. Um dos inteiros listados na coluna Valor codificado na tabela a seguir deve ser especificado como um valor desse atributo. Os valores na coluna Configuração são os nomes descritivos para os valores de atributo CurbApproach que você pode ter visto ao usar o software de extensão ArcGIS Network Analyst.

O veículo pode se aproximar e sair do ponto de demanda em qualquer direção.

Todas as combinações de chegada e partida são permitidas com a abordagem de ambos os lados do meio-fio do veículo.

Quando o veículo se aproxima ou sai do ponto de demanda, o ponto de demanda deve estar no lado direito do veículo. Isso normalmente é usado para veículos como ônibus que devem chegar com o ponto de ônibus no lado direito.

A combinação permitida de chegada e partida para o lado direito da abordagem do meio-fio do veículo é mostrada.

Quando o veículo se aproxima ou sai do ponto de demanda, o ponto de demanda deve estar no lado esquerdo do veículo. Isso normalmente é usado para veículos como ônibus que devem chegar com o ponto de ônibus no lado esquerdo.

A combinação permitida de chegada e partida para o lado esquerdo da abordagem do meio-fio do veículo é mostrada.

Quando o veículo se aproxima do ponto de demanda, o ponto de demanda pode estar em qualquer um dos lados do veículo, entretanto, quando ele sai, o veículo deve continuar na mesma direção em que chegou. É proibido fazer inversão de marcha.

As combinações permitidas de chegada e partida para a abordagem de meio-fio sem retorno são mostradas.

O atributo CurbApproach foi projetado para funcionar com os dois tipos de padrões de direção nacionais: tráfego à direita (Estados Unidos) e tráfego à esquerda (Reino Unido). Primeiro, considere um ponto de demanda no lado esquerdo de um veículo. Está sempre do lado esquerdo, independentemente de o veículo se deslocar na metade esquerda ou direita da estrada. O que pode mudar com os padrões de direção nacionais é a sua decisão de se aproximar de um ponto de demanda de uma das duas direções, ou seja, termina no lado direito ou esquerdo do veículo. Por exemplo, se você deseja chegar a um ponto de demanda e não tem uma faixa de tráfego entre o veículo e o ponto de demanda, escolha 1 (lado direito do veículo) nos Estados Unidos e 2 (lado esquerdo do veículo) nos Estados Unidos Reino.

Com o tráfego pela direita, a abordagem do meio-fio que deixa o veículo mais próximo do ponto de demanda é o lado direito do veículo. Com o tráfego pela esquerda, a abordagem do meio-fio que deixa o veículo mais próximo do ponto de demanda é o lado esquerdo do veículo.

A direção na qual um ponto está se movendo. As unidades são graus e são medidas no sentido horário a partir do norte verdadeiro. Este campo é usado em conjunto com o campo BearingTol.

Os dados de rumo geralmente são enviados automaticamente de um dispositivo móvel equipado com um receptor GPS. Tente incluir dados de rumo se você estiver carregando um local de entrada que está se movendo, como um pedestre ou um veículo.

A utilização desse campo tende a evitar a adição de localizações em bordas erradas, o que pode ocorrer quando um veículo está próximo a um cruzamento ou viaduto, por exemplo. O rumo também ajuda a ferramenta a determinar de que lado da rua está o ponto.

O valor de tolerância do rolamento cria uma faixa de valores de rolamento aceitáveis ​​ao localizar pontos móveis em uma aresta usando o campo Rolamento. Se o valor do campo Rolamento estiver dentro da faixa de valores aceitáveis ​​que são gerados a partir da tolerância do rolamento em uma aresta, o ponto pode ser adicionado como um local de rede lá, caso contrário, o ponto mais próximo na próxima aresta mais próxima é avaliado.

As unidades estão em graus e o valor padrão é 30. Os valores devem ser maiores que 0 e menores que 180. Um valor 30 significa que quando o Network Analyst tenta adicionar um local de rede em uma borda, uma faixa de valores de rolamento aceitáveis ​​é gerado 15 graus para cada lado da borda (esquerda e direita) e em ambas as direções digitalizadas da borda.

Este campo só é usado no processo de resolução se os campos Bearing e BearingTol também tiverem valores, entretanto, inserir um valor de campo NavLatency é opcional, mesmo quando os valores estão presentes em Bearing e BearingTol. NavLatency indica quanto custo se espera que decorra desde o momento em que as informações de GPS são enviadas de um veículo em movimento para um servidor e o momento em que a rota processada é recebida pelo dispositivo de navegação do veículo.

As unidades de NavLatency são iguais às unidades do atributo de impedância.

Exemplos de sintaxe para demand_points

Sintaxe para especificar pontos de demanda usando uma estrutura JSON para recursos

Sintaxe para especificar pontos de demanda usando um URL que retorna uma resposta JSON

Exemplos para demand_points

Exemplo 1: Especificando pontos de demanda na referência espacial do conjunto de dados da rede usando uma estrutura JSON. O exemplo também mostra como especificar alguns atributos para os pontos de demanda.

Exemplo 2: Especificando pontos de demanda na referência espacial Web Mercator usando uma estrutura JSON

Exemplo 3: Especificando pontos de demanda usando um URL

O URL faz uma consulta para alguns recursos de um serviço de mapa. Um URL que consulta recursos de um serviço de recurso também pode ser especificado.

Símbolo

Use este parâmetro para especificar um token que fornece a identidade de um usuário que possui as permissões para acessar o serviço. A página de serviços de acesso fornece mais informações sobre como esse token de acesso pode ser obtido.

Exemplo (substitua & ltyourToken & gt por um token válido):

Use este parâmetro para especificar o formato da resposta. O parâmetro pode ter html, json ou pjson como argumentos, por exemplo, f = json. O valor pjson é usado para imprimir a resposta JSON em um formato bonito.


Resolver problemas de instalações e desinstalações bloqueadas do .NET Framework

Ao executar o instalador da Web ou offline para o .NET Framework 4.5 ou versões posteriores, você pode encontrar um problema que impede ou bloqueia a instalação do .NET Framework. A tabela a seguir lista os possíveis problemas de bloqueio e fornece links para informações sobre solução de problemas.

No Windows 8 e superior, o .NET Framework é um componente do sistema operacional e não pode ser desinstalado independentemente. As atualizações do .NET Framework aparecem no Atualizações instaladas guia do Painel de Controle Programas e características aplicativo. Para sistemas operacionais nos quais o .NET Framework não está pré-instalado, o .NET Framework aparece no Desinstalar ou alterar um programa guia (ou o Adicionar programas de remoção guia) do Programa e recursos aplicativo no painel de controle. Para obter informações sobre as versões do Windows nas quais o .NET Framework está pré-instalado, consulte Requisitos do sistema.

Como as versões 4.x do .NET Framework são atualizações in-loco, você não pode instalar uma versão anterior do .NET Framework 4.x em um sistema que já possui uma versão posterior instalada. Por exemplo, em um sistema com o Windows 10 Fall Creators Update, você não pode instalar o .NET Framework 4.6.2, pois o .NET Framework 4.7.1 vem pré-instalado com o sistema operacional.

Você pode determinar quais versões do .NET Framework estão instaladas em um sistema. Consulte Como: determinar quais versões do .NET Framework estão instaladas para obter mais informações.

Nesta tabela, 4.5.x se refere ao .NET Framework 4.5 e suas versões pontuais, 4.5.1 e 4.5.2, 4.6.x se refere ao .NET Framework 4.6 e suas versões pontuais, 4.6.1 e 4.6.2 , 4.7.x refere-se ao .NET Framework 4.7 e suas versões pontuais, 4.7.1 e 4.7.2, e 4.8 refere-se ao .NET Framework 4.8.

Problemas de compatibilidade do programa

A instalação do .NET Framework 4.5 ou de suas versões pontuais falha com um código de erro 1603 ou bloqueia quando é executado no modo de compatibilidade de programas do Windows. O Assistente de compatibilidade de programa indica que o .NET Framework pode não ter sido instalado corretamente e solicita que você o reinstale usando a configuração recomendada (modo de compatibilidade de programa). O modo de compatibilidade de programa também pode ter sido definido pelo Assistente de compatibilidade de programa em tentativas anteriores com falha ou canceladas de executar a instalação do .NET Framework.

O instalador do .NET Framework não pode ser executado no modo de compatibilidade de programa. Para resolver esse problema de bloqueio, você deve usar o Editor do Registro para garantir que a configuração do modo de compatibilidade não seja habilitada em todo o sistema:

Escolha o Começar botão e, em seguida, escolha Corre.

No Corre caixa de diálogo, digite & quotregedit & quot e escolha OK.

No Editor do Registro, navegue até as seguintes subchaves:

HKEY_CURRENT_USER SOFTWARE Microsoft Windows NT CurrentVersion AppCompatFlags Compatibility Assistant Persisted

Na coluna Nome, procure os nomes de download do .NET Framework 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 ou 4.7.2, dependendo de qual versão você está instalar e excluir essas entradas. Para nomes de download, consulte o artigo Instalar o .NET Framework para desenvolvedores.

Execute novamente o instalador do .NET Framework para a versão 4.5, 4.5.1, 4.5.2 ou 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1 ou 4.7.2.


Assista o vídeo: 3 4 ArcObjects VentanaDockable (Outubro 2021).