Você está aqui: Cards de Engenharia Civil - Fundações |
||
|
||
|
|
||
QGIS ::: PyQGIS API ::: Aplicações com código fonte completo |
Como listar os 5 municípios goianos com maior área em uma camada do QGIS usando PyQGIS - Código Python completoQuantidade de visualizações: 641 vezes |
|
Este código completo mostra uma aplicação QGIS na qual usei PyQGIS para resolver um desafio muito interessante, e complexo. Acredito que servirá de base para muitos códigos interessantes envolvendo QGIS, Python e PyQGIS. Comecei fazendo o download do shapefile do Estado de Goiás, contendo seus 246 municípios no site do IBGE. Em seguida carreguei o shapefile no QGIS usando um objeto QgsVectorLayer. Note que criei uma classe Municipio para guardar cada um dos municípios encontrados no shapefile. E, para agrupar os objetos da classe Municipio eu criei uma lista chamada municipios. Para acessar cada um dos municipios, ou seja, cada uma das 246 feições da camada, eu usei a função getFeatures() da classe QgsVectorLayer. Então, ao percorrer cada uma dessas feições, eu obtive seus atributos, por meio da função attributes(), e os usei para criar os objetos da classe Municipio. Uma vez obtida a lista de municípios, o passo seguinte foi classificar a lista por ordem crescente de área (a área dos municípios). Um laço for me permitiu listar apenas os 5 municípios com maiores áreas e, além de registrar o somatório de seus áreas, obter os seus códigos para selecioná-los na camada, usando a função selectByExpression(). O desafio final foi mostrar as labels, ou seja, os rótulos de cada um dos municípios no mapa do QGIS, porém, eu queria mostrar os rótulos apenas dos 5 municípios com as maiores áreas. Para resolver o desafio, lancei mão da função setFilterExpression(). Veja o código completo para o exemplo:
# uma classe para guardar cada um dos municípios
# do Estado de Goiás
class Municipio:
# método construtor
def __init__(self, codigo, nome, estado, area):
self.codigo = codigo
self.nome = nome
self.estado = estado
self.area = area
# para guardar os municípios
municipios = []
# vamos criar um novo objeto QgsVectorLayer com o local
# do nosso shapefile
camada = QgsVectorLayer("C:\\GOIAS\\GO_Municipios_2022.shp",
"Municípios do Estado de Goiás", "ogr")
# vamos testar se a camada é válida
if not camada.isValid():
print("Não foi possível carregar a camada %s" % camada.name())
else:
# vamos percorrer todas as feições da camada
# e obter os seus atributos
feicoes = camada.getFeatures()
for f in feicoes:
# vamos obter os atributos desta feição
atributos = f.attributes()
# e criamos um novo objeto da classe Municipio
municipio = Municipio(atributos[0], atributos[1],
atributos[2], atributos[3])
# adicionamos este município na lista
municipios.append(municipio)
# agora vamos ordenar a lista por área da maior para
# a menor
municipios = sorted(municipios,
key=lambda municipio:municipio.area, reverse=True)
# vamos adicionar a camada à relação de camadas
QgsProject.instance().addMapLayer(camada)
# vamos calcular a área ocupada pelos 5 maiores municípios
# do Estado de Goiás
area_5_maiores = 0
for i in range(5):
area_5_maiores = area_5_maiores + municipios[i].area
# agora vamos selecionar os 5 maiores municípios na
# camada do QGIS
codigos = ""
for i in range(5):
codigos = codigos + municipios[i].codigo + ", "
codigos = codigos[0:len(codigos) - 2]
camada.selectByExpression('"CD_MUN" IN (' + codigos + ')')
# e mostramos os resultados
print("Os 5 maiores municípios do Estado de Goiás são:\n")
for i in range(5):
print("{0}) {1} - Área: {2} km2".format(i + 1, municipios[i].nome,
municipios[i].area))
print("\nÁrea ocupada pelos 5 maiores municípios: {0} km2".format(
area_5_maiores))
# finalmente vamos exibir os nomes dos municípios. Essa foi
# a parte mais desafiadora do código, pois eu queria mostrar
# somente os rótulos dos cinco maiores municípios
settings = QgsPalLayerSettings()
settings.isExpression = True
settings.placement = QgsPalLayerSettings.Line
settings.placement = QgsPalLayerSettings.Horizontal
# mostra o nome do município
settings.fieldName = "NM_MUN"
format = QgsTextFormat()
format.setColor(QColor('Black'))
settings.setFormat(format)
settings.enabled = True
# cria e adiciona uma nova regra
root = QgsRuleBasedLabeling.Rule(QgsPalLayerSettings())
rule = QgsRuleBasedLabeling.Rule(settings)
rule.setDescription("5 Maiores Municípios do Estado de Goiás")
# define o campo que será usado no filtro. Note que somente
# serão listados os rótulos dos municípios com área maior ou
# igual ao quinto elemento da lista municípios
campo_area = "AREA_KM2"
rule.setFilterExpression(f"\"{campo_area}\" >= {municipios[4].area}")
root.appendChild(rule)
# define as configurações do rótulo
camada.setLabelsEnabled(True)
rules = QgsRuleBasedLabeling(root)
camada.setLabeling(rules)
# redesenha a camada no canvas do QGIS
camada.triggerRepaint()
Ao executar este código QGIS, Python e PyQGIS nós teremos o seguinte resultado: Os 5 maiores municípios do Estado de Goiás são: 1) Niquelândia - Área: 9846.293 km2 2) Mineiros - Área: 9042.844 km2 3) Caiapônia - Área: 8627.961 km2 4) Rio Verde - Área: 8374.255 km2 5) Nova Crixás - Área: 7308.681 km2 Área ocupada pelos 5 maiores municípios: 43200.03399999999 km2 Para fins de compatibilidade este código foi escrito e testado no QGIS 3.34.5-Prizren. |
Java ::: Pacote java.lang ::: String |
Java Avançado - Como usar o método getBytes() da classe String para obter uma sequência de valores do tipo byteQuantidade de visualizações: 8913 vezes |
Em algumas situações gostaríamos de obter os caracteres de uma string como uma representação de inteiros em bytes. Para isso podemos usar o método getBytes(). Veja sua assinatura:public byte[] getBytes()
public class Main {
public static void main(String[] args) {
// vamos declarar um objeto da classe String
String palavra = "Arquivo";
// vamos obter os bytes usados na palavra anterior
byte bytes[] = palavra.getBytes();
// vamos percorrer a matriz de bytes e mostrá-los individualmente
for(int i = 0; i < bytes.length; i++){
System.out.print(bytes[i] + " ");
}
}
}
Ao executarmos este código teremos o seguinte resultado: 65 114 113 117 105 118 111 De fato, o valor 65 é o código inteiro para o caractere "A". É importante observar que alguns caracteres não cabem em um byte (que possui o valor 127 como maior valor inteiro). Isso resulta na conversão para valores negativos. Há outras duas sobrecargas do método getBytes() da classe String. A primeira: byte[] getBytes(Charset charset) byte[] getBytes(String charsetName) |
PHP ::: Fundamentos da Linguagem ::: Métodos, Procedimentos e Funções |
Como usar funções e variáveis globais em PHPQuantidade de visualizações: 38986 vezes |
Por padrão, variáveis definidas a nível de página, ou seja, variáveis globais, não podem ser acessadas a partir de uma função. Veja um exemplo:
<?
// variável global
$usuario = "Osmar";
function exibir(){
echo $usuario; // acessa a variável gloal
}
// chama a função
exibir();
?>
Ao executar este exemplo teremos o seguinte resultado: Notice: Undefined variable: usuario in xxx/estudos.php on line 6 Para contornar este problema, temos que empregar a palavra-chave global seguida pelo nome da variável global que queremos acessar. Veja:
<?
// variável global
$usuario = "Osmar";
function exibir(){
// permite acesso à variável global
global $usuario;
echo $usuario; // acessa a variável gloal
}
// chama a função
exibir();
?>
Ao executarmos o código novamente, percebemos que o resultado é o esperado. Outra forma de acessar variáveis globais a partir de uma função é usando $GLOBALS. Veja:
<?
// variável global
$usuario = "Osmar";
function exibir(){
echo $GLOBALS['usuario']; // acessa a variável global
}
// chama a função
exibir();
?>
|
Java ::: Estruturas de Dados ::: Pilhas |
Como criar uma pilha em Java usando um vetor (array) - Estruturas de Dados em JavaQuantidade de visualizações: 2872 vezes |
A Pilha é uma estrutura de dados do tipo LIFO - Last-In, First-Out (Último a entrar, primeiro a sair). Neste tipo de estrutura, o último elemento a ser inserido é o primeiro a ser removido. Veja a imagem a seguir:![]() Embora seja mais comum a criação de uma estrutura de dados do tipo Pilha de forma dinâmica (usando ponteiros e referências), nesta dica eu mostrarei como podemos criá-la em Java usando um array, ou seja, um vetor. No exemplo eu usei inteiros, mas você pode modificar para o tipo de dados que você achar mais adequado. Veja o código completo para uma classe Pilha usando um vetor de ints. Veja que o tamanho do vetor é informado no construtor da classe. Note também a lógica empregada na construção dos métodos empilhar(), desempilhar() e imprimirPilha(): Código para Pilha.java:
package estudos;
public class Pilha {
private int elementos[]; // elementos na pilha
private int topo; // o elemento no topo da pilha
private int maximo; // a quantidade máxima de elementos na pilha
// construtor da classe Pilha
public Pilha(int tamanho) {
// constrói o vetor
this.elementos = new int[tamanho];
// define o topo como -1
this.topo = -1;
// ajusta o tamanho da pilha para o valor recebido
this.maximo = tamanho;
}
// método usado para empilhar um novo elemento na pilha
public void empilhar(int item) {
// a pilha já está cheia?
if (this.topo == (this.maximo - 1)) {
System.out.println("\nA pilha está cheia\n");
}
else {
// vamos inserir este elemento no topo da pilha
this.elementos[++this.topo] = item;
}
}
// méodo usado para desempilhar um elemento da pilha
public int desempilhar() {
// a pilha está vazia
if (this.topo == -1) {
System.out.println("\nA pilha está vazia\n");
return -1;
}
else {
System.out.println("Elemento desempilhado: " + elementos[topo]);
return this.elementos[this.topo--];
}
}
// método que permite imprimir o conteúdo da pilha
public void imprimirPilha() {
// pilha vazia
if (this.topo == -1) {
System.out.println("\nA pilha está vazia\n");
}
else {
// vamos percorrer todos os elementos da pilha
for (int i = 0; i <= this.topo; i++) {
System.out.println("Item[" + (i + 1) + "]: " + this.elementos[i]);
}
}
}
}
Veja agora o código para a classe principal, ou seja, a classe Main usada para testar a funcionalidade da nossa pilha: Código para Principal.java:
package estudos;
public class Estudos{
public static void main(String[] args){
// vamos criar uma nova pilha com capacidade para 5 elementos
Pilha p = new Pilha(5);
// vamos empilhar 3 elementos
p.empilhar(34);
p.empilhar(52);
p.empilhar(18);
// vamos mostrar os elementos na pilha
System.out.println("Itens presentes na Pilha\n");
p.imprimirPilha();
// agora vamos remover e retornar dois elementos da pilha
System.out.println();
p.desempilhar();
p.desempilhar();
// vamos mostrar os elementos na pilha novamente
System.out.println("\nItens presentes na Pilha\n");
p.imprimirPilha();
}
}
Ao executar este código Java nós teremos o seguinte resultado: Itens presentes na Pilha Item[1]: 34 Item[2]: 52 Item[3]: 18 Elemento desempilhado: 18 Elemento desempilhado: 52 Itens presentes na Pilha Item[1]: 34 |
JavaScript ::: Dicas & Truques ::: Mouse e Teclado |
Como bloquear o botão direito do mouse em suas páginas HTML usando JavaScriptQuantidade de visualizações: 3 vezes |
|
Em algumas situações, principalmente games desenvolvidos em JavaScript ou HTML5, nós gostaríamos de evitar o botão direito do mouse, ou seja, o menu de contexto no corpo da página web. Para isso só precisamos retornar false para o evento oncontextmenu. Veja como isso pode ser feito no trecho de código JavaScript abaixo: <html> <head> <title>Estudos JavaScript</title> </head> <body oncontextmenu="return false"> <h1>Você não pode usar o botão direito nessa página</h1> </body> </html> Uma boa idéia é avisar ao usuário (por meio de uma mensagem window.alert) que ele não pode usar o botão de contexto no documento HTML. Veja:
<html>
<head>
<title>Estudos JavaScript</title>
</head>
<body oncontextmenu="return aviso()">
<script type="text/javascript">
function aviso(){
window.alert("Botão direito não permitido.");
return false;
}
</script>
</body>
</html>
Agora, ao clicarmos com o botão direito do mouse na página, uma mensagem window.alert será exibida com o seguinte texto: Botão direito não permitido. |
Desafios, Exercícios e Algoritmos Resolvidos de JavaScript |
Veja mais Dicas e truques de JavaScript |
Dicas e truques de outras linguagens |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





