Mais

Criando rede para pgRouting a partir de um conjunto de strings multilinhas?

Criando rede para pgRouting a partir de um conjunto de strings multilinhas?


Eu tenho uma tabela que é um conjunto de strings de várias linhas.

Desejo criar uma topologia de pgrouting a partir dessa tabela para que eu possa resolver os problemas do caminho mais curto.

Tentei pgr_createTopology, mas falhou.

Existe um bom tutorial sobre isso?


Dê uma olhada na resposta a esta pergunta. Não é um tutorial, mas pode ser suficiente no seu caso: / a / 116444/800


Criando rede para pgRouting a partir de um conjunto de strings multilinhas? - Sistemas de Informação Geográfica

Um gerenciador do sistema de referência de coordenadas pythônico.

A funcionalidade é baseada em outros projetos fantásticos:

A forma de string da entrada do usuário usada para criar o CRS.

Dicionário de parâmetros PROJ

Argumentos de palavra-chave PROJ para parâmetros

String JSON com parâmetros PROJ

Uma string de autoridade [ou seja, ‘Epsg: 4326’]

Um código inteiro EPSG [ou seja, 4326]

Uma tupla de (“auth_name”: “auth_code”) [ou seja (‘epsg’, ‘4326’)]

Um objeto com um método to_wkt.

retorna: A área de uso do objeto com atributos associados. : rtype: AreaOfUse

Recupera todas as informações de eixo relevantes no CRS. Se for um Bound CRS, obtém a lista de eixos do Source CRS. Se for um CRS composto, ele obtém a lista de eixos da lista Sub CRS.

A lista de informações do eixo.

Isso converte todos os sistemas de coordenadas (cs) no CRS em uma lista de ditos de Clima e Previsão (CF) Versão 1.8.

Versão CF-1.8 dos sistemas de coordenadas.

O objeto elipsóide com atributos associados.

é igual a ( outro: qualquer , ignore_axis_order: bool = False ) & # x2192 bool [fonte] ¶

Verifique se os objetos CRS são equivalentes.

outro (Algum) - Verifique se o outro objeto é equivalente a este objeto. Se o outro objeto não for um CRS, ele tentará criar um. Em caso de falha, ele retornará False.

ignore_axis_order (bool, opcional) - Se True, irá comparar a classe CRS e ignorar a ordem dos eixos. O padrão é False.

estático from_authority ( auth_name: str , código: Union [str, int] ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Faça um CRS a partir de um nome de autoridade e código de autoridade

auth_name (str) - O nome da autoridade.

código (int ou str) - O código usado pela autoridade.

estático from_cf ( in_cf: dict , elipsoidal_cs: Opcional [Qualquer] = Nenhum , cartesian_cs: Opcional [Qualquer] = Nenhum , vertical_cs: Opcional [Qualquer] = Nenhum , errcheck = False ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Novo na versão 3.0.0: elipsoidal_cs, cartesian_cs, vertical_cs

Isso converte um mapa de grade da versão 1.8 do Climate and Forecast (CF) em um objeto pyproj.crs.CRS.

in_cf (dict) - Versão CF da projeção.

elipsoidal_cs (Algum, opcional) - Entrada para criar um sistema de coordenadas elipsoidal. Qualquer coisa aceita por pyproj.crs.CoordinateSystem.from_user_input () ou um Sistema de Coordenadas Elipsoidal criado a partir de Sistemas de Coordenadas.

errcheck (bool, opcional) - Este parâmetro é para compatibilidade com a versão anterior. Atualmente, ele não faz nada quando True ou False.

estático from_dict ( proj_dict: dict ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Faça um CRS a partir de um dicionário de parâmetros PROJ.

proj_dict (str) - Parâmetros PROJ em formato dict.

estático from_epsg ( código: Union [str, int] ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Faça um CRS a partir de um código EPSG

código (int ou str) - Um código EPSG.

estático from_json ( crs_json: str ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Crie CRS a partir de uma string JSON CRS.

crs_json (str) - string JSON CRS.

estático from_json_dict ( crs_dict: dict ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Crie CRS a partir de um dicionário JSON.

crs_dict (dict) - dicionário CRS.

estático from_proj4 ( in_proj_string: str ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Faça um CRS a partir de uma string PROJ

in_proj_string (str) - Uma string PROJ.

estático from_string ( in_crs_string: str ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

String JSON com parâmetros PROJ

Uma string de autoridade [ou seja, ‘Epsg: 4326’]

in_crs_string (str) - Uma string EPSG, PROJ ou WKT.

Dicionário de parâmetros PROJ

Argumentos de palavra-chave PROJ para parâmetros

String JSON com parâmetros PROJ

Uma string de autoridade [ou seja, ‘Epsg: 4326’]

Um código inteiro EPSG [ou seja, 4326]

Uma tupla de (“auth_name”: “auth_code”) [ou seja (‘epsg’, ‘4326’)]

Um objeto com um método to_wkt.

valor (obj) - Um int, dict ou str em Python.

estático from_wkt ( in_wkt_string: str ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Faça um CRS a partir de uma corda WKT

in_wkt_string (str) - Uma string WKT.

O geodeticCRS / geográfico do CRS.

get_geod () & # x2192 Opcional [pyproj.geod.Geod] [fonte] ¶ Retorna

Objeto Geod baseado no elipsóide.

retorna: verdadeiro se o CRS estiver vinculado. : rtype: bool

Verdadeiro se CRS for local / engenharia.

is_exact_same ( outro: qualquer , ignore_axis_order: bool = False ) & # x2192 bool [fonte] ¶

Verifique se os objetos CRS são exatamente os mesmos.

outro (Algum) - Verifique se o outro CRS é exatamente o mesmo para este objeto. Se o outro objeto não for um CRS, ele tentará criar um. Em caso de falha, ele retornará False.

Isso verifica se o CRS é geocêntrico e leva em consideração se o CRS está ligado.

Verdadeiro se CRS estiver em coordenadas geocêntricas (x / y).

Isso verifica se o CRS é geográfico. Irá verificar se tem um CRS geográfico no sub CRS se for um CRS composto e verificará se o CRS de origem é geográfico se for um CRS ligado.

Verdadeiro se o CRS estiver em coordenadas geográficas (lon / lat).

Isso verifica se o CRS está projetado. Irá verificar se tem um CRS projetado no sub CRS se for um CRS composto e verificará se o CRS de origem está projetado se for um CRS ligado.

Isso verifica se o CRS é vertical. Irá verificar se tem um CRS vertical no sub CRS se for um CRS composto e verificará se o CRS de origem é vertical se for um CRS ligado.

propriedade nome ¶ retorna: O nome do CRS (de `proj_get_name & lthttps: //proj.org/

O objeto meridiano principal com atributos associados.

O CRS de base de um BoundCRS ou DerivedCRS / ProjectedCRS, ou o CRS de origem de um CoordinateOperation.

Se o CRS for um CRS composto, ele retornará uma lista de objetos sub CRS.

O hub CRS de um BoundCRS ou o CRS de destino de uma CoordinateOperation.

to_3d ( nome: Opcional [str] = Nenhum ) & # x2192 pyproj.crs.crs.CRS [fonte] ¶

Converta o CRS atual para a versão 3D se fizer sentido.

nome (str, opcional) - nome CRS. O padrão é usar o nome do CRS original.

to_authority ( auth_name: Opcional [str] = Nenhum , min_confidence: int = 70 ) [fonte] ¶

Retorne o nome da autoridade e o código que melhor corresponde ao CRS ou Nenhum se uma correspondência não for encontrada.

Se o CRS estiver vinculado, você pode obter uma autoridade do CRS de origem:

auth_name (str, opcional) - O nome da autoridade pela qual filtrar.

min_confidence (int, opcional) - Um valor entre 0-100, em que 100 é o mais confiável. O padrão é 70. Por que o código EPSG retorna ao usar EPSG: xxxx e não com + init = EPSG: xxxx?

A melhor correspondência (& ltauth_name & gt, & ltcode & gt) para o nível de confiança.

to_cf ( wkt_version: Union [pyproj.enums.WktVersion, str] = & ltWktVersion.WKT2_2019: 'WKT2_2019' & gt, errcheck: bool = False ) & # x2192 dict [fonte] ¶

Isso converte um objeto pyproj.crs.CRS em um mapa de grade do Climate and Forecast (CF) versão 1.8 dict.

errcheck (bool, opcional) - Se for verdadeiro, avisará quando os parâmetros forem ignorados. O padrão é False.

Versão CF-1.8 da projeção.

Converte o CRS em dicionário de parâmetros PROJ.

Você provavelmente perderá informações de projeção importantes ao converter para uma string PROJ de outro formato. Consulte: https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems # noqa: E501

Parâmetros PROJ em formato dict.

to_epsg ( min_confidence: int = 70 ) & # x2192 Opcional [int] [fonte] ¶

Retorne o código EPSG que melhor corresponda ao CRS ou Nenhum se não for encontrado.

Se o CRS estiver vinculado, você pode tentar obter um código epsg do CRS de origem:

min_confidence (int, opcional) - Um valor entre 0-100, em que 100 é o mais confiável. O padrão é 70. Por que o código EPSG retorna ao usar EPSG: xxxx e não com + init = EPSG: xxxx?

O melhor código EPSG correspondente ao nível de confiança.

to_json ( bonita: bool = False , recuo: int = 2 ) & # x2192 str [fonte] ¶

Converta o objeto em uma string JSON.

bonito (bool) - Se for True, definirá a saída como uma string de várias linhas. O padrão é False.

recuo (int) - Se bonito for True, ele definirá a largura do recuo. O padrão é 2.

Converta o objeto em um dicionário JSON.

to_proj4 ( versão: Union [pyproj.enums.ProjVersion, int] = & ltProjVersion.PROJ_5: 5 & gt ) & # x2192 str [fonte] ¶

Converta a projeção em uma string PROJ.

Você provavelmente perderá informações de projeção importantes ao converter para uma string PROJ de outro formato. Consulte: https://proj.org/faq.html#what-is-the-best-format-for-describing-coordinate-reference-systems # noqa: E501

versão (pyproj.enums.ProjVersion) - A versão da saída da string PROJ. O padrão é pyproj.enums.ProjVersion.PROJ_4.

Converta o CRS em uma string.

Ele tenta convertê-lo na string de autoridade. Caso contrário, ele usa o formato de string da entrada do usuário para criar o CRS.


Em primeiro lugar, você deve saber que a permissão padrão dos diretórios no Ubuntu é 644, o que significa que você não pode criar um arquivo em um diretório do qual não seja o proprietário.

você está tentando, como usuário: francisco-vergara, criar um arquivo em um diretório / home / sixven / camp_sms / inputs que pertence ao usuário: sixven.

Então, como resolver isso:

Você pode alterar a permissão do diretório e permitir que outras pessoas criem arquivos dentro dele.

Este comando mudará a permissão do diretório recursivamente e permitirá que todos os outros usuários criem / modifiquem e apaguem arquivos e diretórios dentro dele.

Você pode alterar o proprietário deste diretório e tornar o usuário: francisco-vergara o proprietário

Mas assim o usuário: sixven não pode escrever nesta pasta novamente e, portanto, você pode se mover em um loop infinito circular.

Portanto, aconselho você a usar a Opção 1.

Ou, se este diretório for acessado por ambos os usuários, você pode fazer o seguinte:

mude a propriedade do diretório para o usuário: francisco-vergara e mantenha o grupo do proprietário do grupo: sixven.

Assim, ambos os usuários ainda podem usar o diretório.

Mas, como eu disse antes, é mais fácil e mais eficiente use a opção 1.


3 respostas 3

Você deve conseguir fazer isso com a opção ifconfig-pool-persist config. Você pode pré-configurar o arquivo e definir segundos = 0 para dizer ao OpenVPN para ler apenas o arquivo.

Nós o usamos para garantir que o mesmo usuário seja atribuído ao mesmo IP quando conectado via VPN para fins de auditoria.

--ifconfig-pool-persist file [segundos] Persiste / não persiste os dados do ifconfig-pool no arquivo, em intervalos de segundos (padrão = 600), bem como na inicialização e desligamento do programa. O objetivo desta opção é fornecer uma associação de longo prazo entre os clientes (denotados por seus nomes comuns) e o endereço IP virtual atribuído a eles a partir do ifconfig-pool. Manter uma associação de longo prazo é bom para os clientes porque permite que eles usem efetivamente a opção --persist-tun.

arquivo é um arquivo ASCII delimitado por vírgulas, formatado como,.

Se segundos = 0, o arquivo será tratado como somente leitura. Isso é útil se você deseja tratar o arquivo como um arquivo de configuração.

Observe que as entradas neste arquivo são tratadas pelo OpenVPN apenas como sugestões, com base em associações anteriores entre um nome comum e um endereço IP. Eles não garantem que o nome comum fornecido sempre receberá o endereço IP fornecido. Se você quiser atribuição garantida, use --ifconfig-push

Suponha que estejamos configurando uma VPN corporativa e gostaríamos de estabelecer políticas de acesso separadas para 3 classes diferentes de usuários:

A abordagem básica que adotaremos é (a) separar cada classe de usuário em seu próprio intervalo de endereço IP virtual e (b) controlar o acesso às máquinas configurando regras de firewall que codificam o endereço IP virtual do cliente.

Em nosso exemplo, suponha que temos um número variável de funcionários, mas apenas um administrador de sistema e dois contratados. Nossa abordagem de alocação de IP será colocar todos os funcionários em um pool de endereços IP e, em seguida, alocar endereços IP fixos para o administrador do sistema e contratados.

Observe que um dos pré-requisitos deste exemplo é que você tenha um firewall de software em execução na máquina do servidor OpenVPN, o que lhe dá a capacidade de definir regras de firewall específicas. Para nosso exemplo, assumiremos que o firewall é Linux iptables.

Primeiro, vamos criar um mapa de endereço IP virtual de acordo com a classe do usuário:

A seguir, vamos traduzir este mapa em uma configuração de servidor OpenVPN. Em primeiro lugar, certifique-se de ter seguido as etapas acima para disponibilizar a sub-rede 10.66.4.0/24 para todos os clientes (embora configuraremos o roteamento para permitir o acesso do cliente a toda a sub-rede 10.66.4.0/24, imporemos restrições de acesso usando regras de firewall para implementar a tabela de política acima).

Primeiro, defina um número de unidade estática para nossa interface tun, para que possamos nos referir a ele mais tarde em nossas regras de firewall:

No arquivo de configuração do servidor, defina o pool de endereços IP do funcionário:

Adicione rotas para os intervalos de IP do administrador do sistema e do contratante:

Como atribuiremos endereços IP fixos para Administradores de sistema e contratados específicos, usaremos um diretório de configuração do cliente, ccd:

Agora coloque arquivos de configuração especiais no subdiretório ccd para definir o endereço IP fixo para cada cliente VPN não funcionário, como segue.

Cada par de endereços ifconfig-push representa o cliente virtual e os endpoints IP do servidor. Devem ser retirados de sub-redes sucessivas / 30 para serem compatíveis com clientes Windows e o driver TAP-Windows. Especificamente, o último octeto no endereço IP de cada par de endpoint deve ser obtido deste conjunto:

Isso completa a configuração do OpenVPN. A etapa final é adicionar regras de firewall para finalizar a política de acesso.


O problema é que a restauração traz de volta os usuários do banco de dados da instância do servidor original, mas a nova instância normalmente não sabe nada sobre esses logins de usuário. Você os verá em Segurança no nível de banco de dados, mas eles não têm logins de nível de servidor correspondentes.

Você precisa reconectar os usuários do banco de dados com logins do servidor na instância em que restaurou o banco de dados.

Existem algumas maneiras de fazer isso:

Crie novos logins para eles na nova instância. Em seguida, você terá que removê-los como usuários do banco de dados na nova instância e adicionar seus novos logins. Isso parece estranho, visto que você pode criar os mesmos nomes de login, mas os SIDs (identificadores de segurança) serão diferentes e é isso que o SQL usa para a identificação do usuário. Isso é fácil o suficiente para um ou dois logins.

Se você quiser manter os mesmos usuários, mantendo os mesmos SIDs, entre as instâncias, use o sp_help_revlogin procedimento armazenado. Copie o código do link que criará os procedimentos armazenados necessários e execute-o no servidor do qual você deseja copiar os usuários. Ele irá gerar um script SQL que você pode executar em seu servidor de destino para criar os mesmos usuários que carregam SIDs, senhas, tudo. Este é o caminho a seguir se você tiver muitos usuários de banco de dados que precisa reconectar na instância de destino ou se não souber as senhas de um ou mais Logins do SQL na instância de origem.


Assista o vídeo: Open Source Street Routing With PgRouting For Local Government - Dynamic Data and Performance