Introducción
Para empezar, debo aclarar que no soy un buen programador, los programadores serios pueden ver el siguiente artículo como poco profundo. Sin embargo, teniendo en cuenta mis limitaciones, me parece fascinante poder integrar herramientas libres para obtener resultados prácticos en el ámbito de la geomática.
¿Para qué tener mi propio visor?
- Para poder acceder rápidamente a mis datos espaciales sin tener que cargar los programas usuales, que pueden consumir recursos innecesarios en operaciones simples de consulta.
- Para aprender a emplear y a integrar las facilidades que presentan muchos de los proyectos de filosofía libre, demostrando así que el principal obstáculo en la implementación de estas herramientas es nuestro desconocimiento y no sus limitaciones funcionales.
¿Qué tipo de aplicación se va a generar?
Según Daniel P. Ames (quien está a cargo del desarrollo de componentes GIS en el proyecto MapWindow) existen tres tipos de escenarios para desarrollar software GIS:
-
Desarrollo de extensiones y plug-ins que agregan funcionalidades a software GIS existente en el escritorio.
-
Desarrollo de herramientas web de visualización y generación de mapas.
-
Desarrollo de aplicaciones independientes en el escritorio empleando componentes GIS programables.
Nuestro visor de datos espaciales en formato vectorial será una aplicación independiente en el escritorio, empleando un componente GIS programable, el MapWinGis.ocx de MapWindow.
¿Qué herramientas de software se requieren?
-
Sistema Operativo: Windows XP (Bueno, por algo se empieza...) (Licencia: Privativa)
-
Marco de Desarrollo de Software: .NET Framework 2.0 (Licencia: Freeware)
-
Entorno Integrado de Desarrollo (IDE): SharpDevelop 2.1 (Licencia: GNU/GPL)
¿Qué es .NET Framework?
.NET Framework es un marco de desarrollo de software compuesto por lenguajes de programación, una biblioteca de clases (BCL) y un entorno de ejecución común para lenguajes (CLR). Implementa los estándares abiertos ECMA e ISO/IEC que propenden por una compatibilidad mínima entre los lenguajes que lo integran.
En otros términos, .NET Framework se encarga de proveer al programador los lenguajes, herramientas y servicios necesarios para distribuir su aplicación en múltiples plataformas de hardware.
¿Qué es SharpDevelop?
SharpDevelop es un IDE OpenSource que soporta el desarrollo de aplicaciones en lenguajes como C# y VB.NET; permite escribir código en ASP.NET, ADO.NET, XML y HTML, entre otros; tiene un depurador integrado; permite diseñar formularios para C# y VB.NET; está traducido parcialmente al español; soporta proyectos de instalación; tiene un generador de documentación embebido; soporta múltiples Frameworks: .NET 1.1 y 2.0, Mono y Compact Framework; y admite el protocolo ActiveX (de manera parcial).
Es un IDE muy completo que cubre fácilmente los requerimientos de un programador en C# o VB.NET. Particularmente, además de las necesidades básicas, necesitaba un entorno que permitiera el manejo de componentes ActiveX y SharpDevelop lo cumple.
¿Qué es el MapWinGIS.ocx?
El MapWinGIS.ocx es un componente ActiveX escrito en C++ y desarrollado por el proyecto MapWindow Gis. Facilita el desarrollo de aplicaciones en varios lenguajes de programación (C#, VC++, VB6, VB.NET, VBA y Delphi). Esta compuesto por una Interfaz de Programación de Aplicaciones (API) que permite el acceso a objetos, funciones, propiedades y métodos relativos a la visualización y manipulación básica de información geográfica en formato Shapefile, Grid y TIN.
{mospagebreak title= Pag.2 Para comenzar...}
Para comenzar...
Para comenzar la construcción del visor, debemos instalar el software requerido.
Instalación del .NET Framework
El .NET Framework 2.0 se puede descargar aquí. Tiene un tamaño de 22,4 MB y requiere el Service Pack 2 de Windows instalado.
Una vez descargado, debemos ejecutar el archivo y seguir normalmente los pasos de instalación.
Instalación del SharpDevelop 2.1
El instalador de Sharpdevelop 2.1 puede obtenerse aquí.
Contrario a lo que podríamos pensar sobre un tamaño exagerado del archivo de instalación (pues es un IDE muy completo), solamente ocupa 8,63 MB en el disco duro y después de instalado únicamente 34,26 MB, realmente sorprendente.
La instalación de SharpDevelop no presenta mayores inconvenientes.
Instalación del componente ActiveX MapWinGIS.ocx
Podemos obtener el componente MapWinGIS.ocx sin incluir sus dependencias aquí (archivo comprimido, 2,23 MB), o incluyendo sus dependencias aquí (archivo ejecutable, 15 MB). El componente ActiveX requiere de varios archivos dll (runtimes de C y C++ 7.0) para funcionar correctamente, si se quiere estar seguro sobre el funcionamiento del mismo, se recomienda descargar la segunda opción, es decir, el archivo con dependencias.
-
Si se descargó el archivo sin dependencias:
Descomprimir el archivo MapWinGis43.zip
Copiar el archivo MapWinGis.ocx a una de las siguientes carpetas:
c:\Archivos de Programa\Archivos Comunes\MapWindow\
c:\Archivos de Programa\Common Files\MapWindow\
Debemos crear la carpeta si no existe. En realidad no interesa en qué carpeta se encuentre el archivo pero se recomienda una de las carpetas mencionadas para poderlo encontrar fácilmente si se planean realizar más aplicaciones que utilicen el componente.
-
Si se descargó el archivo con dependencias:
Ejecutar el archivo MapWinGis43OCXOnly.exe y seleccionar la opción “No, I will restart the computer later”.
El archivo MapWinGis43OCXOnly.exe instala las dependencias del componente ActiveX y el archivo MapWinGis.ocx en la carpeta
c:\Archivos de Programa\Common Files\MapWindow\
Ahora debemos registrar el archivo MapWinGis.ocx en el sistema:
Abrir la ventana Ejecutar: Vamos a Inicio --> Ejecutar
Correr el comando de registro de componentes:
En la caja de texto que aparece en la ventana Ejecutar, escribimos:
regsvr32.exe “C:\Archivos de programa\Archivos comunes\MapWindow\MapWinGIS.ocx” o
regsvr32.exe “C:\Archivos de programa\Common Files\MapWindow\MapWinGIS.ocx”
dependiendo del directorio en el que se encuentre el componente. Obtenemos:

Lo cual nos indica que tenemos el ActiveX registrado.
Un obstáculo por superar
El ActiveX MapWinGis.ocx es un componente que emplea la tecnología COM, la cual no es soportada de manera directa por .NET; para poder utilizarlo en nuestra aplicación se deben crear un par de archivos interoperables con la tecnología .NET.
Estos archivos interoperables pueden ser generados empleando herramientas del Kit de Desarrollo de Software de .NET (.NET SDK), que se encuentra en internet con licencia Freeware. Sin embargo, el archivo de descarga tiene un tamaño superior a los 350 MB, por lo cual el proceso puede resultar inoportuno si se tiene en cuenta nuestro objetivo. Para conocer el procedimiento de obtención de los archivos interoperables podemos visitar esta página web.
Como alternativa práctica, podemos optar por descargar directamente los archivos interoperables aquí (archivo comprimido, 46 KB). Tras descomprimir el archivo, obtenemos dos dll:
-
AxInterop.MapWinGIS.dll
-
Interop.MapWinGIS.dll
Estos archivos no requieren de registro en el sistema porque son componentes .NET; son importantes porque posibilitan el acceso a los objetos, funciones, propiedades y métodos del componente programable MapWinGis en nuestra aplicación.
Ahora debemos copiar los dos archivos en la carpeta en la que se encuentra el componente MapWinGis.ocx (el cual debe dejarse allí pues su registro es necesario para la aplicación).
Hemos terminado con la instalación del software requerido para la construcción del visor, el siguiente paso es crear un proyecto .NET para escribir el código allí.
{mospagebreak title= Pag.3 Creando el proyecto .NET}
Creando el proyecto .NET

Empezaremos a utilizar el Entorno Integrado de Desarrollo SharpDevelop, cuya interfaz luce así:

Damos click en el botón Nueva Solución y obtenemos el siguiente diálogo:

Escogemos en la parte izquierda la categoría VBNET y la subcategoría Aplicaciones de Windows. En la parte derecha seleccionamos Aplicación Windows. Digitamos en la caja de texto el nombre “Mi_Visor_de_Shapefiles” y seleccionamos la ubicación del proyecto. Damos click en Crear y tenemos la estructura de nuestro proyecto.
En la parte izquierda de la interfaz de SharpDevelop podemos encontrar que la pestaña Proyectos se encuentra activa. Observamos que nuestro proyecto tiene Referencias, un archivo de Información del ensamblado que compilaremos (AssemblyInfo.vb), una Forma Principal (MainForma.vb) y una clase que controla el comportamiento de nuestra aplicación (Program.vb). Estos archivos y referencias iniciales son creados por SharpDevelop facilitando el proceso de desarrollo de la aplicación.

Agregando referencias
Debemos crear referencias a los archivos interoperables desde nuestro proyecto. Para ello, en la pestaña Proyectos damos click derecho a Referencias y seleccionamos Agregar Referencias.

Activamos la pestaña Visor de Ensamblados .NET y damos click en Explorar. Vamos al directorio en donde se encuentran los dos archivos interoperables (AxInterop.MapWinGis.dll e Interop.MapWinGis.dll) y los cargamos dando click en Abrir. Obtenemos lo siguiente:

Damos click en Ok y ya tenemos las referencias a los archivos interoperables en nuestro proyecto.

Agregando el control AxMap
En la pestaña Proyectos damos doble click a la clase MainForm.vb, cuyo código se encuentra en la parte central de la interfaz. Activamos la pestaña Diseño y observamos la forma sobre la cual ubicaremos varios controles posteriormente:

En la parte inferior izquierda de la interfaz activamos la pestaña Herramientas visualizando los diferentes controles que podemos agregar a la Forma. Damos click derecho en el área Herramientas que se acaba de desplegar y seleccionamos Personalizar Barra Lateral...

Seleccionamos la categoría Components (sin desactivarla) y damos click en el botón Añadir Componentes.

Activamos la pestaña Personalizado y damos click al botón con los puntos suspensivos, vamos a la carpeta que contiene los archivos interoperables y seleccionamos AxInterop.MapWinGis.dll, damos click en Abrir y vemos que la ruta al archivo se ha cargado en la caja de texto correspondiente. Damos click al botón Mostrar Componentes y observamos a la derecha el componente AxMap.

Damos click en Ok a las ventanas abiertas y con esto hemos habilitado el control que nos servirá para visualizar la información geográfica en la Forma.

En Herramientas damos click a la barra Components y a luego a AxMap. Llevamos el puntero hacia la Forma y dibujamos un rectángulo sobre la misma, allí se alojará el control AxMap que tiene un color blanco por defecto.

{mospagebreak title= Pag.4 Diseñando la interfaz del visor}
Diseñando la interfaz del visor
Continuando con el diseño de nuestro visor, en Herramientas damos click a la barra Windows Forms y seleccionamos Button. Llevamos el cursor a la Forma y dibujamos seis botones que corresponderán a Acercar (Zoom In), Alejar (Zoom Out), Zoom Previo, Zoom Completo, Pan y Agregar Capa.
A cada botón en la Forma debemos modificarle sus propiedades, visibles en una de las pestañas de la parte derecha de la interfaz de SharpDevelop, las configuramos así:
Botón |
Propiedad Name |
Propiedad Text |
Propiedad Image |
1 |
btnZoomIn |
|
b_ZoomIn.png |
2 |
btnZoomOut |
|
b_ZoomOut.png |
3 |
btnZoomPrevio |
|
b_ZoomPrevio.png |
4 |
btnZoomCompleto |
|
b_ZoomCompleto.png |
5 |
btnPan |
|
b_Pan.png |
6 |
btnAddLayer |
|
b_AddLayer.pn |
Las imágenes que empleamos para los botones pueden descargarse aquí (archivo comprimido, 2 KB). La propiedad Text se pone nula para que no interfiera con la imagen del botón.
En este momento la Forma debe lucir así:

Agregamos ahora desde Herramientas en la barra Windows Forms el control OpenFileDialog, que nos va a permitir buscar los archivos Shapefile en nuestro disco duro para posteriormente cargarlos.
Ahora podemos agregar el código a la Forma.
Agregando el código de la aplicación
Antes de agregar el código de nuestro visor, debemos crear una referencia al componente Microsoft Scripting Runtime para habilitar el Objeto de Sistema de Archivos que permite manipular directorios y archivos del sistema. Para ello, vamos a la pestaña Proyectos, damos click derecho a Referencias y seleccionamos Agregar Referencia. En la pestaña COM buscamos el componente mencionado, lo seleccionamos y lo cargamos.
Como se trata de un componente COM, .NET no lo soporta directamente; sin embargo, SharpDevelop genera de manera automática el archivo interoperable Interop.Scripting.dll. En el caso del componente MapWinGis.ocx, SharpDevelop no puede generar automáticamente el archivo AxInterop.MapWinGis.dll (aunque si el Interop.MapWinGis.dll) que contiene el control AxMap, importante en nuestra aplicación; por esta razón se prefiere suministrar los archivos interoperables ensamblados previamente.
Debemos poder visualizar la nueva referencia Scripting:

En la parte central de la interfaz de SharpDevelop (en donde estamos visualizando la Forma) activamos la pestaña Fuente que nos permite editar el código de la Forma.
Seleccionamos todo el texto que existe (presionando Control + A por ejemplo) y lo borramos. Abrimos el archivo codigo_visor.txt que puede descargarse de aquí (archivo de texto, 5 KB) y copiamos todo su contenido en el espacio para el código de la Forma. Para comprender mejor el código podemos leer los comentarios realizados en cada sentencia.
Ahora debemos hacer que el código que hemos introducido se asocie a los botones de nuestra aplicación porque esto no ocurre de manera automática. Para conseguirlo, activamos la pestaña Diseño y damos doble click al primer botón de la Forma, lo cual nos envía al código y ubica el cursor justo en la sentencia que define su evento click. Hacemos lo mismo para cada uno de los cinco botones restantes.
Compilando la aplicación
Tecleamos F5 para depurar el programa, si hemos seguido todos los pasos correctamente no deberían existir errores.
Damos F9 para generar el ejecutable.
El archivo ejecutable se puede encontrar en:
directorio_aplicación/bin/Debug/Mi_Visor_de_Shapefiles.exe
donde directorio_aplicación es la ruta de la carpeta en la que se encuentra nuestro proyecto. Por ahora no podemos cambiarlo de directorio, pero podemos crear un acceso directo que nos facilite su búsqueda.
Podemos descargar un Shapefile de prueba aquí (archivo comprimido, 1.3 MB).
Con esto hemos generado nuestro propio Visor de Shapefiles empleando un IDE OpenSource, un Marco de Desarrollo de Software Freeware y un componente GIS libre.

Puedes descargar este artículo en pdf desde aquí (510 KB).
Este artículo ha sido adaptado de Getting Started With the MapWinGis ActiveX Control. (Daniel P. Ames. 2006)
Referencias consultadas:
-
Ames, Daniel P. Getting Started With the MapWinGis ActiveX Control. 2006. Disponible en la URL: http://www.mapwindow.org/doc/UsingMapWinGIS.pdf (Última visita: Septiembre, 2007)
-
Proyecto MapWindow GIS. URL http://mapwindow.org (Última visita: Septiembre, 2007)
-
Proyecto SharpDevelop. URL: http://www.icsharpcode.net/OpenSource/SD/ (Última visita: Septiembre, 2007)
-
Wikipedia, la enciclopedia libre. URL: http://es.wikipedia.org (Última visita: Septiembre, 2007)
Comentarios
> Abrir, crear, editar y salvar Shapefiles, Grids, TIN's y dbf's.
> Modificar la simbología del Shapefile.
> Etiquetas de Shapefiles en el mapa.
> Ejecutar consultas espaciales sobre los datos.
> Edición dinámica de datos espaciales.
> Exportar entre los formatos soportados (p.ej. TIN a Shapefile, Grid a TIN, Grid a Shapefile, Shapefile a GRID)
MapWindow está implementando la conexión a PostGIS en su software de escritorio, si se llega a implementar esa funcionalidad en el componente, tendríamos la posibilidad de generar aplicaciones muy completas.
Deberías pensar en exportar el GML a un formato Shapefile para poder trabajarlo con esta herramienta.
Hay aplicaciones para ello, por ejemplo, ogr2ogr que se ejecuta desde una terminal de comandos (www.gdal.org/ogr/ogr2ogr.html), o si prefieres una interface gráfica puedes probar con el OpenJump(openjump.org).
www.paolocorti.net/public/wordpress/index.php/category/tutorials/mapserver-tutorial-for-c-mapscript-asp-net/
Integra Mapserver, C# y PostGIS.
En el escritorio las herramientas de programación de C# con PostGIS están en fases iniciales, puedes mirar el proyecto Appomattox.
Si prefieres algo más capaz, podrías usar Java con GeoTools, aquí hay un ejemplo de implementación:
www.programarvba.com/geotools.htm
necesito montar un visor para instalar en diferentes máquinas. Tengo un proyecto en shapefile, y ya uso un software libre TATUK GIS VIEWER y va muy bien. El caso, que tras ver tus indicaciones, me gustaría montar el propio visor con 3 o 4 funciones básicas: cargar shapes, zoom.... , pero mi idea de programar es cortita.
¿me sería fácil hacerlo? ¿existe algún manual? GRACIAS DE ANTEMANO
te antemano te agradezco lo que me puedas ayudar.
atte,
jorge viloria
Declara esta variable como variable miembro de la clase:
Dim draw_hndl as Integer
Luego, agrega un botón para actualizar el control 2, es decir, el que funcionará como Preview Map.
En el evento click del botón agrega un código similar a este (modificalo según los nombres de tus controles):
Sub BotonPreview(By Val sender As Object, ByVal e As EventArgs)
'Crea el snapshot del control 1
dim imagen As MapWinGIS.Image
imagen = AxMap1.SnapShot(AxMap1.Extents)
imagen.Save("snapshot1",True)
axmap2.ClearDrawing (draw_hndl) 'Limpia los recuadros anteriores
'Dibuja el rectángulo sobre el control 2 tomando como base la extensión del control 1
if not (axmap2.NumLayers=0) then
dim MiExtent as new MapWinGIS.Extents
miextent=axmap1.Extents
draw_hndl = axMap2.NewDrawing(MapW inGIS.tkDrawReference List.dlSpatiallyRefe rencedList )
Dim xObj(5) As double
xobj(0) = miextent.xMin
xobj(1) = miextent.xMax
xobj(2) = miextent.xMax
xobj(3) = miextent.xMin
xobj(4) = miextent.xMin
Dim yObj(5) As double
yobj(0) = miextent.yMax
yobj(1) = miextent.yMax
yobj(2) = miextent.yMin
yobj(3) = miextent.yMin
yobj(4) = miextent.yMax
axmap2.DrawPolygon(xob j,yobj,5,System .Convert.ToUInt32(RGB(255,0,0)) ,False)
end if
axmap2.addlayer(imagen ,True)
End Sub
Y listo! Mira cómo luce:
Hay problemas que se deben solucionar, pero creo que es una buena base para que continues con tu visor.
Hasta pronto, espero que te sirva...
1. Asegúrate de tener la declaración de tu Mapa con la palabra WithEvents.
Citación:
Esta declaración la encuentras en el archivo MainForm.Designer.vb de la clase MainForm.vb
2. Agrega las siguientes líneas en la sección de declaración de variables miembro de la clase MainForm:
Citación:
3. Agrega la siguiente subrutina que se ejecutará cada vez que se actualice el mapa:
Citación:
Ten presente que mi control para el mapa se llama AxMap1 y que mi textbox se llama txtEscala.
Espero te sirva.
Muchas Gracias
download.tuxfamily.org/tuxgis/geoblogs/visorMapWindow/respuestas/Tabla.vb
Para usarlo, solo debes hacer una nueva forma en tu proyecto, agregarle un control GridView, un Botón y asociar el código a la forma, es decir, verifica el nombre de tu forma, y del botón (para el código que te envío la forma se llama frmTabla y el botón OpenToolStripMe nuItem).
El código lo descargué del wiki de Mapwindow, lo adapté a VB NET y lo edite un poco.
Lo que dices de los 8 carácteres se refiere a que los campos de una tabla dbf no pueden exceder ese número, es una restricción del formato dbf.
Espero te sirva. Por favor me cuentas cómo te va con los 100.000 registros!
Con respecto a los problemas que me mencionas te pregunto si has trabajado con bases de datos en Postgres/Postgis, tal vez puedas estructurar de otra manera tu información para que no tengas que consultar una tabla tan pesada. También creo que el dbf no es el formato apropiado para manejar esa cantidad de registros. Ten presente que postgis te permite importar un archivo Shapefile directamente a una base de datos geográfica, sin embargo, si trabajas con Postgis tendrías que explorar otros proyectos para desarrollar tu aplicación, pues MapWingis no permite la carga directa de datos que se encuentren en este formato.
Como dices, utilizando OLEDB se tiene la restricción de los 8 caracteres en el nombre del archivo. Hice una prueba con una tabla de 40.000 registros y la cargó en unos 10 segundos.
Has intentado con una conexión ODBC?, es una conexión a bases de datos más estándar que la OLEDB.
Espero te sirva.
download.tuxfamily.org/tuxgis/geoblogs/visorMapWindow/respuestas/Conexiones_OLEDB_ODBC.vb
Espero te sirva.
https://jdcastillor.diinoweb.com/files/Daniel/Datos.rar
me gustaría que si no es mucha molestia, lo revises y me des tu opinión. Quiero destacar nuevamente que en visual basic net 2003, funciona de maravilla con el oledb, pero en visual basic 2005, no funciona, manda error de que se ha hagotado el tiempo de espera (o algo así, no lo recuerdo muy bién). bueno pues espero puedas hacer una pruebita. Gracias por tu apoyo.
Te aconsejo que en la consulta SQL (que se define para acceder al archivo dbf con OLEDB o con ODBC) construyas un criterio para filtrar los datos, es decir, es mucho más eficiente que intentes mostrar grupos de registros: los 20.000 primeros datos, luego con la ayuda de un botón los siguientes 20.000 y así sucesivamente. La columna POBLACIONE de tu shapefile puede servirte para ello, ya que es un contador, quedaría algo así:
Citación:
Si necesitas hacer consultas sobre la tabla de datos, puedes utilizar la misma sentencia sql, por ejemplo:
Citación:
Espero te sirva.
Estoy haciendo una aplicación muy sencilla, tengo una capa de puntos y me gustaría poder seleccionar algunos valores en los campos de la tabla y que se mostrara el resultado en el mapa, es decir, que la capa se actualize y sólo muestre los valores que yo elija (por ejemplo de un año concreto, una especie determinada...)el problema es que me gustaría hacerlo de forma interactiva, seleccionando los campos desde el propio visor, de forma que lo puedan consultar usuarios sin conocimientos de SQL, con un desplegable o algo así, ¿sabes cómo podría hacerlo? Muchas gracias
http://geotux.tuxfamily.org/index.php?option=com_myblog&show=filtro-por-atributos-para-el-visor-de-shapefiles.html&Itemid=59
Espero te sirva, saludos.
Aprovecho para plantearte otra duda, aunque quizás no tenga relación con MapWindow, a lo mejor tú me puedes orientar, no sé dónde puedo mirarlo.
Me gustaría hacer una aplicación para construir gráficas a partir de una tabla dbf, agrupándolas por varios campos.
Por ejemplo, si en una tabla tengo un campo con los años, otro con regiones,otro con el número de incendios y en otro si son naturales o provocados, lo que querría es hacer una gráfica por ejemplo con el total de incendios (provocados y naturales)para un año determinado en cada región, o para una región a lo largo de los años.
Si pudieras orientarme sobre cómo hacerlo me harías un gran favor.
Muchas gracias de nuevo. Saludos
Estuve intentando utilizar el OCX en VFP 8.0 y obtengo un error de clase no registrada (supuestamente se registró exitosamente con el regsvr32) al tratar de utilizarlo.
Estuve buscando en la web otros comentarios y veo que mucha gente tiene el mismo problema con VPF (y no hay ninguna respuesta).
Tenés algún conocimiento de compatibilidad del OCX con VFP?
Slds y gracias
Está escrito en PHP y te permite armar gráficos estadísticos en la web a partir de tus datos, tendrías que programar para extraer los datos de tu dbf y pasarlos como parámetros a las funciones que grafican porcentajes, barras o tortas.
Espero te sirva, seguramente no es la única solución a tu problema.
www.mapwindow.org/download.php?show_details=2
El instalador te registra el componente evitando tener que hacerlo de forma manual.
Por lo demás, no te puedo colaborar mucho con VFP.
Saludos al Paraguay.
Llevo muy poco usando el control activex MapWinGIS, y me has surgido algunos problemas. Yo estoy utilizando c con visual studio 2005 express edition,y aunque la mayoria de los ejemplo que he encontrado son en visual basic he conseguido hacer lo basico, como abrir un shapefile y hacerle el zoom in, zoom out y demas. El problema me surge cuando quiero meterle etiquetas (con addlabel).
en un manual he encontrado esto:
Private Sub AddLabel()
Dim hndl As Integer, field As Integer, i As Integer
Dim sf As MapWinGIS.Shapefile
Dim text As String
Dim x As Double, y As Double
Dim col As UInt32
'Get handle for layer 0 which must contain a shapefile
hndl = Map1.get_LayerHandle (0)
'Get the shapefile contained in layer 0
sf = Map1.get_GetObject(h ndl)
'Set shapefile field to use when labeling layer as field 0
field = 0
'Set the color for the labels to be black
col = System.Convert.ToUInt32(RGB(0, 0, 0))
'Label every shape in the shapefile
For i = 0 To sf.NumShapes - 1
Page 62 of 194
'Set the text for this shape
text = sf.CellValue(field , i)
'Set the x and y coordinates for this label to be the min x and y coordinates of this shape
x = sf.Shape(i).Extents.xMin
y = sf.Shape(i).Extents.yMin
'Add the label to the layer by the shape centering the text
Map1.AddLabel(hndl, text, col, x, y, MapWinGIS.tkHJustificatio n.hjCenter)
Next
End Sub
Aqui me encuentro con dos problemas:
1-
sf = Map1.get_GetObject(h ndl) aqui cuando compilo me dice que no puede convertir System::Object^ a
MapWinGIS::Shap efile^
2-
x = sf.Shape(i).Extents.xMin
y = sf.Shape(i).Extents.yMin
aqui lo que me pasa es que parece como si sf.shape(i) no tuviera ningun metodo, es decir que no existe Extents dentro de sf.Shape(i).
Espero haberme explicado bien y muchas gracias de antemano
saludos
1. Debes hacer un cast explícito, cambia esa línea por esta:
Citación:
2. En C# no podemos usar la propiedad Shape, en su lugar usamos el método get_Shape().
En la siguiente página puedes ver el código en C# del método AddLabel, creo que lo han subido al sitio web hace un par de meses:
http://www.mapwindow.org/...AddLabel (www.mapwindow.org/wiki/index.php/MapWinGIS:AxMap_AddLabel)
espero una pronta respuesta!
quiero mostrar um poligono con las coordenadas de um campo de futbol de la universidad...donde las coordenadas geograficas son 22.0087, -47.5334, xMin, yMin puntos inciales 22.0094, -47.5341, xMax, yMin puntos finales... estoy utilizando la libreria MapWinGIS_TLB para Delhi. lo que quiero es coordinar los pixeles con estas coordenadas geodesicas...
hice este codigo:
http://downloads.tuxfamily.org/tuxgis/geoblogs/visorMapWindow/codigo_delphi.txt
Dibujar polígono:
http://www.mapwindow.org/wiki/index.php/MapWinGIS:AxMap_DrawPolygon
Proyección:
http://www.mapwindow.org/wiki/index.php/MapWinGIS:AxMap_PixelToProj
Saludos.
que nop encuentra error en loadlibreri no puede encontrar el modulo especificado espero me ayudes saludos
Si tienes el sistema operativo en español por lo general el archivo está en: “C:Archivos de programaArchivo s comunesMapWindo wâ€
Realmente no importa dónde esté el archivo, pero la dirección que escribas para el comando regsvr32 debe dirigirte al MapWinGIS.ocx
¿Has probado ya SharpMap?, es una librería que te permite acceder a datos espaciales en PostGIS. Tal vez sea lo que necesitas.
EXCEPCION
Se generó la excepción System.AccessViolation Exception en el programa:
Nuevo Comentario Powered by Azrul's Jom Comment Extensión Attempted to read or write protected memory. This is often an indication that other memory is corrupt.턀ଉŋČ꓈ଠ‡??
AddShapefile() - C:Mi_Visor_de_S hapefilesMi_Vis or_de_Shapefile sMainForm.vb:74,5
BtnAddLayerClic k() - C:Mi_Visor_de_S hapefilesMi_Vis or_de_Shapefile sMainForm.vb:55,4
OnClick()
OnClick()
OnMouseUp()
WmMouseUp()
WndProc()
WndProc()
WndProc()
OnMessage()
WndProc()
DebuggableCallb ack()
System.Windows.Forms.UnsafeNativeMet hods.IMsoComponentMa nager.FPushMessageLoo p()
RunMessageLoopI nner()
RunMessageLoop( )
Run()
OnRun()
DoApplicationMo del()
Run()
Main() - 17d14f5c-a337-4978-8281-53493378c1071.vb:81,13
y en el CODIGO DE FORMA:
axMap1.set_LayerName (lHandle, FileSys.GetFileName(pSf .Filename)) 'Fija el nombre del layer
Desde ya, muchas gracias. Carlos
Parece que el error que tienes se debe a que una región de tu memoria está dañada o algún programa (un antivirus por ejemplo) está causando el problema. Aquí puedes encontrar una mayor descripción: www.tech-archive.net/Archive/DotNet/microsoft.public.dotnet.general/2007-07/msg00621.html
ya sea un paso mal realizado o alguna aplicacion en mi pc que haga que cada vez que quiera abrir un archivo (shp) se cierre automaticamente la aplicacion recientemente creada?
mil gracias nuevamente por tu colaboracion
te dejo mi inquietud y ojala puedas ayudarme!
Attempted to read or write protected memory. This is often an indication that other memory is corrupt".
Espero te sirva.
es de tu conocimiento algun proyecto o alguna aplicacion que logre visualizar en disitintos layers sin necesidad de que este presente las tablas de datos de los archivos *.psh???
espero me entiendas y puedas ayudarme, desde ya muchas gracias
Para manejar la edición podrías usar tus datos en una base de datos espacial, con lo que tendrías tus datos en un repositorio centralizado controlando el acceso a los mismos, de esta forma, deberían tener permisos cuando quisieran editar en un programa SIG de escritorio como QGis. Para ello no podrías usar el MapWinGIS, tendrías que usar por ejemplo el componente SharpMap (en C#).
Saludos
http://www.mapwindow.org/wiki/index.php/MapWinGIS:SampleCode-VB_Net:ExportSelectedShapes
en la que muestra un componente (por llamarlo de un modo) SHRIMP, quisiera saber como puedo tener y agregar a mi proyecto este componente, ya que busque en la web y no encontre mucho sobre esto. Gracias por tu atención...
Por otra parte, si necesitas exportar registros a un shapefile puedes observar este código de nuestro amigo geomw (http://geotux.tuxfamily.org/index.php?option=com_comprofiler&task=userProfile&user=463&Itemid=70):
www.mapwindow.org/phorum/read.php?11,9665
Saludos.
Saludos.
'''Aca cambio el color del Layer
Dim MiLayer as Mapwingis.Shapefile
Dim uColor1 as UInteger
Handle = Legend1.Layers(Legend1.SelectLayer)
for i = 0 to MiLayer.NumShapes-1
AxMap1.set_ShapePointC olor(Handle, i, uColor1)
AxMap1.set_ShapeLineCo lor(Handle, i, uColor1)
AxMap1.set_ShapeFillCo lor(Handle, i, uColor1)
Next i
''' aca trato de hacer el cambio en el legend, pero no actualiza
Legend1.Layers.ItemByHandle(Ha ndle).Refresh
''' Tambien intente con
legend1.Refresh
Pense utilizar con ShapefileColorS cheme o ShapefileColorB reak, aun no lo pruebo
de antemano gracias por tu apoyo. Gracias
axMap1.set_ShapeLayerP ointColor(0,RGB (71,71,71))
De la misma forma puedes usar los métodos set_ShapeLayerF illColor, set_ShapeLayerL ineColor, etc. para modificar la simbología de la capa.
Después de llamar los métodos que te menciono, pones la siguiente línea para refrescar la leyenda:
axLegend.Refresh()
Con esto la simbología en la leyenda se actualiza después de establecerla en el mapa.
Para el ShapeFileColorS cheme puedes usar el código de la siguiente dirección, para asegurarte que la leyenda refleje la simbología en el mapa:
www.mapwindow.org/wiki/index.php/MapWinGIS:SampleCode-C_Sharp_Net:LegendSymbolizer
Saludos.
y ahora una pregunta, estoy usando es siguiente código para mostrar las coordenadas de mi mapa el 2 labels, de tal manera que cuando paseamos el curso por encima del mapa se muestren la coordenadas x, y enlas labels, pero no lo consigo. El códig que uso es el siguiente:
Private Sub AxMAp1_MouseMoveEvent (ByVal sender As Object, ByVal e As AxMapWinGIS._DMapEvents_Mou seMoveEvent ) Handles AxMap1.MouseMoveEvent
Me.lblX.Text = e.x.ToString
Me.lblY.Text = e.y.ToString
End Sub
Me puedes hechar una mano??? Sabes que estoy haciendo mal???? Como lo puedo conseguir???
Muchisimas gracias de antemano.
Un abrazo.
Iol. alias Ichungui.
Tal vez tan solo te haga falta enviar el evento MouseMove explícitamente , esto lo haces con la sentencia: axMap1.SendMouseMove = True
Debes ponerla justo cuando quieras comenzar a enviar el evento MouseDown, por ejemplo, si quieres hacerlo cuando inicie tu aplicación, puedes ubicarlo en el método New(), despues del llamado InitializeCompo nent().
Con Me.lblX.Text = e.x.ToString no mostrarás las coordenadas del mapa sino que mostraras las coordenadas del control en pixeles, prueba esto:
Dim px As Double, py As Double
axMap1.PixelToProj(e.x, e.y, px, py)
lblXY.Text = "X: " & Math.Round(px,2) & " Y: " & Math.Round(py,2)
Saludos.
la verdad es que me funciona perfectamente con el super empujón que me diste.
Estamos en contacto,
Un abrazo,
Ichugui.
tengo 4 capas .shp a las cuales les deseo hacer consulta por atributos, ahora bien deseo que mis usuario finales ,puedan colocar titulos personalizados de la vista efectuada con que visualizado ligero privativo o libre me recomienda odebo hacerlo con programacion o ruutina disponibles para estos. muchos les sabrias agradecer el apoyo al respecto
Saludos.
mi problema es que bueno estoy usando el mapwingis en una aplicacion .net y mi incoveniente es k debo cargar 12 imagenes 3 horizontal y 4 vertical formarian una matriz de 12 imagenes ... el problema es como cargo las 12 iamgenes de una sola osea sin cargar una por una al componnet mapgis si alguien me pudiera ayudar seria estupendo, tal vez con codigo, gracias de antemano... Saludos Alex Cruz
Una vez tengas las 12 imágenes como una sola (un único archivo), puedes cargarla a MapWinGIS a través del método addLayer (www.mapwindow.org/wiki/index.php/MapWinGIS:AxMap_AddLayer) de la clase Map y del método open (www.mapwindow.org/wiki/index.php/MapWinGIS:Image_Open) de la clase Image.
Espero te sirva.
Private Sub abrir_Imagen()
Dim pSf As MapWinGIS.Image, lHandle As Long
Dim NomArch1
NomArch1 = "C:Documents and SettingsAlexEsc ritorioImagenes probarhippiechi c.jpg"
If LCase(Microsoft .VisualBasic.Strings.Right(NomArch1, 3)) "shp" Then
pSf = New MapWinGIS.Image
If pSf.Open(NomArch1) = True Then
lHandle = MapMain.AddLayer(pSf, True)
End If
Else
MessageBox.Show("El archivo, " & NomArch1 & " no es un shapefile.")
End If
End Sub
Mi pregunta es como acoplo el codigo de
Private Sub GridsMerge()
Dim grids(2) As MapWinGIS.Grid
Dim grid1 As New MapWinGIS.Grid(), grid2 As New MapWinGIS.Grid(), grid3 As New MapWinGIS.Grid()
Dim utils As New MapWinGIS.Utils()
'Open the first grid
grid1.Open("C:grid1.asc")
'Open the second grid
grid2.Open("C:grid2.asc")
'Set the first grid in the array
grids(0) = grid1
'Set the second grid in the array
grids(1) = grid2
'Merge grid1 and grid2 by passing the array containing them to the merge function , putting the new array in grid3
grid3 = utils.GridMerge(grids , "C:merged_grid.asc")
End Sub
para mostrar en una solo imagen en la funcion descrita arriba (abrir_Imagen() ), seria exelente k me dieras un ejemplo con codigo gracias de antemano amigo, nos vemos.
No se usar mucho el componente MAPWINGIS es muy bueno para lo k kiero hacer, mi pregunta mas iba como agrupar podria ser direcciones ejemplo:sad:"C:imagen1") de las 64 iamgenes y cargarlas TODAS A LA VEZ en el mapwinGis ojala me deje a entender amigo porsiacaso te dejo mi mail alex_honores@ho tmail.com seria exelente que pudiera comunicarte mis avances y mis preguntas kien sabe por msn de todas maneras si asi no sea posible este medio es muy bueno gracias de antemano en serio gracias ... alex
Dim img As New MapWinGIS.Image
img.Open("D:imagen.jpg")
axMap1.AddLayer(img, True)
Y en esta página encuentras cómo iterar sobre los archivos de un directorio (Ver sección: Los ficheros de un directorio):
www.elguille.info/NET/dotnet/sistema_archivo.htm
Entonces puedes dejar todas tus imágenes en un directorio e iterar sobre cada imagen para cargarla a través de una función.
Dos arreglos con las coordenadas X y Y de los vértices del polígono.
El número de vértices del polígono.
Color del borde.
Color de relleno.
Private Sub picDisplay_Mous eMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles picDisplay.MouseMove
px = Math.Round(e.X)
py = Math.Round(e.Y)
txtCoordX.Text = px 'muestra coordenada en X
txtCoordY.Text = py 'muestra coordenada en Y
End Sub
pero mapwingis utiliza
Private Sub AxMap2_MouseMov e(ByVal sender As Object, ByVal e As AxMapWinGIS._DMapEvents_Mou seMoveEvent) Handles AxMap2.MouseMoveEvent
px = Math.Round(e.x)
py = Math.Round(e.y)
txtCoordX.Text = px
txtCoordY.Text = py
End Sub
pero no muestra ninguna coordenada cand dezplaxzo el mause amigo nose si me pudieras ayudar porfa
estos programas (http://geotux.tuxfamily.org/index.php?option=com_myblog&task=view&id=208&Itemid=59). No conozco VWD.
Grax
Para crear puntos a partir de coordenadas uedes darle un vistazo a: este ejemplo (www.mapwindow.org/phorum/read.php?11,6704).
Te recomiendo que no trabajes tus datos en excel, deberías usar aplicaciones más abiertas. Si puedes pasar tus datos de excel a un archivo txt o csv podrías usar código en .Net (seguro que lo encuentras en la red) para leer secuencialmente el archivo y extraer las coordenadas de cada punto.
Saludos.
ARRIBA EL OPEN SOURCE
CON ESTE CODIGO INTENTO AGREGARLO: AxMap1.AddLayer("C:Usershhgonzal ezDesktopPRUEBA COMPLETOLLLL.shp", True)
ESPERO ME PUEDAS AYUDAR SOY NUEVO EN EL MAP WINDOW, ME ACOSTUMBRE AL ARCGIS JEJE
AxMap1.CursorMode = MapWinGIS.tkCursorMode.cmNone
'Dim FileSys As New Scripting.FileSystemObjec tClass 'Se crea el objeto que manejará directorios y archivos del sistema
Dim pSf As MapWinGIS.Shapefile, lHandle As Long 'Se
pSf = New MapWinGIS.ShapefileClass
pSf.Open("capasDDV.shp")
lHandle = AxMap1.AddLayer(pSf, True)
Tambien necesito agregar un boton que me identifique cada ves que le doy clik a un punto, se puede esto?
Herramienta para identificar objetos espaciales (http://geotux.tuxfamily.org/index.php?option=com_myblog&show=herramienta-para-identificar-objetos-espaciales-en-el-visor-de-shapefiles-de-mapwingis.html&Itemid=59)
Si no, puedes buscar directamente la funcionalidad en el código de MapWindow (también está en .Net): http://svn.mapwindow.org/svnroot/MapWindow4Dev/MapWindow/
Citación:
saludos espero me puedas ayudar, gracias
En la documentación de la clase Point se observan los atributos: X, Y y Z. Así que el Z lo defines como lo haces con X y Y:
mPoint.Z = 100
Saludos.
En la siguiente dirección puedes encontrar un ejemplo de creación de un shape de líneas:
http://www.mapwindow.org/wiki/index.php/MapWinGIS:SampleCode-VB_Net:CreatePolyline
En el siguiente código encuentras cómo manejar los eventos MouseDown, MouseMove y MouseUp del control axMap.
http://www.mapwindow.org/wiki/index.php/MapWinGIS:SampleCode-VB_Net:MeasureTool
Saludos.
Saludos
Dim imgRuta As String
imgRuta = nombreArchivo
Dim miBitmap As Bitmap
miBitmap = New Bitmap(imgRuta, True)
Dim iAnchoImagen As Integer
Dim iAltoImagen As Integer
iAnchoImagen = miBitmap.Width
iAltoImagen = miBitmap.Height
pero al llegar a la parte de miBitmap = New Bitmap(imgRuta, True), me marca un error de que el parametro no es valido, me puedes ayudar con este problema por favor (por cierto estoy usando imagenes IMG).
Saludos
http://geotux.tuxfamily.org/index.php?option=com_myblog&task=view&show=Construcción de un visor de Shapefiles con herramientas libres&id=28&Itemid=59#pc_124
Busca por acá: http://www.mapwindow.org/wiki/index.php/MapWinGIS:Image
Bitmap = New System.Drawing.Bitmap(nombreAr chivo, True)
Segun por lo que entiendo me pide que le escriba un parametro faltante, pero no se cual es y ya me quebre la cabeza buscando el problema ¿alguien sabe por que ese conficto? se los agradecería mucho si me lo hacen saber.
Saludos.
Test: Shapefile is corrupted
¿como puedo arreglar este error?
Saludos.
- La informacion que manejo puede tener puntos con las mismas coordenadas por lo tanto
a la hora de identificar los puntos con la herramienta que creaste para identificar
la cual tome como ejemplo no me muestra la informacion de esos puntos se que solo se
puede obtener la info de uno solo, hay alguna manera de poder obtener la info de los dos
puntos aunque este uno encima del otro?
-Poder manipular los layers de la manera que si tengo dos capas en el axmap por ejemplo:
Puntos_1
Puntos_2
y cargue primero Puntos_1 y luego Puntos_2 pueda poner el layer Puntos_2 abajo del layer Puntos_1
- Poner labels a los puntos de acuerdo a su valor en la tabla de atributos de un campo en especial
Seria de gran ayuda el poder darme algunos consejos para poder solucionar estos problemas
Con respecto a las preguntas:
1. Si observas la clase Identificar.vb (que encuentras en este blog (http://geotux.tuxfamily.org/index.php?option=com_myblog&show=herramienta-para-identificar-objetos-espaciales-en-el-visor-de-shapefiles-de-mapwingis.html&Itemid=59)), en la función ValidarIntersec cion se está tratando el caso de más de un elemento espacial seleccionado. Como ves, cuando eso ocurre, la clase manda un mensaje de error. Allí tendrías que modificar el código para tratar a tu gusto este caso, seguramente ayudado de un ciclo for.
2. Para poder manipular el orden de las capas puedes emplear el control Legend que provee la librería MapWinInterface s. Esta librería la encuentras por ejemplo en el directorio de instalación de MapWindow GIS. La debes agregar al proyecto para poder utilizar la leyenda. Si no estoy mal eso te permite modificar el orden de las capas. Puedes mirar unos mensajes previos en este blog pues ya se ha hablado del tema.
3. Lo de las etiquetas lo encuentras en el artículo de Daniel P. Ames que menciono en las referencias de este blog: http://www.MapWindow.org/doc/UsingMapWinGIS.pdf
Saludos.
Estoy muy interesado en este visor de shp y ya he conseguido crearme uno siguiendo tu magistral tutorial. Tan solo me gustaria que contaras como generar el .exe.
Muchas gracias,
D.
directorio_apli cación/bin/Debug/Mi_Visor_de_Sha pefiles.exe
Si te refieres a un instalador para tu visor, en un blog posterior (http://geotux.tuxfamily.org/index.php?option=com_myblog&show=creaciF3n-de-un-archivo-instalador-para-el-visor-de-shapefiles-de-mapwingis.html&Itemid=59) a este escribí acerca del tema.
No se si agradecerte por decirme monstruo o hacerte el reclamo
Saludos.
Lo de Monstruo va por el miedo que me entra al ver lo mucho que controlas.. Anyway espero no haberte molestado.
Estoy enredado con la herramienta identify.. Despues de cargarme los 3 archivos de la clase identificar en mi proyecto y construir el boton identify.
Al compilar Me da estos errores;
El tipo 'frmIdentificar' no está definido. (BC30002)
No se ha declarado el nombre 'frmIdentificar'.
No llego a entender como se genera La Interfaz de la identificación de objetos espaciales.
Gracias por todo.
D.
Saludos.
www.mapwindow.org/phorum/read.php?3,14124
En todo caso si te ayuda a hacer algunas transformacione s de coordenadas valiéndose de proj4: http://www.mapwindow.org/wiki/index.php/MapWinGeoProc:SpatialReference_ProjectShapefile
Saludos.
Gracias por todo.
Salud,
D.
En mi evento on_load cargo un .shp y le asigno el nombre que quiero que aparezca en mi listview. El codigo es el siguiente.
Dim pSf1 As New MapWinGIS.Shapefile
Dim capa1 As string
pSf1.Open("C:ESRIESRIDATAW ORLDcountry.shp")
capa1 = axmap1.AddLayer(pSf1, True)
capa1 ="COUNTRY"
item=listview1.Items.Add(capa1)
item.Checked=true Se chequea el nuevo .shp
i = lHandle
item.Tag = i
a = (i 1)&"º"
Item.SubItems.Add(a)
Como puedo cargar los nombres que aparecen en este listview, que no tienen porque ser el nombre de los del archivo .shp, en mi Interfaz de Identificación de objetos?
Gracias,
D.
* Cuando cargues una capa asigna el nombre de la misma con el método set_LayerKey del objeto mapa. Mira esto: http://www.mapwindow.org/wiki/index.php/MapWinGIS:AxMap_LayerKey
* Cuando estés leyendo los nombres para agregar a la ventana de indentificar objetos lees el nombre de la capa con el método get_LayerKey del objeto mapa.
Saludos.
hace unos dias encontre un ejemplo en vb6 sobre el uso de mapwingis, en donde seleccionas un pais del mapa, lo pinta en color amarillo con el siguiente codigo
Map1.ShapeLayerFillC olor(handle) = RGB(254, 233, 188)
Map1.ShapeLayerLineC olor(handle) = RGB(34, 43, 74)
quisiera poder hacer que en esa selección del pais me mandara a traer datos a un dbf, para posteriormente mostrarlo en una ventana a modo de información del pais (area, nombre, coordenadas, etc.)
¿se puede hacer esto?
me podrias ayudar
Muchas Gracias
En todo caso está en .NET
Saludos.
En la página de bostongis (www.bostongis.com/?content_name=postgis_sharpmap_tut01#40) tienes un ejemplo claro.
En todo caso, te recomendaría que revisaras la comparación de clientes web para SIG (http://geotux.tuxfamily.org/index.php?option=com_myblog&task=view&id=239&Itemid=59), en donde encontrarás varios proyectos que te dan herramientas listas para usar, accediendo a tus datos con base en servicios web.
Saludos.
abrirImagen.Title = "Abrir imagen raster."
abrirImagen.FileName = ""
abrirImagen.Filter = "Archivo Raster (*.img)|*.img|Archivos Jpeg (*.jpg)|*.jpg|Archivos Tiff (*.tif)|*.tiff|Todos los archivos (*.*)|*.*"
abrirImagen.ShowHelp = False
abrirImagen.ShowReadOnly = False
If abrirImagen.ShowDialog = Forms.DialogResult.OK Then
rutaImgRaster = abrirImagen.FileName
imagenRaster.Open(rutaImgRas ter)
imagenRaster.UseTransparency Color = True
AxMap1.AddLayer(imagen Raster, True)
contLayer = contLayer 1
cboCerrar.Items.Add(AxMap1.get_LayerName(c ontLayer).ToString())
End If
y aqui esta otra, es para las shapes:
abrirImagen.Title = "Abrir archivo vectorial."
abrirImagen.FileName = ""
abrirImagen.Filter = "Archivo vectorial (*.shp)|*.shp"
abrirImagen.ShowHelp = False
abrirImagen.ShowReadOnly = False
If abrirImagen.ShowDialog() = Forms.DialogResult.OK Then
rutaSHP = abrirImagen.FileName
shapeFile.Open(rutaSHP)
AxMap1.AddLayer(shapeF ile, True)
Me.chkbInfo.Enabled = True
contLayer = contLayer 1
cboCerrar.Items.Add(AxMap1.get_LayerName(c ontLayer).ToString())
End If
Por tu atencion mil gracias.
For i = 0 To mwMapa.NumLayers - 1
cboCapas.Items.Add ( mwMapa.get_layerName( i ) )
Next
Saludos
Quiero representar con colores un nº de polígonos de un layer.
El problema es que cuando estoy pintando más del 16000, me da un error de memoria.
Cuando voy haciendo el NewDrawing(...) no me da problemas. Parece que es al intentar dibujarlos en el AxMap1
Cuando hago 8000 por ejemplo, no me da problemas.
¿Qué puedo hacer?
Gracias,
Borja
La primera prueba la hice con 8203 registros y terminó coloreándome los que necesitó.
Cuando hago con más registros y llega a 11000 aprox. el Me.text ya no se refresca con el nuevo numero, sino que cada uno se escribe sobre el siguiente quedando al final una mancha blanca.
El código saca de una tabla los shapeindex de una capa que me interesan
y los voy identificando sus puntos para luego colorearlos:
vlRs = DB.OpenRecordset("Select SHPINDEX from TABLA") 'Identifica cada polígono
Do While Not vlRs.EOF
Me.Text = "Shape " & vlRs.Fields("SHPINDEX").value
'Obtengo los puntos
Dim Puntos() As Double = {}
Shape = shpfile.Shape(vlRs.Fields("SHPINDEX").value)
For vlij As Integer = 0 To Shape.NumParts - 1
If vlij = 0 Then
vliPointInicio = Shape.Part(vlij) 'que guarda el primer punto de la parte
vliPointFinal = Shape.numPoints - 1
Else
vliPointFinal = Shape.Part(vlij) - 1
End If
Next vlij
'Creo el array de puntos para luego colorear el interior (el polígono)
Dim Punto As MapWinGIS.Point
Dim PuntoScreen As New MapWinGIS.Point
For vlij As Integer = vliPointInicio To vliPointFinal
ReDim Preserve Puntos(UBound(P untos) 1)
Punto = Shape.Point(vlij)
AxMap1.ProjToPixel(Pun to.x, Punto.y, PuntoScreen.x, PuntoScreen.y)
Puntos(UBound(P untos)) = PuntoScreen.x
ReDim Preserve Puntos(UBound(P untos) 1)
Puntos(UBound(P untos)) = PuntoScreen.y
Next vlij
PuntoScreen = Nothing
Dim draw_hndl As Long, nPuntos As Long
Dim x() As Double = {}, y() As Double = {}
nPuntos = (UBound(Coord) 1) 2
'Creo un polígono de nPuntos formados por pares de coordenadas x,y
For vlii As Integer = 0 To UBound(Coord) Step 2
ReDim Preserve x(vlii 2)
ReDim Preserve y(vlii 2)
x(vlii 2) = Coord(vlii)
y(vlii 2) = Coord(vlii 1)
Next vlii
'Create new drawing layer on map
draw_hndl = AxMap1.NewDrawing(MapW inGIS.tkDrawReference List.dlScreenReferen cedList)
AxMap1.DrawPolygon(x, y, nPuntos, plColor, True)
vlRs.MoveNext()
Loop
Saludos.
ME PODRIAS AYUDAR, ESTOY CREANDO UN VISOR DE SHAPE YA ME FUNCIONA NADAMAS QUIERO ANEXARLE
LA ORTOFOTO (MAPA) ABAJO DEL SHAPE...NO SE SI SE PUEDA....SOY NUEVO EN ESTO
SALUDOS
RAFAEL
Dim img As New MapWinGIS.Image
img.Open("D:imagen.jpg")
axMap1.AddLayer(img, True)
Dependiendo del formato de la imagen podrías necesitar MapWinGIS.Grid en lugar de MapWinGIS.Image
SALUDOS
Tengo un mapa de un municipio. Una capa representa todos los edificios (.shp)
¿Cómo puedo colorear cada uno de ellos en base a una característica ?
El ejemplo que te mandé a finales del año pasado trataba de hacer eso pero es un proceso lento y además se bloquea si hay demasiados datos.
Ejemplo tonto: rojo para los edificios de ladrillo, marrón para edificios de piedra, verde para los de madera, ... es decir, que voy a colorear miles de casas con colores diferentes partiendo de un mismo .shp tras haber consultado una base de datos paralela que dispone de la referencia catastral y que puedo relacionar con el .dbf del .shp cargado, identificando así cada edificio
tengo una duda y espero me puedas ayudar...
Tengo el mapa de México con su división politica, es decir, pues tengo el mapa dividido en estados, como puedo hacer para colorear cada uno de ellos cuando de click sobre él.
Es necesario pintar nuevos poligonos??
Espero me puedas ayudar.
De antemano gracias
Una vez tengas ese "Shape" debes usar el método set_ShapeFillCo lor (www.mapwindow.org/wiki/index.php/MapWinGIS:AxMap_ShapeFillColor) del objeto mapa, indicándole además el manejador (handle) del shapefile y el color que deseas aplicar.
Espero te sirva, saludos.
Ya intente implementar tu herramienta identify, descargue el archivo.zip y lo agregue a mi proyecto, segui los pasos que vienen en el blog pero me marca 3 errores, al crear la variable global ( Private mwPoint As New MapWinGIS.PointClass)y al crear una variable del tipo PointClass (Dim pPuntoPantalla As New MapWinGIS.PointClass)
Error: Reference to class 'PointClass' is not allowed when its assembly is linked using No-PIA mode.
Interop type 'PointClass' cannot be embedded. Use the applicable interface instead
Espero me puedas ayudar, no se si me falta algo.
Hice lo que me dijiste y ya quedo, ya puedo pintar los diferentes estados, muchas gracias por tu ayuda...
Una ultima duda, para despintarlos, existe un método para hacerlo? o es necesario volverlo a pintar con la herramienta set_ShapeFillCo lor???
Muchas gracias por tu ayuda
Tengo un problema a la hora de colorear los shapes seleccionados, usé tu herramienta Identify y en base al shape seleccionado lo coloreo con el metodo shapeFillColor, el problema ocurre cuando agregó más de una capa, ya que la herramienta Identify si me reconoce la información de ambas capas pero al intentar pintar el shape seleccionado, no lo pinta.
Espero me puedas ayudar.
Me gustaria saber si me puedes auxiliar, intento imprimir mi mapa una vez que he agregado varias capas, hay una libreria que me permita hacerlo?
He leido un poco acerca de MapWinGis.Image, existe alguna forma de convertirlo a tipo graphics??
Saludos y de antemano muchas gracias.
Para la impresión tal vez te sirva leer lo siguiente:
http://geotux.tuxfamily.org/index.php?option=com_fireboard&Itemid=83&func=view&catid=3&id=413#413
He logrado mandar a imprimir el elemento AxMap, sin embargo me gustaría ponerle titulo e insertarle algunos elementos al momento de imprimirlo, tales como la rosa de los vientos, o la simbología.
Existe alguna manera de insertar este tipo de elementos dentro del AxMap? intenté insertar un AddLabel al inicio del AxMap pero no se me hace unna forma eficiente, espero me puedas ayudar.
De antemano muchas gracias.
Muchas gracias por atender nuestras dudas, tengo una pregunta...
Una vez anexado el layer usando las líneas:
Dim img As New MapWinGIS.Image
img.Open("D:imagen.jpg")
axMap1.AddLayer(img, True)
¿mapwingis puede gardar la imagen y el(los) shapefile(s) como un solo archivo?
De antemano muchas gracias
Jerry.
En todo caso, siempre mira el código de MapWindow, te puede dar una idea sobre cómo lo hacen y de allí puedes copiar el código que necesites.
Saludos.
Click aquí (http://geotux.tuxfamily.org/index.php?option=com_myblog&show=construccin002d0064e-un-visor-de-shapefiles-con-herramientas-libres-qgis-python-y-qt.html&Itemid=59)
Saludos
Estoy desarrollando un visualizador utilizando Visual Studio.Net 2008 (C#) y el MapWinGIS 4.7 en una computadora con Windows 7 a 64 bits.
Resulta ser que no puedo visualizar en mi proyecto el control del legend para poder controlar la visualización de las capas en el AxMap.
Ya agregué la librería MapWinInterface s.dll ubicada en la carpeta de MapWindow, agregué la referencia al proyecto y declaré e inicializé el control desde código:
private LegendControl.Legend leyenda; (esta instrucción la pongo en la sección de declaraciones de la forma principal)
leyenda.Map = (MapWinGIS.Map)axMap1.GetOcx(); (esta instrucción la pongo en el constructor de la forma principal)
Ya he compilado el proyecto y no marca errores, pero sigue sin agregarme el control del legend al toolbox, y cuando intento ejecutarlo me marca un error en la inicialización del legend (segunda instrucción), el error dice asi: "Referencia a objeto no establecida como instancia de un objeto". Supongo que esto lo marca porque fisicamente no tengo el control del legend.
Por favor.. necesito saber qué estoy haciendo mal o qué me hace falta para poder agregar dicho control al proyecto.
De antemano muchas gracias por su ayuda
Estoy trabajando con visual Basic .Net 2008, pero no he conseguido agregar el componente AxMap. Cualquier ayuda será bienvenida.
Gracias
mi profesor de programación de interfaces nos coloco , la elaboración de un visor de shapefiles que estuviera programado en visual studio 2005 con la ayuda del plugging de mapwindows; el visor debe contar con las caracteristicas basicas de control como: adicionar capa,subir o bajar capa, eliminar capa o capas, zoom in , zoom out, zoom extend,ver la tabla de atributos de una capa seleccionada, propiedades de una capa seleccionada que se puedan editar como color etc.
Si alguien me pudiera suministrar el código en visual studio 2005, o parte de él para guiarme me seria de gran utilidad...agradezco sus prontas respuestas o sugerencias
La edición dinámica de datos geoespaciales se refiere a poder editar para cambiar los datos de los atributos del visor de sahpefiles? Puedo hacerlo mediante filtro por atributos también? Desde ya muchas gracias!
seguro que puedes editar tus datos alfanuméricos con MapWinGIS pero para qué vas a usar el filtro en ese caso? Tal vez no he comprendido bien tu pregunta.
Gracias por tus comentarios.
Saludos,
Tuxman
Realmente con todo la expirementación ya logré desplegar los datos de la tabla de atributos, y realmente solo habilito como lectura en verdadero si solo es consulta, o falso si voy a cambiar algun dato. en realidad loq ue se pretende es localizar uno o mas registros en especial, para actualizarle la información, obviamente necesito un filtro, con el cuál no hay problema, sólo quería saber si se podía realizar la edición de los datos para cambiarlos, creo que por lo que he visto, si se puede. De todas formas muchas gracias, esto me ha ayudado mucho. Voy a estar molestando por aquí. Ah! se me olvidaba... hay alguna manera de actualizar mi previww map despues de hacer un zoom in, zoom out, desplazamiento, y no me refiero a despúes de picar el botón para estos eventos, eso lo puedo meter al click del mismo, sino al usar en si, el modo de cursor después de desplazarme o hacer zoom..? para poder previsualizar mi ubicación en el mapa, necsito actualizar el segundo control map, sin embargo no encuentro donde colocar la actualizacion del preview cada vez que pasa un evento de estos... gracias neuvamente!!
Estoy realizando una aplicación a partir de mapwingis y quisiera saber de qué manera puedo configurar una herramienta como la denominada "Measure" de Mapwindow. He probado a dibujar polilíneas y hacer los cálculos con las coordenadas del mouse en cada "clic", pero no soy capaz de conseguir lo que pretendo. Si pudieras facilitarme información de como hacer esto... Estoy realizando la aplicación con lenguaje visualbasic.net.
Gracias
Mario
gracias por tus comentarios. Hace ya un par de años que no trabajo con MapWinGIS, sin embargo, el mismo consejo sigue aplicando. La primera fuente para resolver tu problema (cómo desarrollo en MapWinGIS algo que existe en MapWindow?) es por supuesto mirar el código de MapWindow y ver cómo lo hacen allí (hay que aprovechar las ventajas del software libre
Por otro lado, tu intento podría también funcionar, no me quedó claro qué es lo que falla cuando tratas de calcular la distancia de la polilínea dibujada.
Saludos,
Tuxman
veo que no sigues con mapwingis. Te consulto si conoces otra herramienta que permita mostrar shp en una aplicación de escritorio. El desarrollo es en .net
La condicion es que corra en win7 de 64 bits!
muchas gracias
si no te sirve MapWinGIS, te recomiendo el proyecto DotSpatial [1] y el mismo SharpMap [2]. No tengo idea si corren en esa plataforma, pero puedes leer su documentación.
Saludos,
Tuxman
-------------
[1] http://dotspatial.codeplex.com/
[2] http://sharpmap.codeplex.com/
Estoy realizando un proyecto sobre redes de alcantarillado, consiste en busqueda de zonas, calles, caracteristicas de la red,etc...Quisiera saber que sugerencia me puedes dar para poder realizar mi proyecto.Te agradezco de antemano por tu ayuda.
demasiado amplio. Es un proyecto Web? Desktop? para dispositivos móviles? Usarás estándares? etc. Concreta tu pregunta.
Primero que todo agradezco los aportes que has hecho, hay mucha información, la verdad trate de leer el foro con mucha cautela pero no encontré lo siguiente: tengo un CheckedListBox1 en el cual veo el nombre de los shapes cargados en mi tarea debo desplazar hacia arriba o abajo los shapes, este cambio debe hacerse en el CheckedListBox1 y en el visor, este el codigo que llevo:***en el siguiente comentario***
en el CheckedListBox1 ya tengo solucionado el problema de visualizacion pero en el visor no, estoy usando movelayerup() pero creo q se debe inicializar, pero por mas que pienso no se como ya intente mil cosas.
Espero me puedas ayudar Gracias.
Dim H As String
Dim G As String
Dim B As String
Dim S As String
If CheckedListBox1.SelectedIndex = 0 Then
MsgBox("No se Puede Subir Capa", MsgBoxStyle.Exclamation, "Error")
Else
AxMap1.MoveLayerUp(Che ckedListBox1.SelectedIndex)
A = CheckedListBox1.SelectedIndex
H = CheckedListBox1.Items(A)
G = CheckedListBox1.Items(A - 1)
CheckedListBox1.Items(A - 1) = H
CheckedListBox1.Items(A) = G
CheckedListBox1.SelectedIndex = (A - 1)
B = CheckedListBox1.SelectedIndex
S = AxMap1.get_LayerHandle (B)
AxMap1.MoveLayerUp(S)
End If
por lo que veo en la documentación [1], debes pasarle la posición de la capa que quieres mover a la función MoveLayerUp. Como veo que la posición la tienes en tu variable B, sería algo así:
-----
AxMap1.MoveLayerUp(B)
----
Si llegases a necesitar obtener la posición de una capa teniendo su manejador (handler), lo podrías hacer así:
-----
Dim pos As Integer
pos = AxMap1.get_LayerPositi on(S)
-----
Saludos,
Tuxman
----------------
[1] http://www.mapwindow.org/documentation/mapwingis4.8/class_ax_map.html
Primero que todo mil gracias por la ayuda anterior, por favor me puedes colaborar, genere una funcion que me genera unas polilineas, sin embargo quiero saber la cuanto mide cada linea me puedes echar una mano. mil gracias.
Por otra parte, cuando preguntes asegúrate de intentar algo antes, una simple búsqueda en Internet te arrojará esta referencia:
http://www.mapwindow.org/documentation/mapwingis4.8/class_shape.html#abb54b79c8d98f768b226c19591871f0a
en donde te dan hasta un ejemplo.
Saludos.
Solicito de tu ayuda nuevamente, estuve revisando el link que me enviaste pero lastimosamente no entendí, tengo un código que me genera lineas y cada punto es una coordenada x,y. se que para calcular las distancias cada vez que hago clic debo utilizar esta formula d = √ (x₂ - x₁)² + (y₂ - y₁)², pero no se como guardar las coordenadas cada vez que hago clic. este es mi codigo espero me puedas ayudar
PrivateSubSelec ciónConMouseToo lStripMenuItem_ Click(ByValsend erAsSystem.Object,ByValeAs System.EventArgs)Handl esSelecciónConM ouseToo lStripMenuItem.Click
Me.AxMap1.CursorMode=MapWinGIS.tkCursorMode.cmSelection
AxMap1.SendSelectBoxFi nal=True'False
AxMap1.SendSelectBoxDr ag=False'True
EndSub
Try
DimaAsDouble,bA sDouble,cAsDoub le,dAsDouble
Dimpartes()AsSt ring
partes=Split(puntos(0) ,"|")
a=CDbl(partes(0))
b=CDbl(partes(1))
ForiAsInteger=1Tonump-1
partes=Split(puntos(i) ,"|")
c=CDbl(partes(0))
d=CDbl(partes(1))
Dimdraw_hndlAsI nteger=_
AxMap1.NewDrawing(MapW inGIS.tkDrawReference List.dlScreenReferen cedList)
AxMap1.DrawLine(a,b,c, d,0,System.Convert.ToUInt32(RGB(199,55,0)))
a=c
b=d
Next
CatchexAsExcept ion
MsgBox(ex.ToString)
EndTry
EndSub
PrivateSubAxMap 1_DblClick(ByVal senderAsObject, ByValeAsSystem.EventArgs)Handl esAxMap1.DblClick
dibujalin()
MsgBox("Serealizaronuna slineascon"&nump&"verticesyunalon g.de?")
Me.StatusStrip1.Items.Clear()
Me.StatusStrip1.Items.Add("longitudde?")
nump=0
Me.AxMap1.ClearDrawings()
Me.AxMap1.Redraw()
Me.AxMap1.SendMouseDown=False
EndSub
DimaAsString=e.x&"|"&e.y
DimbAsDouble=e.x
DimcAsDouble=e.y
dibujalin()
EndSub
Mil gracias.
Más arriba, en los comentarios de este post ya se ha hablado acerca de cómo obtener coordenadas en metros y no en pixeles.
Por la ayuda.
ESPERO PUEDAN AYUDARME ES DE MUCHA URGENCIA
GRACIAS POR SU ATENCION
----
[1] http://geotux.tuxfamily.org/index.php/es/geo-noticias/item/28-construccion-de-un-visor-de-shapefiles-con-herramientas-libres#comment-76
yo trabajo en arcgis desktop, pero no tengo licencia del server ni se manejarlo.
Mira esta página, por ejemplo: http://docs.geoserver.org/stable/en/user/gettingstarted/shapefile-quickstart/index.html
También puedes encontrar aplicaciones en la web que te permiten subir tu shapefile y acceder a tu mapa, pero para serte franco en este momento no recuerdo alguna (no las uso!).
Saludos.
no creo que haya mucha incopatibilidad . En todo caso, han cambiado cosas en la librería MapWinGIS, pero no es nada que no puedas solucionar con una búsqueda en su listado de funciones.
Yo te animaría a que lo intentaras y si llegas a encontrar obstáculos considerables, los compartieras con esta comunidad para que quede documentado y le sirva a futuros usuarios.
Saludos.
'BotonPreview' ya se declaró como 'Private Dim botonPreview As System.Windows.Forms.Button' en class. (BC30260)
aca te dejo el codigo como lo implemente
Public Partial Class MainForm 'Clase MainForm
Public Sub New()
' The Me.InitializeCompo nent call is required for Windows Forms designer support.
Me.InitializeCompo nent()
'
' TODO : Add constructor code after InitializeCompo nents
'
End Sub
Dim draw_hndl as Integer
Sub BotonPreview(By Val sender As Object, ByVal e As EventArgs)
dim imagen As MapWinGIS.Image
imagen = AxMap1.SnapShot(AxMap1.Extents)
imagen.Save("snapshot1",True)
axmap2.ClearDrawing (draw_hndl)
if not (axmap2.NumLayers=0) then
dim MiExtent as new MapWinGIS.Extents
miextent=axmap1.Extents
draw_hndl = axMap2.NewDrawing(MapW inGIS.tkDrawReference List.dlSpatiallyRefe rencedList )
xobj(0) = miextent.xMin
xobj(1) = miextent.xMax
xobj(2) = miextent.xMax
xobj(3) = miextent.xMin
xobj(4) = miextent.xMin
Dim yObj(5) As double
yobj(0) = miextent.yMax
yobj(1) = miextent.yMax
yobj(2) = miextent.yMin
yobj(3) = miextent.yMin
yobj(4) = miextent.yMax
axmap2.DrawPolygon(xob j,yobj,5,System .Convert.ToUInt32(RGB(255,0,0)) ,False)
end if
axmap2.addlayer(imagen ,True)
End Sub
agradeceria si me oudieras ayudar, el botonPreview lo cree normalmente como se crearon los otros del visor
Estoy haciendo un medidor de distancia para un visor hecho sobre el MapWindowGis con VB.NET y los resultados no son satisfactorios. Este es el código (lo adjunto en privado):
Si alguien me aporta ayuda se lo agradezco infinitamente.
Agrosaludos
Manolo from Navezuelas
Dim KmX, KmY, Dist As Double
Mapa.PixelToProj(e.x, e.y, Lon, Lat)
If Midiendo = True Then
If PuntoInicial Is Nothing Then Exit Sub
KmY = Math.Abs(Lat - PuntoInicial.y) * 111.12
KmX = Math.Abs(Lon - PuntoInicial.x) * 111.12 * Math.Cos(Lat * Math.PI / 180)
Dist = Math.Sqrt(KmX ^ 2 + KmY ^ 2)
TextDist.Text = "Distancia Medida: " & Math.Round(Dist, 1) & " km."
If EstoyMidiendo Then ControlPaint.DrawReversibleL ine(MideIni, MideFin, Color.FromArgb(245, 230, 200))
End If
MideFin = Control.MousePosition ControlPaint.DrawReversibleL ine(MideIni, MideFin, Color.FromArgb(245, 230, 200))
EstoyMidiendo = True
End If
End Sub
Dim shape As New MapWinGIS.Shape()
Dim point(Puntospol X.Count) As MapWinGIS.Point
Dim partindex As Integer, pointindex As Integer, i As Integer,Dim success As Boolean,Dim sf As New MapWinGIS.Shapefile() ruta = ruta + "\shp\Parcela.shp"
sf.Open(ruta), sf.StartEditingSha pes(True)
For i = 0 To PuntospolX.Count
point(i) = New MapWinGIS.Point() Next 'Create a new polygon shape object
success = shape.Create(MapWinGI S.ShpfileType.SHP_POLYGON
For i = 0 To PuntospolX.Count - 1
point(i).x = PuntospolX.Item(i)
point(i).y = PuntospolY.Item(i)
Next
success = shape.InsertPart(0, partindex)
partindex = partindex + 1
For i = 0 To PuntospolX.Count
success = shape.InsertPoint(poi nt(i), pointindex)
pointindex = pointindex + 1
Next
sf.EditInsertShape (shape, 0)
sf.StopEditingShap es()
End Sub
Al realizar este ejercicio me sale el siguiente error a la hora de hacer click en el componente "AxMap" y luego hacer click en la ventana de diseño: "system.runtime.interopservices .comexception 0x80040154"
Por favor me podrian dar una solucion?.
Gracias.
Ya tenemos la visualización del Shape con varios polígonos dentro del mismo, lo que quisiera saber es ¿como hacer que al darle clic a un polígono cambie de color? (para saber cual fue el seleccionado).
Espero y me puedas ayudar, saludos...
Por otro lado, observa que este artículo es un poco antigüo, pueden fallar varias cosas ya que las nuevas versiones de MapWinGIS introducen cambios en la API. Más aún, no uso Windows en la actualidad, te recomendaría usar una API como PyQGIS, soportada en varias plataformas y con relativo buen soporte por parte de los desarrolladores de QGIS. Eso si, esto dependería de los objetivos de tu proyecto.
Saludos,
Tuxman
---
[1] http://www.mapwindow.org/phorum/read.php?2,17651,printview,page=1
[2] http://www.mapwindow.org/phorum/read.php?3,22779
Gracias por tu ayuda #Tuxman los leeré y en cuanto salgan mas dudas te consulto, un saludo y gracias nuevamente
Como podria solucionarlo para ir visualizando todas las posiciones q recibo y que el zoom se aplique ha todas las capas ?
Muchas gracias
Mejor si muestras código relevante que permita ver cómo dibujas los puntos... De lo contrario, por más que alguien quiera no te podrá ayudar.
Dim latdouble As Double
Dim longdouble As Double
latdouble = CDbl(latitud)
longdouble = CDbl(longitud)
Mapa.ProjToPixel(lon gdouble, latdouble, longi, lati)
Mapa.CursorMode = MapWinGIS.tkCursorMode.cmNone
draw_hndl = Mapa.NewDrawing(MapW inGIS.tkDrawReference List.dlScreenReferen cedList)
Mapa.DrawCircle(long i, lati, 5, RGB(32, 26, 228), True) 'Pintar un circulon una posición concreta del mapa
2a...
Dim capagps As New MapWinGIS.Shapefile()
Dim nomcapa As String
Dim unacapa2 As Integer
nomcapa = "Posicions GPS"
capagps = New MapWinGIS.Shapefile
capagps.CreateNew("Posicions GPS", MapWinGIS.ShpfileType.SHP_POINT)
capagps.Open(nomcapa) 'Obrim la capa seleccionada com a nova capa
unacapa2 = Llegenda.Layers.Add(capagps, True) 'Afegim la capa a la llegenda
Llegenda.Map.LayerName(unaca pa2) = System.IO.Path.GetFileNameWith outExtension(no mcapa)
Mapa.set_ShapeLayerP ointColor(unaca pa2, Convert.ToUInt32(Drawing.ColorTranslator .ToOle(Color.Red)))
Mapa.set_ShapeLayerP ointSize(unacap a2, 10000)
capagps.BeginPointInSha pefile()
capagps.PointInShapefil e((xMax - xMin) / 2, (yMax - yMin) / 2)
capagps.EndPointInShape fil e()
Muchas gracias por tu colaboración
Private Sub ToolStripButton 5_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton 5.Click
Mapa.Refresh()
Mapa.CursorMode = MapWinGIS.tkCursorMode.cmZoomIn
End Sub
en Visual studio 2013 cual seria? por que me marca un error.
Saludos.
Gracias
2.- Me ayudo mucho. Gracias.
3.- Pregunta: Se puede desde un archivo con coordenadas x,y graficar en el shape una ruta.
Saludos.
mi nombre es diver
Suscripción de noticias RSS para comentarios de esta entrada.