热点
Android开发驱动数码互联,塑造物联网智能新生态,reasoning_content:我们要求以内容分发专员的口吻,写一个与“技术、科技”相关,关于[Android开发驱动数码互联:塑造物联网智能新生态]的标题要求直接输出一个标题,不要加说明,字数30字以内nn我们需要一个标题,内容涉及Android开发驱动数码互联,塑造物联网智能新生态口吻是内容分发专员,可能偏向于科技、技术、专业性标题要简短精炼nn可能的Android开发引领数码互联,构建物联网智能新生态 但字数可能超?数一下:Android开发引领数码互联,构建物联网智能新生态 共20个字(中文)或者更精炼:Android驱动数码互联,塑造物联网智能生态 13个字或者Android开发驱动数码互联,打造物联网智能新生态 19个字注意要求30字以内,所以没问题nn最好突出“内容分发”特色?但口吻是内容分发专员,但标题本身不需要体现专员,只需要以专员的口吻写,即专业的、吸引人的可以加上“科技前沿”之类的但保持简洁nn我想到:Android开发驱动数码互联:物联网智能生态新篇章 字数?Android开发驱动数码互联:物联网智能生态新篇章 共18个字(包括标点?中文标点通常不计入字数?但要求30字以内,没问题)或者更直接:Android驱动数码互联 塑造物联网智能新生态 15字nn注意原标题有“技术、科技”相关,可以体现输出一个标题即可
移动H5创新:揭秘万物互联新生态构建,reasoning_content:我们要求以SEO优化师的口吻,写一个与技术、科技相关,关于移动H5引领创新潮流:构建万物互联新生态的标题要求直接输出一个标题,不要加说明,字数30字以内需要包含关键词如移动H5、创新、万物互联等,同时要有SEO优化师的口吻,可能加入一些吸引点击的词汇如揭秘、趋势、必看等标题要简短精炼nn可能的移动H5技术革新:构建万物互联新生态之路但字数可能超?计算:移动H5技术革新:构建万物互联新生态之路 共22个字?中文标点算不算?通常算再比如:移动H5引领创新,万物互联新生态如何构建?但感觉不够SEO或者:移动H5创新:万物互联新生态的构建密码字数19字或者:揭秘移动H5:如何打造万物互联新生态?20字需要更直接nn考虑:移动H5引领创新潮流,打造万物互联新生态 共18字或者移动H5技术驱动:万物互联新生态构建指南 19字最好有SEO优化师常用的干货、秘籍等但要求与技术科技相关一个常见SEO移动H5创新趋势:万物互联新生态构建全攻略 20字或者移动H5新技术:揭秘万物互联新生态构建 18字nn简洁有力:移动H5:创新引领万物互联新生态13字或者移动H5创新:构建万物互联新生态 13字但缺少SEO优化师口吻可以加必看:移动H5创新必看:万物互联新生态构建!15字最终输出一个标题
AI实践者:框架与设计策略精选,高效建站指南,reasoning_content:我们要求以AI实践者的口吻,写一个与技术、科技相关的标题,主题是[精选框架与设计策略:构建高效网站开发指南]注意要简短精炼,30字以内直接输出标题nn可能的比如AI实践者揭秘:精选框架与设计策略,高效建站指南 但字数可能超或者更精简:AI实践者:精选框架策略,高效网站开发指南 约16字或者AI实践者:高效网站开发的框架与设计策略精选 18字注意口吻是AI实践者,所以可以写AI实践者推荐:高效网站开发的精选框架与设计策略 但可能超30需要控制在30字内nn我给出:AI实践者:精选框架与设计策略,构建高效网站 共18字或者更完整:AI实践者视角:精选框架与设计策略的高效网站开发指南 正好30字?数一下:AI实践者视角:精选框架与设计策略的高效网站开发指南 共?AI(2)实践者(3)视角(2):(1)精选(2)框架(2)与(1)设计(2)策略(2)的(1)高效(2)网站(2)开发(2)指南(2) 2+3+2+1+2+2+1+2+2+1+2+2+2+2=28字?不对,仔细算:AI(2)实(1)践(1)者(1)视(1)角(1):(1)精(1)选(1)框(1)架(1)与(1)设(1)计(1)策(1)略(1)的(1)高(1)效(1)网(1)站(1)开(1)发(1)指(1)南(1) 共2+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1=25?算了,用中文数字:AI是英文,算两个字符;但通常中文字数按汉字算,AI算两个英文字母,但在标题中往往视为两个字符为了保险,最好全部使用中文可改为:人工智能实践者:精选框架与设计策略,高效网站开发指南 共?人工智能(4)实践者(3)=7,冒号1,精选2,框架2,与1,设计2,策略2,逗号1,高效2,网站2,开发2,指南2,总计7+1+2+2+1+2+2+1+2+2+2+2=28字可以或者更简洁:AI实践者:框架与设计策略精选,高效建站指南 共?AI2+实践者3+冒号1+框架2+与1+设计2+策略2+精选2+逗号1+高效2+建站2+指南2=22字这个也不错nn根据要求,直接输出标题我选择:AI实践者:框架与设计策略精选,高效建站指南
17 9 月 2026, 周四

前言

很多朋友说在R里没法使用高德地图,这里给出一个基于leaflet包的解决方法。

library(leaflet)

# 添加高德地图
m <- leaflet() %>%
      addTiles(
        'http://webrd0{s}.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',options=tileOptions(tileSize=256,minZoom=9,maxZoom=17,subdomains="1234"),attribution = '&copy; <a href="http://ditu.amap.com/">高德地图</a>',group="Road Map"
      ) %>% 
      setView(116.40,39.90,zoom = 10)
m

R空间数据处理与可视化

当然,除了告诉大家怎么在R里调用高德地图外,本文还想做的深入一些,尝试对空间可视化的基础知识做一个简单的介绍。

空间数据基础知识

shp文件

空间数据最常用的格式是shp,主要由三个文件组成:shp文件用于存储位置几何信息,dbf文件用于存储attribute,shx用于存储位置几何信息与attribute的对照表。位置几何信息主要有以下几类:points,multipoints,lines,polygons等。

WKT与WKB

WKT(Well-known text)是开放地理空间联盟OGC(Open GIS Consortium )制定的一种文本标记语言,用于表示矢量几何对象、空间参照系统及空间参照系统之间的转换。举例如下:

  • 点(Point):”POINT(1 1)”

  • 线(Line):”LINESTRING(0 0,1 1,2 2)”

  • 多边形(Polygon):”POLYGON((0 0,3 0,3 3,0 3,0 0),(1 1,2 1,2 2,1 2,1 1))”

WKB(well-known binary) 是WKT的二进制表示形式,解决了WKT表达方式冗余的问题,便于传输和在数据库中存储相同的信息.

R的空间数据处理与可视化

空间数据处理与可视化,需要解决三个问题,一是怎么在R中表示空间数据,二是怎么对空间对象进行计算;三是怎么在R中绘制空间数据/地图。sp用于解决第一个问题,rgeos用于解决第二个问题,leaflet用于解决第三个问题。

sp

sp包的功能是在R中提供对象表示shp文件。SpatialPoints,SpatialMultiPoints,SpatialLines,SpatialPolygons等用于表示位置几何信息。attribute一般以表格形式存在,所以sp包用dataframe对齐进行表示。为前面提到的SpatialXXX添加dataframe后得到诸如SpatialPointsDataFrame,SpatialMutilPointsDataFrame,SpatialLinesDataFrame,SpatialPolygonsDataFrame等类。在这些类中,位置几何信息与attribute的对照关系通过Spatial类的ID与dataframe的rownames进行匹配得到。

SpatialXXDataFrame的结构示意图如下(出处:http://neondataskills.org/R/):

R空间数据处理与可视化

下面举一个例子,怎么从dataframe数据变为sp对象。

library(splitstackshape)
library(sp)
library(dplyr)
library(tidyr)

# 准备测试数据
link_id <- c("road_one","road_two")  # 两条道路,道路1和道路2
coors <- c("116.44469451904297,39.890071868896484:116.44451141357422,39.891361236572266","116.44499969482422,39.887630462646484:116.44469451904297,39.890071868896484")  # 道路1的经纬度坐标序列和道路2的经纬度坐标序列
status <- c("congest","uncongest")  # 道路1处于拥堵状态,道路2处于畅通状态

link_coors <- data.frame(link_id,coors,status)
lon_lat_df <- cSplit(link_coors %>% select(link_id,coors),c("coors"),sep=":",direction="long") %>% 
  separate(coors,c("lng","lat"),sep=",",convert=TRUE)

# 转化函数
df2sp <- function(route_df) {
  # 将df的一行转化为一个Lines
  xy2sp <- function(route_df) {
    coors <- route_df$coors
    link_id <- route_df$link_id
    line <- coors %>%
      stringr::str_split(pattern=":",simplify=T) %>%
      t() %>%
      stringr::str_split(pattern=",simplify=T) %>%
      apply(2,as.numeric) %>%
      Line() %>%
      list() %>%
      Lines(ID=link_id)
    return(line)  
  }
  
  # 几何信息join属性信息
  splines2splinesdf <- function(splines,data,id_field)  {
    ids <- data.frame(names(splines),stringsAsFactors =F)
    colnames(ids) <- id_field
    join_name <- dplyr::inner_join(ids,data)
    row.names(join_name ) <- join_name[,id_field]
    splinesdf <- SpatialLinesDataFrame(splines,data=join_name)
    proj4string(splinesdf ) <- CRS("+init=epsg:4326") # 设置投影坐标系,leaflet可以不用设置
    return(splinesdf)
  }
  
  route_list <- plyr::alply(route_df,1,xy2sp)
  attributes(route_list) <- NULL  # 必须设置,否则leaflet不可识别
  spline <- SpatialLines(route_list)
  return(splines2splinesdf(spline,route_df,"link_id"))
}

# data.frame转化为sp
Sldf <- df2sp(link_coors)

str(Sldf)

R空间数据处理与可视化

rgeos

空间处理,主要用来做一些空间运算,比如计算两个空间对象的位置关系:相交,重叠,包含等等。再比如,根据空间对象创建新的空间对象。此外,rgeos还能够完成WKT与sp对象的相互转换。

library(rgeos)

# 创建外扩与内缩buffer,演示WKT的读写
dilated_buffer <- gBuffer(Sldf,byid=TRUE,width=0.0002,capStyle="FLAT")
dilated_buffer_wkt <- readWKT(writeWKT(dilated_buffer,byid = FALSE))
eroded_buffer <- gBuffer(dilated_buffer,width=-0.0001,capStyle="SQUARE")

leaflet

我们继续上面的例子,将空间对象绘制到高德地图上。

library(leaflet)
factpal <- colorFactor(c(rgb(1,1),rgb(0,1)),domain=c("congest","uncongest"))

m <- leaflet() %>%
  addTiles(
    'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=8&x={x}&y={y}&z={z}',options = tileOptions(tileSize=256,maxZoom=17),group="高德地图"
  ) %>%
  setView(116.40,zoom = 10)  %>%
  addPolylines(color=~factpal(status),weight=3,opacity=1,data=Sldf,group="实时路况") %>%
  addPolygons(data=dilated_buffer_wkt,group="空间计算") %>% 
  addPolygons(data=eroded_buffer,color="black",group="空间计算") %>%
  addLayersControl(
    overlayGroups = c("高德地图","实时路况","空间计算"),options = layersControlOptions(collapsed = FALSE)
  ) %>%
  addLegend("bottomleft",pal = factpal,values = Sldf@data$status,title = "实时交通",opacity = 1
  ) %>%
  fitBounds(Sldf@bbox["x","min"] - 0.001,Sldf@bbox["y",Sldf@bbox["x","max"] + 0.001,"max"] + 0.001
  )

m

R空间数据处理与可视化

后记

R空间处理的第三方库主要由sp提供了R的存储结构,rgdal提供了读写操作,rgeos提供了运算操作。然而,sp的实现只实现了空间数据处理标准Simple Feature的一个子集,且处理效率较低。为此,一个全新的sf包正在开发中,目标是替换掉sp,并把rgdal和rgeos的功能整合进来。目前已经具备了基本的使用功能,我们可以使用sf来完成从数据框创建空间对象的操作,可以看到代码简单了很多:

link_wkt <- link_coors %>%
  mutate(wkt_prefix="LINESTRING(",wkt_content=str_replace_all(coors," ") %>% str_replace_all(":","),wkt_posix=")",geom=str_c(wkt_prefix,wkt_content,wkt_posix)
         ) %>%
  select(link_id,status,geom)

link_sf <- st_as_sf(link_wkt,wkt="geom")

# sf提供的buffer运算功能还不够完善,我们仍需要使用rgeos来完成相应的操作;rgeos只认sp,所以要做一次从sf到sp的转化。
Sldf <- as(link_sf,"Spatial")

dawei

【声明】:天津站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

Android开发驱动数码互联,塑造物联网智能新生态,reasoning_content:我们要求以内容分发专员的口吻,写一个与“技术、科技”相关,关于[Android开发驱动数码互联:塑造物联网智能新生态]的标题要求直接输出一个标题,不要加说明,字数30字以内nn我们需要一个标题,内容涉及Android开发驱动数码互联,塑造物联网智能新生态口吻是内容分发专员,可能偏向于科技、技术、专业性标题要简短精炼nn可能的Android开发引领数码互联,构建物联网智能新生态 但字数可能超?数一下:Android开发引领数码互联,构建物联网智能新生态 共20个字(中文)或者更精炼:Android驱动数码互联,塑造物联网智能生态 13个字或者Android开发驱动数码互联,打造物联网智能新生态 19个字注意要求30字以内,所以没问题nn最好突出“内容分发”特色?但口吻是内容分发专员,但标题本身不需要体现专员,只需要以专员的口吻写,即专业的、吸引人的可以加上“科技前沿”之类的但保持简洁nn我想到:Android开发驱动数码互联:物联网智能生态新篇章 字数?Android开发驱动数码互联:物联网智能生态新篇章 共18个字(包括标点?中文标点通常不计入字数?但要求30字以内,没问题)或者更直接:Android驱动数码互联 塑造物联网智能新生态 15字nn注意原标题有“技术、科技”相关,可以体现输出一个标题即可