首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将在网格间隔收集的点数据转换为r中的地理参考数据集?

如何将在网格间隔收集的点数据转换为r中的地理参考数据集?
EN

Stack Overflow用户
提问于 2015-05-26 15:50:21
回答 1查看 912关注 0票数 2

我有这样的数据集:https://www.dropbox.com/s/k06n9l05t25r6x2/newdata.csv?dl=0

(样本)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"","row","col","flagrv"
"1",2361,530,2
"2",2378,531,2
"3",2360,531,2
"4",2355,531,2
"5",2363,532,2
"6",2359,532,2
"7",2368,533,2
"8",2367,533,2
"10",2359,533,2

如果我用这段代码作图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gs.pal <- colorRampPalette(c("blue", "green","yellow","orange","red"),bias=1,space="rgb")
ggplot(data=ndata,aes(x=col,y=row,color=flagrv)) + 
  geom_point(size = 0.01)+
  scale_colour_gradientn(name = "Scale",colours = gs.pal(5))+
  xlab('Longitude')+
  ylab('Latitude')+
  theme_bw()+
  theme(line = element_blank())+
  theme(legend.position = c(.93,.20),panel.grid.major = element_line(colour = "#854440"))+
  ggsave("test.png",width=10, height=8,dpi=300)

我们得到这个数字:

现在,问题是我没有长时间的价值观。我想覆盖州边界,但不能使用地图包。有人建议我用gdal,但我不知道怎么用。请您告诉我,我如何可以映射到拉特-朗域,以便我可以轻松地操作它。

编辑:

我从别人那里学到了我可以用这个:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gdal_translate -a_srs EPSG:4269 FILE.asc FILE.tif

答案错误1

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error: unexpected ']' in "spdf = SpatialPointsDataFrame(coords, all_data[, c("flagrv"]"

然后,我将代码更改为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
spdf = SpatialPointsDataFrame(coords, all_data[, c("flagrv")]) 

但是现在我有了一个错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Error in validObject(.Object) : invalid class “SpatialPointsDataFrame” object: invalid object for slot "data" in class "SpatialPointsDataFrame": got class "integer", should be or extend class "data.frame"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-26 16:37:08

如果至少不知道数据集的投影和数据(但希望有更多的信息,如分辨率和范围),就没有简单的方法可以做到这一点。如果这是一个派生映射,请尝试查找用于生成它的内容。有了这些信息,您就可以使用光栅包中的投影函数来定义数据集的投影。

编辑(根据提供的附加信息,有一个工作解决方案):这是一个工作解决方案,因为数据集的左下角有一个24.55,-130坐标,行/集之间的间距是0.01度,投影是nad83。请注意,提供的元数据信息是错误的,因为最小lat值不是20度,但可以从最南端(关键西部)估计为24.55。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#load dataset 
all_data=(read.csv('new_data.csv',header=T, stringsAsFactors=F))
res=0.01 #spacing of row and col coords pre-specified
#origin_col_row=c(0, 0) 
origin_lat_lon=c(24.55, -130) 
all_data$row=(all_data$row)*res+origin_lat_lon[1] 
all_data$col=(all_data$col)*res+origin_lat_lon[2]

#now that we have real lat/lon, we can just create a spatial dataframe
library(rgdal)
library(sp)
coords = cbind(all_data$col, all_data$row)
spdf = SpatialPointsDataFrame(coords, data=all_data) #sp = SpatialPoints(coords)
proj4string(spdf) <- CRS("+init=epsg:4269") 

R似乎无法绘制出这么多点,因此为了检查答案是否合理,我将数据集保存为一个shapefile,并将其绘制在arcgis上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
writeOGR(spdf,"D:/tmp_shapefile4.shp", "flagrv", driver="ESRI Shapefile")

我成功地用下面的代码使用ggplot2绘制了它,只是耐心点,因为绘制它需要一段时间:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
df=as.data.frame(spdf)
library(ggplot2)
ggplot(data=df,aes(x=col,y=row,color=flagrv))+ 
   geom_point(size = 0.01)+
  xlab('Longitude')+
  ylab('Latitude')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30470895

复制
相关文章
(33)if、case语句
②[ 条件判断式 ]就是使用test命令判断,所以中括号和条件判断式之间必须有空格
生信real
2020/09/10
1.2K0
(7)case语句[通俗易懂]
总结:把安装php的各种版本一个文件,文件里面是函数安装php各种版本的函数,然后在入口文件使用. /server/scripts/php.sh加载这个文件,在定义函数调用文件中的函数功能即可
全栈程序员站长
2022/09/20
9690
(7)case语句[通俗易懂]
使用case语句编写系统服务脚本
case语句可以很好的代替if语句中的多分支结构,使用case分支语句时,有几个值得注意的特点如下所述:
小手冰凉
2019/09/10
1.1K0
使用case语句编写系统服务脚本
SystemVerilog-决策语句-case语句
经过几周的更新,SV核心部分用户自定义类型和包内容已更新完毕,接下来就是RTL表达式和运算符。
碎碎思
2022/11/14
3.6K0
SystemVerilog-决策语句-case语句
CASE语句与CASE表达式
case语句与case表达式是plsql流程控制的重要组成部分,尽管其使用方法较为简单,但容易混淆。本文将描述case语句与case表达式并给出演示以便于更好理解两者的异同及使用时的注意事项。 一、简单case语句
Leshami
2018/08/14
1.3K0
Java switch case语句
swith 语句主要用于判断一个变量与一系列值中某个值是否相等,每一个值称为一个分支。基本格式如下:
算法与编程之美
2022/10/28
1.4K0
Java switch case语句
mysql 分组统计 case when 及 if 语句使用
需求: 同时:中文名重复了就是1部剧,不重复就是多部剧 需求分析: 这个需要分组、需要统计、需要判断、需要distinct。 分组:根据地区、类别、中文名称分类; 判断:根据类型进行判断同时要求和 因为中文名称重复的就是1部,所以统计的时候,要使用到distinct去重。 表语句: DROP TABLE IF EXISTS `yj_item_plan`; CREATE TABLE `yj_item_plan` (   `id` bigint(20) NOT NULL AUTO_INCREMENT,  
凯哥Java
2022/12/16
2.5K0
mysql 分组统计 case when 及 if 语句使用
java switch case 语句
switch case 语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
taoli
2022/09/30
1.4K0
java switch case 语句
如何用ORM支持SQL语句的CASE WHEN?
OQL如何支持CASE WHEN? 今天,一个朋友问我,OQL可否支持CASE WHEN语句?他给的示例SQL如下: select HName,case when IsEnable=1 then '启用' else '停用' from tb_User OQL是SOD框架的ORM查询语言,它类似Linq,但是它诞生的历史比Linq早,并且更加接近SQL语法。所以,对SOD框架而言,对应ORM如何支持CASE WHEN,就等于是问OQL如何支持CASE WHEN了。 这个问题已经不止这一个朋友来问我了,我想了下
用户1177503
2018/02/26
2.1K0
Mysql的 If和 Case语句
比如在上例子中,我们存储了一些不希望暴露性别的用户,存储的值为3.此时想要查询可以:
呼延十
2019/06/26
3.4K0
Mysql的 If和 Case语句
mysql数据库中 case when语句使用
在mysql数据库中,有时候我们会使用到类似if else的判断操作。那么mysql中怎么处理这种需求呢?
凯哥Java
2019/07/01
2.9K0
mysql数据库中 case when语句使用
在mysql数据库中,有时候我们会使用到类似if else的判断操作。那么mysql中怎么处理这种需求呢?
凯哥Java
2022/12/15
2.1K0
mysql数据库中 case when语句使用
JavaScript switch case语句详解
switch 语句专门用来设计多分支条件结构。与 else/if 多分支结构相比,switch 结构更简洁,执行效率更高。 语法格式
用户3519280
2023/07/07
4760
JavaScript switch case语句详解
Case When ELSE END语句
一、简介、Case  When   ELSE   END共有两种用法:  说实话,这种就是数据库版的switch语句,但是只是形式上很像,实际上还是有差别的!!! Create Table Test6
郑小超.
2018/01/26
2.4K0
带case操作的update语句_多个case when嵌套
1、场景:由于多次循环执行数据库操作是非常耗费性能的。因此,我们需要尽可能一条UPDATE语句更新多条数据。
全栈程序员站长
2022/10/04
2.7K0
流程控制-case语句
在生产环境中,我们总会遇到一个问题需要根据不同的状况来执行不同的预案,那么我们要处理这样的问题就要首先根据可能出现的情况写出对应预案,根据出现的情况来加载不同的预案。
星哥玩云
2022/09/08
6380
order by case when执行优先级_sql case语句
select * from table where 条件1 AND 条件2 OR 条件3
全栈程序员站长
2022/10/02
1.4K0
Mysql中的条件语句if、case
Mysql中的条件语句在我们对数据进行转换的时候比较有用,这样就不需要创建中转表。
大江小浪
2018/07/24
6.5K0
判断结构select...case语句
对于多选一的情况时,使用select...case语句可以让代码更简单、易读。下面我们就先介绍基础知识,然后结合示例来学习select...case语句。
无言之月
2019/10/13
3.9K0
点击加载更多

相似问题

如何使用多个case语句更新多个null值

13

使用CASE语句更新多行

34

无法使用case语句更新

11

使用case语句进行更新

25

使用case语句更新字段

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文