Hola buenos días: Hace algún tiempo mandé una duda que sobre fichero tipo shapefile que publica el Instituto Geográfico Nacional de España y que detallo en el word Duda_sobre_shp. El tema es que al final no obtuve respuesta (es cierto que lo mandé en Agosto y en esa fechas entiendo que sea normal, por tanto por recomendación de un conocido vuelvo de nuevo a remitir la cuestión) Como no podía esperar me monté una solución donde ya tengo leídas todos los municipios de España de forma casi automática a partir de un fichero con datos de provincia bastante rápida puedo. Así pues, dada una provincia, obtengo un fichero .csv con las siguientes columnas: id_interno id_final Longitud_def Latitud_def1 1000000 -8.358924 43.14721 El id_interno es un identificador a nivel de municipioEl id_final es un identificador a nivel de polígono exclusivamente Con esta tabla, puedo posteriormente añadir columnas para dar color a nivel de polígono y/o municipio y utilizarla en librerías como ggmap u otras, ya que tengo perfectamente todos los caminos cerrados Actualmente mi proceso tarda unos 5 minutos (o menos, manipulaciones incluidas) y consta de: 1)Ejecutar un primer programa R2)Realizar una manipulación muy sencilla en la salida del .csv (añadir una única fila a dicho fichero con el nombre de las columnas)3)Ejecuto un segundo progama R que me genera el fichero totalmente con la estructura que indico Mi pregunta es doble: -Por un lado mi principal pregunta es ¿Existe alguna manera directa con un único programa R de hacer lo mismo? He visto que puedo pasar los datos a json y otros formatos directamente en sitios como http://converter.mygeodata.eu/vector pero no ofrecen lo anterior (puede que no esté haciendo algo bien, por supuesto) -Por otro lado en el word Duda_sobre_shp comento algo sobre la función kmlPolygons, esta función sólo saca el primer polígono e ignora todos los demás, por tanto ¿Hay algo que se me esté escapando sobre su funcionamiento en sí? Lo digo porque como se observa en el documento el resultado no es el deseado y en España existen muchos municipios con numerosas disconexiones que no las recogería esta función Un saludo y muchas gracias por las respuestas por anticipado (y por aguantar la lectura de este "tostón" de correo) PD Lo que está en rojo escrito en Duda_sobre_shp, está resuelto, de hecho es lo que hago con el primero de los programas donde uso la función sink() y que os comenté que me conformaba en principio con esto en un correo posterior ------------ próxima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20141008/4db989b2/attachment-0001.html> ------------ próxima parte ------------ A non-text attachment was scrubbed... Name: Duda_sobre_shp.docx Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document Size: 131217 bytes Desc: no disponible URL: <https://stat.ethz.ch/pipermail/r-help-es/attachments/20141008/4db989b2/attachment-0001.bin>
Oscar Perpiñán Lamigueiro
2014-Oct-08 17:01 UTC
[R-es] Pregunta sobre manipulación de shapefile
Hola, Cuando usas readShapPoly obtienes un objeto de clase SpatialPolygonsDataFrame. Si lo que necesitas es añadir nuevas columnas, puedes hacerlo como harías con cualquier data.frame. Usando el ejemplo que viene en su página de ayuda, añado una nueva variable llamada test: library(maptools) xx <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66")) xx$test <- rnorm(nrow(xx)) También te puede interesar la función spCbind, que te permite unir un Spatial*DataFrame con un data.frame. Finalmente, si necesitas las coordenadas del centroide de cada polígono, puedes usar coordinates: coordinates(xx) Pero si necesitas las coordenadas de todos las líneas es más fácil si lees el mismo fichero con readShapeLines, y usas de nuevo coordinates. Ahora obtendrás una lista con las coordenadas de cada uno de los polígonos. Saludos. Oscar. -- Oscar Perpiñán Lamigueiro Dpto. Ingeniería Eléctrica (ETSIDI-UPM) Grupo de Sistemas Fotovoltaicos (IES-UPM) URL: http://oscarperpinan.github.io
Oscar Perpiñán Lamigueiro
2014-Oct-08 17:10 UTC
[R-es] Pregunta sobre manipulación de shapefile
Hola de nuevo, Olvidaba recomendarte este libro: http://www.asdar-book.org/ y estos cursos asociados: http://www.bias-project.org.uk/ASDARcourse/ http://geostat-course.org/Bergen_2014#Daily_programme Saludos. Oscar. -- Oscar Perpiñán Lamigueiro Dpto. Ingeniería Eléctrica (ETSIDI-UPM) Grupo de Sistemas Fotovoltaicos (IES-UPM) URL: http://oscarperpinan.github.io
Oscar, al final no he podido esperar hasta mañana Con: library(maptools)library(sp) poligonos <- readShapeLines("C:\\...\\DATOS\\MUNICIPIO.shp") sink("C:\\ ... \\DATOS\\MUNICIPIO.csv") coordinates(poligonos) Consigo un fichero con la suficiente estructura para tratarlo fácilmente y de una tacada montar la tabla .csv tal y como he indicado en un correo anterior Necesito el .csv aparte para utilizarlo y manipularlo después en otras librerías. Aunque con tu respuesta soy capaz de crear una función que permite la generación de la estructura que te he indicado de un paso de modo totalmente automatizado, ¿Existe alguna función que haga la conversión directamente? (Simplemente es para que no re-invente yo mismo la rueda) Mi intención es usar después ggmap con ggplot2 Un saludo y gracias en todo caso, con tu indicación ya te digo, dar solución a mi objetivo de crear algo que directamente me lea los ficheros de modo como yo quiero en un solo paso y todo dentro de R (como debe ser)> From: oscar.perpinan en upm.es > To: fjroar en hotmail.com > CC: r-help-es en r-project.org > Subject: Re: [R-es] Pregunta sobre manipulación de shapefile > Date: Wed, 8 Oct 2014 19:01:29 +0200 > > > Hola, > > Cuando usas readShapPoly obtienes un objeto de clase > SpatialPolygonsDataFrame. Si lo que necesitas es añadir nuevas columnas, > puedes hacerlo como harías con cualquier data.frame. Usando el ejemplo > que viene en su página de ayuda, añado una nueva variable llamada test: > > library(maptools) > xx <- readShapePoly(system.file("shapes/sids.shp", package="maptools")[1], > IDvar="FIPSNO", proj4string=CRS("+proj=longlat +ellps=clrk66")) > xx$test <- rnorm(nrow(xx)) > > También te puede interesar la función spCbind, que te permite unir un > Spatial*DataFrame con un data.frame. > > Finalmente, si necesitas las coordenadas del centroide de cada polígono, > puedes usar coordinates: > > coordinates(xx) > > Pero si necesitas las coordenadas de todos las líneas es más fácil si > lees el mismo fichero con readShapeLines, y usas de nuevo coordinates. Ahora > obtendrás una lista con las coordenadas de cada uno de los polígonos. > > Saludos. > > Oscar. > > > -- > Oscar Perpiñán Lamigueiro > Dpto. Ingeniería Eléctrica (ETSIDI-UPM) > Grupo de Sistemas Fotovoltaicos (IES-UPM) > URL: http://oscarperpinan.github.io[[alternative HTML version deleted]]