es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Proyecto SpatialLinesDataFrame para spNetwork

Estoy tratando de usar la función nkde de spNetworks para crear un KDE de los accidentes en DC a lo largo de su red de carreteras. En preparación para la función, estoy creando lixels para nkde, pero al ejecutar lines_center(lixels) siempre me da un error.

lixels <- lixelize_lines(dc_lines, 1000, mindist = 250)
samples <- lines_center(lixels)

Cada vez que intento ejecutar lines_center(lixels) obtengo el siguiente error:

Error in maptools::SpatialLinesMidPoints(with_length) : 
  is.projected(sldf) is not TRUE
In addition: Warning message:
In RGEOSMiscFunc(spgeom, byid, "rgeos_length") :
  Spatial object is not projected; GEOS expects planar coordinates

He intentado buscar diversas técnicas, como convertir el SpatialLinesDataFrame en un Dataframe normal, st_as_sf y luego proyectarlo, pero hasta ahora nada ha funcionado y siempre obtengo el mismo error.

Estoy cargando los datos de esta manera:

dc <- readOGR("assessment/test/Roads_2013", "Roads_2013")

Dado que el archivo cargado es un SpatialPolygonsDataFrame grande, estoy transformándolo en SpatialLines usando este código:

dc_lines <- as(dc, "SpatialLinesDataFrame")

¿Alguna idea de lo que estoy haciendo mal o cómo puedo proyectar correctamente las líneas?

El shapefile utilizado está aquí:
https://opendata.dc.gov/datasets/roads

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que el objeto espacial no está proyectado correctamente. Para solucionar este error, debes proyectar el SpatialLinesDataFrame en un sistema de referencia de coordenadas (CRS) adecuado antes de crear lixels y ejecutar lines_center().

    Puedes usar la función proj4string() para verificar el CRS actual del objeto. Si el CRS no es adecuado, puedes usar la función spTransform() del paquete rgdal para reproyectar el objeto en un CRS adecuado. Por ejemplo, para reproyectar el objeto en la zona UTM 18N, puedes usar el siguiente código:

    library(rgdal)
    dc <- readOGR("assessment/test/Roads_2013", "Roads_2013")
    dc_utm <- spTransform(dc, CRS("+init=epsg:26918"))
    dc_lines <- as(dc_utm, "SpatialLinesDataFrame")
    

    Después de reproyectar el objeto, puedes crear lixels y ejecutar lines_center() sin errores:

    library(spNetworks)
    lixels <- lixelize_lines(dc_lines, 1000, mindist = 250)
    samples <- lines_center(lixels)
    

    Ten en cuenta que el CRS adecuado dependerá de la región en la que estés trabajando, por lo que debes elegir un CRS adecuado para tu proyecto específico.

Comments are closed.