PDA

Ver la Versión Completa : MapObjects & Delphi


TriLoCBA
14-07-2005, 18:23:32
Como muestro dentro de un objeto TMap (llamado Map1) los label de un deteminado shapefile ???

Puntualmente, el shapefile contiene los tramos (arc) que representan cada una de las calles, y posee un campo NOM_CALLE, que lleva el nombre de las mismas.

Ya cree la capa correspondiente, le asigne color, y tipo de linea; pero no se como mostrar los nombres de calle:


procedure TForm1.FormShow(Sender: TObject);
var
conexion: IMoDataConnection;
Ly1,Ly2,Ly3,Ly4: IMoMapLayer;
begin
//Crear conexion con el directorio donde estan los datos...
conexion := IMoDataConnection(CreateOleObject('MapObjects2.DataConnection'));
conexion.Database:= 'C:\DatosGIS';

if not conexion.Connect then exit;

//Crear objetos Layer...
Ly1:= IMoMapLayer(CreateOleObject('MapObjects2.MapLayer'));

//Asignarle el shapefile...
Ly1.GeoDataset:=conexion.FindGeoDataset('Calles_arc.shp');

//Propiedades de la capa...
Ly1.Symbol.Color:= $00C5BDBD;
Ly1.Symbol.Style:= moDotLine;

//Mostrar la capa...
Map1.Layers.Add(Ly1);

end;


Encontre dos objetos:
MapObjects2.LabelPlacer
MapObjects2.LabelRenderer
Pero aun no logro usarlos correctamente !!!

PD: Como se hace Torito !!! :confused:

torito
21-07-2005, 16:55:52
jeje, gracias por la pos Data, te recomiendo que si tienes dudas sobre el map objects continues con el hilo donde nos conocimos ya que de ese si me llega aviso y de este por pura casualidad lo vi.. el código te lo adjunto, si tienes alguna duda me avisas, por cierto que bueno que ya estas investigando más a fondo


procedure TForm2.BBEtiquetaClick(Sender: TObject);
var
aqui : integer;
oleFt : variant;
lblren : IMoLabelRenderer;
begin
if (cbvisible2.Checked) and (cbdato.Text<>'') then
begin
oleft := FontToOleFont(fuentes.Font);
lblren :=IMoLabelRenderer(CreateOleObject('MapObjects2.LabelRenderer'));
LblRen.DrawBackground := True;
LblRen.Field := 'Nom';
LblRen.SplinedText := True;
LblRen.AllowDuplicates := False;
LblRen.MaxLevel := 10;
LblRen.MinLevel := 10;

LblRen.Symbol[0].Font := IFontDisp(IDispatch(oleFt));
//lblren.AllowDuplicates :=true;
lblren.field :=cbdato.Text;
l.renderer := lblren;
//form1.Map1.Refresh;
end else //fin if principal
l.renderer :=nil;
form1.Map1.Refresh;


saludos

TriLoCBA
22-07-2005, 00:31:43
Torito,
Desde ya muchas gracias por el ejemplo...

Estuve haciendo unas pruebas con ambos objetos (LabelPlacer y LabelRenderer),usando los ejemplos de Visual Basic que trae la ayuda del MapObjects 2.3, y luego convirtiendolos a Delphi.

Aun no tengo claro, debido a que ambos objetos cuentan con propiedades muy parecidas, cual es la funcion o virtud especifica de cada uno.

Ya logre parte de lo que queria, pero seguire investigando !!! :cool:

PD: Abri este hilo debido a que Herramientas Cartograficas se ha hecho muy largo y algo complicado de seguir; pero sobre todo porque comparto 100% contigo, la idea de que los temas GIS & Delphi, merecen mucho mas que un solo hilo, incluso un foro propio dentro deClubDelphi ;)...

torito
22-07-2005, 01:11:35
nunca eh trabajado con el labelplacer, en donde viene el ejemplo??

TriLoCBA
25-07-2005, 00:21:29
Los ejemplos que estoy probando los copie del MapObjects 2.3 Help (MapObjects2.hlp), que se instala con el MO23Eval_Only.exe (descargado de la pagina de ESRI).

Todos los ejemplos de la ayuda estan en Visual Basic, pero son relativamente faciles de convertir a Delphi.

Hay otro archivo: MO23Samples.exe que instala ejemplos concretos en varios lenguajes.

torito
25-07-2005, 15:19:29
ok, la verdad aun no empiezo con el mo23, ya que aún no me llega la actualización, tan pronto llegue me mudo a esa versión y te comento

TriLoCBA
03-08-2005, 00:32:54
Cual es la propiedad MapObjects, que permite ponerle borde a las letras de los labels ???

En ArcMap (8.1), al texto del label puede definirsele un "Halo", para que resalten mas las letras sobre el mapa. Pero no encuentro la propiedad en los objetos del MapObjects...:confused: