如何将X和Y坐标转换为纬度和经度?

时间:2019-12-04 19:27:07

标签: r geospatial ggmap

以下是我拥有的数据框的示例,该数据框是从可公开获取的圣路易斯犯罪数据集中获得的。与数据相关的文档指出Xcoord和Ycoord位于  州立飞机北美基准面1983(NAD83)格式

POST

如何将它们转换为lon和lat格式的 CodedMonth Description XCoord YCoord 1: 2019-09 AUTO THEFT-PERM RETNT/UNRECOV OVER 48HR 908297.3 1018623.0 2: 2019-09 ASSLT-AGGRAV-OTH-WPN-2ND-CHILD-DOMESTIC 903995.7 1014255.0 3: 2019-09 FORGERY-ISSUING FALSE INSTRUMENT OR CERTIFICAT 0.0 0.0 4: 2019-09 STLG BY DECEIT/IDENTITY THEFT REPORT 890704.7 1010659.0 5: 2019-09 STALKING (HARASSMENT ONLY, NO THREAT) 881105.8 1008297.0 6: 2019-09 LARCENY-MTR VEH PARTS UNDER $500 882929.6 992941.3 Xcoord列,以便可以使用ggmap绘制此图

我找到了几个答案Convert latitude/longitude to state plane coordinates

但是我似乎无法使其用于我的数据

2 个答案:

答案 0 :(得分:2)

您可以使用sf软件包将其转换为简单的要素地理。
为了使它起作用,您需要知道使用的坐标系,并根据提供的描述(国家平面NAD83,位于圣路易斯附近),我的第一个猜测是EPSG 26996(NAD83 /密苏里州东部USFT) ),但它绘制在休伦湖中部,因此我尝试使用ESRI:102696。您可以在spatialreference.org上查看投影。

library(sf)
library(tidyverse)
library(ggmap)

my_df <- read_csv("C:/Users/Brian/Documents/temp.csv")
my_sf_df <- st_as_sf(my_df, coords = c("XCoord", "YCoord"), crs = 102696) 

这将x和y设置为空间坐标。您需要重新投影到WGS84这样的地理系统中,才能转换为经纬度。 st_transform使用crs = 4326(这是WGS 84坐标系)为我们完成此操作


my_latlon_df <- st_transform(my_sf_df, crs = 4326 ) 
my_latlon_df <- my_latlon_df%>%
      mutate( lat= st_coordinates(my_latlon_df)[,1],
              lon = st_coordinates(my_latlon_df)[,2])
my_latlon_df

# Simple feature collection with 6 features and 5 fields
# geometry type:  POINT
# dimension:      XY
# bbox:           xmin: -93.26566 ymin: 35.80151 xmax: -90.19163 ymax: 38.63065
# epsg (SRID):    4326
# proj4string:    +proj=longlat +datum=WGS84 +no_defs
# # A tibble: 6 x 6
# X1    CodedMonth Description                                                geometry   lat   lon
# * <chr> <chr>      <chr>                                                   <POINT [°]> <dbl> <dbl>
#       1 1:    2019-09    AUTO THEFT-PERM RETNT/UNRECOV OVER 48HR        (-90.19163 38.63065) -82.2  44.7
# 2 2:    2019-09    ASSLT-AGGRAV-OTH-WPN-2ND-CHILD-DOMESTIC         (-90.20674 38.6187) -82.3  44.7
# 3 3:    2019-09    FORGERY-ISSUING FALSE INSTRUMENT OR CERTIFICAT (-93.26566 35.80151) -93.3  35.8
# 4 4:    2019-09    STLG BY DECEIT/IDENTITY THEFT REPORT           (-90.25329 38.60893) -82.4  44.6
# 5 5:    2019-09    STALKING (HARASSMENT ONLY, NO THREAT)           (-90.2869 38.60251) -82.5  44.6
# 6 6:    2019-09    LARCENY-MTR VEH PARTS UNDER $500               (-90.28065 38.56034) -82.5  44.5

我们现在有了经纬度和经度的地理坐标作为数据框的列。无位置信息将引起问题,因为它将绘制在状态平面坐标平面的原点上,该平面位于阿肯色州的某个地方。让我们删除它,以便我们专注于要点

# let's exclude point 3 for now
my_latlon_df <- my_latlon_df[-3,]
box <- st_bbox(my_latlon_df) # bounding box
names(box) <- NULL # removing non-complient labels
buffer = .2
box2 <- box + c(-buffer, -buffer, buffer, buffer) # buffering
base_map <- get_map(location = box2, source = "osm")  # getting base map
# plotting
ggmap(base_map)+
      geom_sf(data = my_latlon_df,
              color = "red",
              size = 2
              )+
      scale_x_continuous(limits = c(-90.35, -90.1))+
      scale_y_continuous(limits = c(38.5, 38.7))

enter image description here

不幸的是,如果您不知道x和y点所在的坐标系,它将成为令人沮丧的反复试验游戏。投影坐标系基本上在地球表面上创建了笛卡尔平面,并且原点,比例和其他参数的选择特定于每个投影。 WGS84等地理坐标系之间的差异几乎没有。

答案 1 :(得分:-1)

您可以使用CrimeoMeter API(https://www.crimeometer.com/docs),并从纬度和经度从圣路易斯获得犯罪数据。