如何将X和Y坐标转换成纬度和经度?
How to convert X and Y coordinates into Latitude and longitude?
以下是我从圣路易斯公开可用的犯罪数据集中获得的数据框示例。与数据相关的文档指出 Xcoord 和 Ycoord 在
State Plane North American Datum 1983 (NAD83) 格式
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 0 882929.6 992941.3
如何将这些转换为 Xcoord
和 Ycoord
列为 lon 和 lat 格式,以便我可以使用 ggmap
绘制它
我找到了几个答案Convert latitude/longitude to state plane coordinates
但我似乎无法让它为我的数据工作
您可以使用 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 0 (-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))
不幸的是,如果您不知道您的 x 点和 y 点在哪个坐标系中,它可能会变成一个令人沮丧的试错游戏。投影坐标系基本上在地球表面创建了一个笛卡尔平面,原点、比例和其他参数的选择对于每个投影都是特定的。在 WGS84 等地理坐标系中几乎没有太大差异。
正确的地理 system/projection 是“ESRI:102696”,因此代码应为:
my_sf_df <- st_as_sf(my_df, coords = c("XCoord", "YCoord"), crs = "ESRI:102696" )
以下是我从圣路易斯公开可用的犯罪数据集中获得的数据框示例。与数据相关的文档指出 Xcoord 和 Ycoord 在 State Plane North American Datum 1983 (NAD83) 格式
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 0 882929.6 992941.3
如何将这些转换为 Xcoord
和 Ycoord
列为 lon 和 lat 格式,以便我可以使用 ggmap
我找到了几个答案Convert latitude/longitude to state plane coordinates
但我似乎无法让它为我的数据工作
您可以使用 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 0 (-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))
不幸的是,如果您不知道您的 x 点和 y 点在哪个坐标系中,它可能会变成一个令人沮丧的试错游戏。投影坐标系基本上在地球表面创建了一个笛卡尔平面,原点、比例和其他参数的选择对于每个投影都是特定的。在 WGS84 等地理坐标系中几乎没有太大差异。
正确的地理 system/projection 是“ESRI:102696”,因此代码应为:
my_sf_df <- st_as_sf(my_df, coords = c("XCoord", "YCoord"), crs = "ESRI:102696" )