Dúvidas

63 views
Skip to first unread message

Luiz Maurício de Oliveira Monteiro

unread,
Mar 2, 2012, 7:41:19 AM3/2/12
to geo...@googlegroups.com
Prezados,
 
Estou iniciando uma aplicação usando o TeComCanvas. Gostaria de saber se existe algum tutorial para ele.
 
Estou precisando escrever uma linha ou polígino, selecionar uma área, etc etc etc num shape.
 
grato,
 
Maurício

José Maria Villac Pinheiro

unread,
Mar 2, 2012, 12:59:21 PM3/2/12
to GeoSan
Maurício:

A melhor forma de verificar como a biblioteca funciona é acessando o
site http://code.google.com/p/geoambiental/

Lá você encontra uma aplicação de gestão de árvores completa em C# que
utiliza a biblioteca. Com as instruções lá disponibilizada vc poderá
desenvolver sua aplicação, copiando e colando o código lá existente.

Abraços

Pinheiro

On 2 mar, 09:41, Luiz Maurício de Oliveira Monteiro

Luiz Maurício de Oliveira Monteiro

unread,
Mar 7, 2012, 8:51:44 AM3/7/12
to GeoSan
Prezado Pinheiro,

Já baixei tudo, mas não encontrei os fontes.

Onde posso encontrá-los?

grato,

Maurício

On 2 mar, 14:59, José Maria Villac Pinheiro <jmpinhe...@nexusbr.com>
wrote:
> Maurício:
>
> A melhor forma de verificar como a biblioteca funciona é acessando o
> sitehttp://code.google.com/p/geoambiental/
>
> Lá você encontra uma aplicação de gestão de árvores completa em C# que
> utiliza a biblioteca. Com as instruções lá disponibilizada vc poderá
> desenvolver sua aplicação, copiando e colando o código lá existente.
>
> Abraços
>
> Pinheiro
>
> On 2 mar, 09:41, Luiz Maurício de Oliveira Monteiro
>
>
>
> <luizmauriciomonte...@gmail.com> wrote:
> > Prezados,
>
> > Estou iniciando uma aplicação usando o TeComCanvas. Gostaria de saber se
> > existe algum tutorial para ele.
>
> > Estou precisando escrever uma linha ou polígino, selecionar uma área, etc
> > etc etc num shape.
>
> > grato,
>
> > Maurício- Ocultar texto das mensagens anteriores -
>
> - Mostrar texto das mensagens anteriores -

José Maria Villac Pinheiro

unread,
Mar 7, 2012, 9:31:09 AM3/7/12
to GeoSan
Estão no link:

http://code.google.com/p/geoambiental/source/browse/

On 7 mar, 10:51, Luiz Maurício de Oliveira Monteiro

Luiz Maurício de Oliveira Monteiro

unread,
Mar 7, 2012, 1:14:40 PM3/7/12
to GeoSan
Amigo,

Lá tem 3 links:

GeoAmbiental.sln ---------------------------- Tem código
GeoAmbiental.suo --------------------------- Está vazio
GeoAmbiental111125.vsp ----------------- Está vazio

Maurício


On 7 mar, 11:31, José Maria Villac Pinheiro <jmpinhe...@nexusbr.com>
> > > - Mostrar texto das mensagens anteriores -- Ocultar texto das mensagens anteriores -

José Maria Villac Pinheiro

unread,
Mar 8, 2012, 5:18:30 AM3/8/12
to GeoSan
Maurício:

Todo o código está no link que passei. Estes arquivos são os arquivos
do projeto em C#, os demais estão nos subdiretórios em sequência, vc
precisa baixar todos os arquivos e diretórios para a sua máquina e
depois importar o projeto todo para o C# para estudar o código fonte e
poder utilizá-lo como referência para desenvolver a aplicação.

Se você clicar no diretório http://code.google.com/p/geoambiental/source/browse/#hg%2Ftrunk%253Fstate%253Dclosed
vai ver mais alguns e existem mais diretórios abaixo deles. Se clicar
no lado esquerdo (Diretório) existe uma setinha ao lado dos nomes dos
diretórios que expandem os mesmos.

Recomendo baixar o TortoiseHG, http://tortoisehg.bitbucket.org/ para
realizar os downloads para a sua máquina com maior facilidade. No
Tortoise, vc precisa configurar para que possa acessar o repositório
de dados que fica em https://code.google.com/p/geoambiental

Pelo que entendi você deseja desenvolver uma aplicação em C# com a
biblioteca. as instruções para instalar as componentes estão no link:
http://code.google.com/p/geoambiental/wiki/Instalacao que são:

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Pré instalação
Instalar as componentes Terralib
Windows XP
Requisitos do Sistema: SP3 com todas atualizações realizadas

Windows XP e 7 - Componentes de Mapeamento
Você deve agora instalar as componentes de mapeamento do Terralib, 1,
2 e 3, na sequência, existe um arquivo .txt com as instruções de
instalação das mesmas.

Selecione cada uns dos arquivos e em seguida a opção View Raw File
para fazer download dos arquivos

http://code.google.com/p/geoambiental/source/browse/#hg%2Ftrunk%2Fsetup%2Fcomponentes

Windows 7
Instalar apenas a componente 2.

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

O código fonte se quiser não instalar o GeoAmbiental e dar só uma
olhada como referência estão no link:

http://code.google.com/p/geoambiental/source/browse/trunk/Form1.cs

Veja que para dar um zoom é apenas uma linha de programação:

xxxxxxxxxxxxxxxxxxxxxxxxxx

private void aproxima_Click_1(object sender, EventArgs e)
{
mensagem.Text = "Aproxima";
axTeCanvas1.zoomIn((float)0.5);
}

xxxxxxxxxxxxxxxxxxxxxxxxxxx

Também existem vídeos no YouTube ensinando como fazer uma aplicação
geo a partir do zero, veja o link:

http://www.youtube.com/playlist?list=PLEE710CA1A3D573C0&feature=plcp

Fico a disposição.

On 7 mar, 15:14, Luiz Maurício de Oliveira Monteiro

Luiz Maurício de Oliveira Monteiro

unread,
Mar 12, 2012, 9:24:55 AM3/12/12
to GeoSan
Prezado José,

Consegui avançar bastante, porém:

1) Não consegui selecionar um GeoObject (um polígono, por exemplo). Eu
consegui, selecionando uma área da layer buscar a registro na tabela.
O que não consegui, por exemplo, foi alterar a cor de fundo deste
polígino. Como faço isso?

2) Eu consigo importar um DXF direto usando a componente?

grato,

Luiz Maurício




On 8 mar, 07:18, José Maria Villac Pinheiro <jmpinhe...@nexusbr.com>
wrote:
> Maurício:
>
> Todo o código está no link que passei. Estes arquivos são os arquivos
> do projeto em C#, os demais estão nos subdiretórios em sequência, vc
> precisa baixar todos os arquivos e diretórios para a sua máquina e
> depois importar o projeto todo para o C# para estudar o código fonte e
> poder utilizá-lo como referência para desenvolver a aplicação.
>
> Se você clicar no diretóriohttp://code.google.com/p/geoambiental/source/browse/#hg%2Ftrunk%253Fs...
> vai ver mais alguns e existem mais diretórios abaixo deles. Se clicar
> no lado esquerdo (Diretório) existe uma setinha ao lado dos nomes dos
> diretórios que expandem os mesmos.
>
> Recomendo baixar o TortoiseHG,http://tortoisehg.bitbucket.org/para
> realizar os downloads para a sua máquina com maior facilidade. No
> Tortoise, vc precisa configurar para que possa acessar o repositório
> de dados que fica emhttps://code.google.com/p/geoambiental
>
> Pelo que entendi você deseja desenvolver uma aplicação em C# com a
> biblioteca. as instruções para instalar as componentes estão no link:http://code.google.com/p/geoambiental/wiki/Instalacaoque são:
>
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx­xxxxxxxx
>
> Pré instalação
> Instalar as componentes Terralib
> Windows XP
> Requisitos do Sistema: SP3 com todas atualizações realizadas
>
> Windows XP e 7 - Componentes de Mapeamento
> Você deve agora instalar as componentes de mapeamento do Terralib, 1,
> 2 e 3, na sequência, existe um arquivo .txt com as instruções de
> instalação das mesmas.
>
> Selecione cada uns dos arquivos e em seguida a opção View Raw File
> para fazer download dos arquivos
>
> http://code.google.com/p/geoambiental/source/browse/#hg%2Ftrunk%2Fset...
>
> Windows 7
> Instalar apenas a componente 2.
>
> xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx­xxx

Luiz Maurício de Oliveira Monteiro

unread,
Mar 14, 2012, 7:59:59 AM3/14/12
to GeoSan
José,

Quando visualizo a propriedade object_id do Canvas, ela com o valor
null (""). Da mesma forma, quando executo o método
getSelectObjectId(), tb está null. O que deve esta acontecendo? Segue
o código de quando carrego a layer para o canvas.
try
{
_conn = new ADODB.Connection();
_conn.Open(ConnectionStr, "", "");

_rs = new ADODB.Recordset();

TeCa_Mapa.connectionString = ConnectionStr;
TeCa_Mapa.openConnection();

TeCa_Mapa.connection = _conn;
TeCa_Mapa.setProjection("UTM");
TeCa_Mapa.setCurrentLayer("municip07");
TeCa_Mapa.addLayerToSelect("municip07");
nomeTabelaGeometrias =
getGeometryLayerName("municp07", "Polygons");

TeCa_Mapa.plotView();
}

Grato,

Maurício

On 12 mar, 10:24, Luiz Maurício de Oliveira Monteiro

Luiz Maurício de Oliveira Monteiro

unread,
Mar 14, 2012, 8:59:29 AM3/14/12
to GeoSan
Pessoal,

Conforme dúvida postada anteriormente, estou enviando o código para
ajuda. São duas (pelo menos por agora - rs):


1) Ao clicar na layer, o object_id está null. Acho que estou fazendo
alguma coisa errada no momento de carregar a layer (é um achismo).

2) Quando clico na layer seleciono o registro da tabela
(TeCa_Mapa_onDblClick()). O problema é que como não consegui
selecionar o id do polígono,
estou buscando usando as coordenadas, o que nem sempre da certo (pelo
menos da maneira que implementei - serviu de paliativo). Penso que,
pelo fato de não ter conseguido o valor o object_id, não encontrei
outro forma de fazer.

Alguem teria uma solução?

Como estou começando a usar o TCom, estou como base o código
disponibilizado no site.

Grato,

Maurício



using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Data.OleDb;
using System.IO;

namespace GeoIrrigacao
{
public partial class frmTubulacao : Form
{
public static ADODB.Connection _conn;
public static ADODB.Recordset _rs;
public static bool _normal;

// último object_id selecionad0
public static string objIdSelecionado;
public static string nomeTabelaGeometrias;

public frmTubulacao()
{
InitializeComponent();
}

private void btnProximo_Click(object sender, EventArgs e)
{
string ConnectionStr =
@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:
\TerraLIB_VS2010\Database\canvas.mdb;Persist Security
Info=True";

try
{
_conn = new ADODB.Connection();
_conn.Open(ConnectionStr, "", "");

_rs = new ADODB.Recordset();

TeCa_Mapa.connectionString = ConnectionStr;
TeCa_Mapa.openConnection();

TeCa_Mapa.connection = _conn;
TeCa_Mapa.setProjection("UTM");
TeCa_Mapa.setCurrentLayer("municip07");
TeCa_Mapa.addLayerToSelect("municip07");
nomeTabelaGeometrias =
getGeometryLayerName("municip07", "Polygons");

TeCa_Mapa.plotView();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}

try
{
municip07TableAdapter.Connection.ConnectionString =
ConnectionStr;
}
catch (System.Exception excep)
{
mensagemOkAborta("008 - Não realiza conexão inicial
com o banco de dados.\n" + excep.Message);
}

setNormal(true);
}

private string getGeometryLayerName(string nomeLayer, string
tipoGeometria)
{
string nomeLayerGeometria = "";
try
{
string sql;
sql = "SELECT layer_id FROM te_layer WHERE name = '"
+ nomeLayer + "'";
_rs.Open(sql, _conn,
ADODB.CursorTypeEnum.adOpenKeyset,
ADODB.LockTypeEnum.adLockOptimistic, -1);
nomeLayerGeometria = tipoGeometria +
Convert.ToString(_rs.Fields[0].Value);
_rs.Close();
}
catch
{
mensagemOkAborta("003 - Não encontra o layer de
polígonos");
}
return nomeLayerGeometria;
}

private void mensagemOkAborta(string mensagem)
{
MessageBox.Show(mensagem, "Saindo da Aplicação",
MessageBoxButtons.OK);
System.Windows.Forms.Application.Exit();
}

private void btnAnterior_Click(object sender, EventArgs e)
{
if (getNormal())
{
setNormal(false);
TeCa_Mapa.zoomArea();
}
}

private void btnZoomInicial_Click(object sender, EventArgs e)
{
if (getNormal())
TeCa_Mapa.recompose();
}

private void btnNavegar_Click(object sender, EventArgs e)
{
if (getNormal())
TeCa_Mapa.pan();
}


private void TeCa_Mapa_onDblClick(object sender,
AxTECOMCANVASLib._ITeCanvasEvents_onDblClickEvent e)
{
string _coord_x;
string _coord_y;

string sql;

try
{
_coord_x = tbIdAreaX.Text.Replace(",", ".");
_coord_y = tbIdAreaY.Text.Replace(",", ".");

sql = "SELECT * FROM municip07, Polygons1" +
" WHERE municip07.object_id_1 =
Polygons1.object_id" +
" AND lower_x <= " + _coord_x + " AND upper_x
>= " + _coord_x +
" AND lower_y <= " + _coord_y + " AND upper_y
>= " + _coord_y;

_rs.Open(sql, _conn,
ADODB.CursorTypeEnum.adOpenKeyset,
ADODB.LockTypeEnum.adLockOptimistic, -1);
if (_rs.RecordCount == 0)
MessageBox.Show("Nenhum registro encontrado.");
else
{
localiza(Convert.ToString(_rs.Fields[2].Value));
addPoint("municip07");
}
_rs.Close();
}
catch (Exception Ex)
{
MessageBox.Show(Ex.Message);
}
}


private void TeCa_Mapa_onMouseMove(object sender,
AxTECOMCANVASLib._ITeCanvasEvents_onMouseMoveEvent e)
{
tbIdAreaX.Text = e.x.ToString("N");
tbIdAreaY.Text = e.y.ToString("N");
}


private void btnZoomMais_Click(object sender, EventArgs e)
{
// Aproxima
TeCa_Mapa.zoomIn((float)0.3);
}

private void btnZoomMenos_Click(object sender, EventArgs e)
{
// Afasta
TeCa_Mapa.zoomOut((float)0.3);
}


private void addPoint(string _layer)
{
// Define o plano de edição
TeCa_Mapa.setCurrentLayer(_layer);

// Limpa todos os itens selecionados em memória
TeCa_Mapa.clearSelectItens(0);

// Adiciona pontos ao plano definido como edição
TeCa_Mapa.drawPoint();
}

private void TeCa_Mapa_onKeyPress(object sender,
AxTECOMCANVASLib._ITeCanvasEvents_onKeyPressEvent e)
{
if (e.key == 27)
{
setNormal(true);
}
else
{
//
}
}


private void setNormal(bool _set)
{
if (_set == true)
TeCa_Mapa.normal();
_normal = _set;
}

private bool getNormal()
{
return _normal == true;
}


private void frmTubulacao_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the
'canvasDataSet1.municip07' table. You can move, or remove it, as
needed.

this.municip07TableAdapter.Fill(this.canvasDataSet1.municip07);
// TODO: This line of code loads data into the
'canvasDataSet1.municip07' table. You can move, or remove it, as
needed.
//
this.municip07TableAdapter.Fill(this.canvasDataSet1.municip07);
}

private void dgvMunicipio_MouseClick(object sender,
MouseEventArgs e)
{
int i;

// Obtem a linha corrente selecionada no datagridview da
espécie
DataGridViewRow linhaAtual = dgvMunicipio.CurrentRow;

// Obter a linha que foi selecionada, começando em zero
i = linhaAtual.Index;

// obter o id_praca da linha que está selecionada
object theValue = this.dgvMunicipio[0, i].Value;

TeCa_Mapa.getSelectGeoId(0, 4);
addPoint("municip07");
MessageBox.Show(i.ToString());
}


private void btnPesquisa_Click(object sender, EventArgs e)
{
localiza(tbPesquisa.Text);
}

private void localiza(string _valor)
{
int i;

for (i = 0; i < this.dgvMunicipio.Rows.Count - 1; i++)
{
if (this.dgvMunicipio[2, i].Value.ToString() ==
_valor)
{
this.dgvMunicipio.CurrentCell =
this.dgvMunicipio.Rows[i].Cells[0];
break;
}
}

}

private void TeCa_Mapa_onMouseDown(object sender,
AxTECOMCANVASLib._ITeCanvasEvents_onMouseDownEvent e)
{
objIdSelecionado = TeCa_Mapa.object_id;

MessageBox.Show(objIdSelecionado);
}

}
}


On 14 mar, 08:59, Luiz Maurício de Oliveira Monteiro

José Maria Villac Pinheiro

unread,
Mar 16, 2012, 7:23:39 AM3/16/12
to geo...@googlegroups.com

Luiz 

1. Para alterar utilize o método Method SetSelPolygon (TeCanvas), está na documentação do arquivo TeCanvas.chm, no link 
http://www.geosan-brasil.blogspot.com/, veja Manuais e Documentos.

2. Para importar um DXF é só baixar o Spring do site do INPE e converter o mesmo para shape e ai importar para o Terraview.

Att.

Pinheiro

José Maria Villac Pinheiro

unread,
Mar 16, 2012, 9:13:12 AM3/16/12
to geo...@googlegroups.com
Luiz:

1. Sim, vc tem que procurar o número maior da tabela, somar um a atualizar o valor. Nós decidimos no passado dar o total controle do object_id para vc. Para isso vc manipula tanto na tabela de geometrias quanto na de atributos.

Quando adiciono um polígono ou ponto primeiro

case "1" : // está adicionando árvores
                    {
                        try
                        {
                            // salva tudo o que foi feito
                            _conn.BeginTrans();
                            axTeCanvas1.saveOnMemory();
                            axTeCanvas1.saveInDatabase();
                        }
Depois salvo os atributos, veja o método:

saveInsertedTreeAttributes(); 

que obtém o próximo ID:

new_object_id_ = obtemProximoObjectId("net_trees", "object_id_"); 

que ai pego manualmente no banco de dados:

/// <summary>
        /// Obtem o próximo valor de OBJECT_ID da tabela de atributos
        /// </summary>
        /// <param name="nomeTabela">nome da tabela de atributos</param>
        /// <param name="nomeColunaObjectId">nome da coluna onde se encontra o OBJECT_ID da tabela de atributos</param>
        /// <param name="proximoObjId">retorno do próximo OBJECT_ID disponível para a tabela de atributos</param>
        private string obtemProximoObjectId(string nomeTabela, string nomeColunaObjectId)
        {
            string strSql;
            long valor;
            int numArvoresCadastradas;

            try
            {
                // verifica se a tabela está vazia
                strSql = "SELECT COUNT(*) FROM " + nomeTabela;
               
                _rs.Open(strSql, _conn);

                // verifica se existe pelo menos uma árvore cadastrada
                numArvoresCadastradas = (_rs.Fields[0].Value == null) ? 0 : _rs.Fields[0].Value;

                _rs.Close();

                if (numArvoresCadastradas > 0)
                {
                    // encontra o maior valor do object_id_ para poder inserir a nova linha na tabela de atributos
                    // SQL Server
                    strSql = "SELECT Max (CAST(" + nomeColunaObjectId + " AS int) ) FROM " + nomeTabela;
                    // Access
                    // strSql = "SELECT Max (CLng(" + nomeColunaObjectId + ") ) FROM " + nomeTabela;
                    _rs.Open(strSql, _conn);

                    // salva o valor do próximo object_id_  a ser inserido
                    valor = (_rs.Fields[0].Value == null) ? 1 : _rs.Fields[0].Value + 1;

                    _rs.Close();

                    return valor.ToString();
                }
                else
                    return "1";
            }
            catch (System.Exception excep)
            {
                mensagemOkAborta("007 - Não obtem o próximo número da árvore.\n" + excep.Message);
                // é o primeiro object_id_
                return "1";
            }

e depois insere

_rs.Open("SELECT id_arvore, id_rua, num_casa, object_id_ FROM net_trees", _conn);

                // a coluna id_origem não seria necessária na tabela net_trees, mas foi mantida como padrão 1. Ele é obtida através da tabela net_species, lá está o valor correto
                strSql = "insert into net_trees (id_rua, num_casa, object_id_, id_bairro, id_praca, id_especie, id_poda_sit, id_poda_tipo, id_praga, id_doenca, cac, altura, conflito_rede_eletr, dano_pavim, obs, id_origem) values(" + selectedId + ", '" + numCasa + "' , '" + new_object_id_ + "' , " + selectedBairroId + " , " + selectedPracaId + " , " + selectedEspecieId + " , " + selectedPodaSitId + " , " + selectedPodaTipoId + " , " + selectedPragaId + " , " + selectedDoencaId + " , " + AjustarNumero(sCac) + " , " + AjustarNumero(sAltura) + " , " + iConflitoRedeEletr + " , " + iDanoPav + " , '" + obs + "' , 1 )";

                _conn.Execute(strSql, out linhasAfetadas, -1);

                _rs.Close();


Fico a disposição.

Att.

Pinheiro

Luiz Maurício de Oliveira Monteiro

unread,
Apr 4, 2012, 10:20:01 AM4/4/12
to GeoSan
Caro José,

Quando importo as curvas de nível, são criadas as tabelas: Curva_Nivel
e Lines1 (mais as relações internas deste novo layer). Na tabela
te_visual, estão as características da representação geométrica das
linhas. Eu não consegui alterar as propriedades (por exemplo, width)
de apenas uma linha da curva de nível. Em modo de seleção
(Teca.select()), as alterações aparecem, mas quando volto ao modo
normal (TeCa.normal()), as alterações não são atualizadas no BD. Isso
acontece, tanto quanto crio novas linhas (que são inseridas no BD)
quanto com as linhas já existentes. Mesmo se alterar as propriedades
de todas as curvas de nível, não consigo atualizar o BD.

O que preciso fazer para alterar as propriedades de uma linha
específica?

Grato,

Maurício


On 16 mar, 10:13, José Maria Villac Pinheiro <jmpinhe...@nexusbr.com>
wrote:
> luizmauriciomonte...@gmail.com> escreveu:
> ...
>
> mais »- Ocultar texto das mensagens anteriores -

José Maria Villac Pinheiro

unread,
May 21, 2012, 8:28:27 AM5/21/12
to geo...@googlegroups.com
Luiz:

Sua questão sobre o TeComCanvas foi movida para o forum do mesmo no link:

Reply all
Reply to author
Forward
0 new messages