2016-04-21 87 views
1

假设我们有一个点(由经度和纬度描述)(WGS84),我们形成SpatialPointDataFramegData.init)。我想更改投影(变换),然后使用平面坐标使用简单的线点方法估计距离和交点。我使用下面的代码来执行转换。R坐标位保存到数据帧

library(rgeos) 
library(sp) 

longitude = 22.954638 
latitude = 40.617048 
gData.init = data.frame(longitude,latitude) 
gData.init$id <- as.numeric(rownames(gData.init)) 
coordinates(gData.init) <- gData.init[c("longitude", "latitude")] 
proj4string(gData.init) <- "+proj=longlat +datum=WGS84" 
gDataIn2100 <- spTransform(gData.init, CRS("+init=epsg:2100")) 

现在我想保存任何数据类型对象的坐标;当我做这个使用下面的代码

​​

我得到最大程度的保留一位小数:

 longitude latitude 
[1,] 411425.8 4496486 

当我打印坐标(我想可以说,我的坐标,更精确)

print(coordinates(gDataIn2100), digits = 12) 
然而

然后得到的坐标有所不同:

  longitude  latitude 
[1,] 411425.810118 4496486.37561 

这个我想原因不同估计一条线,我在使用gDistance的情况下,并通过使用估算LinkPointMinDistance

我该怎么办错的距离点之间的最小距离的?

+0

你已经有了一个数字问题的答案。可能值得补充的是,如果您正在投影(转换)坐标的唯一原因是计算距离,那么您可以从原始经纬度更准确地做到这一点。例如。请参阅http://stackoverflow.com/questions/32363998/function-to-calculate-geospatial-distance-between-two-points-lat-long-using-r – dww

+0

感谢您的建议。我曾尝试使用dist2Line函数{geosphere},但它的gDistance函数要慢得多。一个职业是它也估计了几个额外的参数(交点)和线的ID。 –

回答

4

[email protected]相当于print([email protected], digits = getOption("digits"))

当渲染到屏幕上的小数只下降。它们以数字形式存储并具有浮点精度。

请注意coordinates(DataIn2100)是获取坐标的推荐方式。

+0

你说得对。在我遇到的其他一些问题中迷失了方向,所以我没有检查在文件中保存坐标(DataIn2100)是否也会丢失丢失的小数。谢谢你澄清它。 –