2017-01-27 7 views
4

Экспорт KML для использования на Картах Google. Вот код для экспорта (адаптировано из here):Экспорт таблицы данных в Карты Google KML в R

t_expkml_c <- function(obj, archivo, 
        col_nombre, col_desc, col_color, 
        mapa_colores = "mapa_colores_topaz", 
        mapa_nombre = "Mapa_TSE", mapa_desc = "Mapa Creado por PE de TSE") { 

    # - changes projection 
    if (proj4string(obj)!="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0") { 
    cat("Input SpatialPolygonsDataFrame ",obj," re-projected from ", 
     proj4string(obj)," to WGS84 longlat\n",sep="") 
    assign(obj,spTransform(obj,CRS(" +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0"))) 
    } # check projection 

    # opens file 
    kmlFile <- file(archivo, 
        open = "w") 

    # goes through each polygon 
    # usa maptools::kmlPolygon 
    Xout <- sapply(slot(obj, 
         "polygons"), 
       function(x) { 
        maptools::kmlPolygon(x, # Object 
             name = as(obj, "data.frame")[slot(x, "ID"), col_nombre], 
             # name column 
             col = mapa_colores[as.numeric(as(obj, "data.frame")[slot(x, "ID"), col_color])], 
             # color column 
             lwd = 0.5, # stroke 
             border = NA, # borders 
             visibility = TRUE, 
             description = as(obj,"data.frame")[slot(x, "ID"), col_desc], #description (what I need to change) 
        ) 
       } 
) 

    # export polyon out 
    cat(kmlPolygon(kmlname=mapa_nombre, 
       kmldescription=mapa_desc)$header, 
     file = kmlFile, sep="\n") 
    # estilos 
    cat(unlist(Xout["style",]), 
     file = kmlFile, sep="\n") 
    # contenidos 
    cat(unlist(Xout["content",]), 
     file = kmlFile, sep="\n") 
    # footers 
    cat(kmlPolygon()$footer, 
     file = kmlFile, sep="\n") 
    close(kmlFile) # end 
} 

Это работает хорошо, когда у меня есть только один столбец из [email protected] data.frame (объект класса SpatialPolygonsDataFrame). Однако я хочу экспортировать большую таблицу данных, чтобы она отображалась в описании формы Google Maps.

Например, это одна колонка (исходный экспорт); enter image description here

Если я хочу, чтобы добавить другие дескрипторы, изменить таблицу данных в Google Maps, как это:

enter image description here

Но я хочу повторить это поведение от первоначального экспорта в R. У меня есть попытался изменить параметр description, чтобы добавить вектор имена столбцов или даже индексы имен столбцов (например, c("Column2", "Column3") или 1:2), и я попытался добавить HTML в столбец описания (который не работает при визуализации в таблице данных Google Maps в разных столбцах).

Как я могу это достичь?

+0

Небольшое отступление: как вы используете таблицу на карте, чтобы заполнить информационное окно? (Я только что нажал функцию 'add_kml()' в [dev version] (https://github.com/SymbolixAU/googleway) моего пакета, который позволит вам построить KML на карте из R) – SymbolixAU

+0

И ваша ссылка не работает – SymbolixAU

ответ

1

Вам нужно будет использовать HTML и объединить столбцы вместе.

sc<- c(103.8259077,1.320045,103.8265944,1.3143817,103.829813,1.3132662, 103.8346624,1.3173421,103.8259077,1.320045) 
polys_coords<-list() 
polys_coords[[1]]<-matrix(sc, byrow=TRUE, ncol=2) 
polys_coords[[2]]<-polys_coords[[1]]+0.05 
polys_coords[[3]]<-polys_coords[[1]]-0.05 
polys_spatial<-SpatialPolygons(
    Srl= list (Polygons(srl=lapply(polys_coords, function(x) Polygon(x)), ID="1"), 
       Polygons(srl=lapply(polys_coords, function(x) Polygon(x-0.01)), ID="2"), 
       Polygons(srl=lapply(polys_coords, function(x) Polygon(x+0.01)), ID="3")) 
) 
proj4string(polys_spatial)<-CRS(" +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +towgs84=0,0,0") 
df<-SpatialPolygonsDataFrame(polys_spatial, data.frame(NAME=paste0("Name",1:3), DESCA=paste0("Poly",1:3), DESCB=paste0("Gon",1:3))) 
# NAME DESCA DESCB 
# 1 Name1 Poly1 Gon1 
# 2 Name2 Poly2 Gon2 
# 3 Name3 Poly3 Gon3 

xOut<-sapply([email protected], function(x) kmlPolygon(x, name=as.data.frame(df)[[email protected],"NAME"], 
               description=paste( 
                   sapply(2:3, function(i) { 
                   y<-as.data.frame(df) 
                   paste0("<p><strong>",colnames(y)[i], "</strong>: ", y[[email protected],i],"</p>") }) , 
                   collapse="")) 
) 

xOut[["content",1]][1:5] 
# [1] ""                             
# [2] "<Placemark>"                          
# [3] "<name>Name1</name>"                        
# [4] "<description><![CDATA[<p><strong>DESCA</strong>: Poly1</p><p><strong>DESCB</strong>: Gon1</p>]]></description>" 
# [5] "<styleUrl>#1</styleUrl>" 
xOut[["content",2]][1:5] 
# [1] ""                             
# [2] "<Placemark>"                          
# [3] "<name>Name2</name>"                        
# [4] "<description><![CDATA[<p><strong>DESCA</strong>: Poly2</p><p><strong>DESCB</strong>: Gon2</p>]]></description>" 
# [5] "<styleUrl>#2</styleUrl>" 

 Смежные вопросы

  • Нет связанных вопросов^_^