在地图上绘制点,经度和纬度保持部门之间的边界

Posted

技术标签:

【中文标题】在地图上绘制点,经度和纬度保持部门之间的边界【英文标题】:Plot points on map with longitude and latitude keeping boundaries between departments 【发布时间】:2017-04-05 14:34:06 【问题描述】:

我想在使用 map() 创建的法国地图上绘制一些点,方法是使用包 ggplot2 提供纬度和经度(使用 Google 地图的 API 计算)。

点示例:

  centerid latitude longitude
1   0121H1 46.22368  5.210819
2   0121H2 46.22368  5.210819
3   0218H3 49.37008  3.335127
4   0303H1 46.34272  2.608380
5   0303H2 46.34272  2.608380

用这一行:

carte_france <- map("france")

我明白了:

但是当我运行这些行时(尤其是第二行):

head(fortify(carte_france))
ggplot(carte_france, aes(long, lat)) +
  geom_polygon(aes(group = group))

我明白了:

地图很好看,但我想保持部门之间的界限。是否可以?还是我应该使用其他东西? 数据:

structure(list(centerid = structure(1:5, .Label = c("0121H1", 
"0121H2", "0218H3", "0303H1", "0303H2", "0303H5", "0620H1", "0620H2", 
"0620H6", "0807A1", "0807H1", "0807H2", "1007H1", "1320H4", "1415A1", 
"1415H6", "1719H3", "1719H31", "1719H7", "1806H5", "1806H6", 
"1911H1", "2104H1", "2104H5", "2205A1", "2205H1", "2205H2", "2205H3", 
"2205H4", "2205H6", "2205H7", "2311H2", "2311H3", "2509H1", "2509H4", 
"2621C1", "2621H4", "2716H1", "2716H2", "2716H3", "2806H1", "2806H5", 
"2905H1", "2905H2", "2905H3", "2905H4", "2905H5", "2905H7", "3010H1", 
"3113C1", "3113H3", "3113H4", "3113H47", "3113H5", "3113H6", 
"3113L1", "3113L2", "3213A3", "3213H1", "3213H2", "3410C1", "3410H10", 
"3410H11", "3410H2", "3410H3", "3410H4", "3410H7", "3505C1", 
"3505H3", "3505H4", "3505H5", "3505H6", "3505L4", "3505P55", 
"3706H58", "3821C1", "3821H1", "3821H3", "3821H4", "3909H1", 
"4002H1", "4002H2", "4002H65", "4106A1", "4106H1", "4106H2", 
"4221C1", "4221H1", "4221H2", "4221H3", "4221H5", "4221H7", "4417C2", 
"4417H2", "4417H68", "4417L1", "4613A1", "4702H1", "4702H71", 
"4917C1", "4917H1", "4917H2", "4917H72", "4917L2", "5015H1", 
"5015H73", "5107P1", "5207H1", "5207H2", "5207H79", "5317H1", 
"5317H2", "5412H1", "5412H4", "5412H87", "5512H2", "5605H2", 
"5605H4", "5605H89", "5712H2", "5914A4", "5914H2", "5914H4", 
"5914H8", "5914H9", "5914H95", "5914H96", "6115H1", "6214A4", 
"6214D5", "6214H2", "6214H4", "6303H1", "6303H2", "6402H113", 
"6610H116", "6701A1", "6701H1", "6701H2", "6701H6", "6701H8", 
"6801H1", "6801H3", "6801H4", "6921A1", "6921H1", "6921H2", "6921H5", 
"7009H1", "7009H131", "7104H1", "7104H133", "7104H3", "7104H4", 
"7421H2", "7522A5", "7522H015", "7522H1", "7522H13", "7522H142", 
"7522H149", "7522H15", "7522H157", "7522H16", "7522H162", "7522H2", 
"7522H21", "7522H4", "7522H83", "7522H9", "7616A1", "7616H2", 
"7616H4", "7722H174", "7722H2", "7822H1", "7919H1", "8018H3", 
"8113H1", "8113H187", "8113H2", "8213H1", "8213H2", "8320A191", 
"8320D3", "8320H1", "8320H193", "8320H4", "8320H5", "8420H1", 
"8711H1", "8812A1", "8812H1", "8812H3", "8812H7", "8904H2", "8904L2", 
"9009H2", "9122H1", "9222A1", "9222A3", "9222H1", "9222H11", 
"9222H2", "9222H4", "9222H5", "9222H7", "9222H8", "9222H9", "9322A1", 
"9322D2", "9322H2", "9322H222", "9322H3", "9322H6", "9322H7", 
"9422D1", "9422H1", "9422H2", "9422H3", "9422H5", "9522H1", "9522H4", 
"9522H5", "9522H6", "9522H7", "9723H15", "9723H2", "9723H8"), class = "factor"), 
    latitude = c(46.2236804, 46.2236804, 49.3700842, 46.3427222, 
    46.3427222), longitude = c(5.2108193, 5.2108193, 3.335127, 
    2.6083801, 2.6083801)), .Names = c("centerid", "latitude", 
"longitude"), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5"))

【问题讨论】:

【参考方案1】:

这样的?您的多边形已填充,您需要一个分组来绘制单独的多边形。

ggplot(map('france'), aes(long, lat, group = group)) + 
  geom_polygon(fill = NA, col = 1) + 
  coord_quickmap()

还要包括要点:

ggplot(map('france'), aes(long, lat)) + 
    geom_polygon(aes(group = group), fill = NA, col = 1) + 
    coord_quickmap() +
    geom_point(aes(longitude, latitude), data = my_points, col = 'red')

我猜这些间隙是形状文件的一个属性,但你至少可以通过绘制更粗的线来减少问题。

ggplot(map('france'), aes(long, lat)) + 
    geom_polygon(aes(group = group), fill = NA, col = 'grey30', size = 1) + 
    coord_quickmap() +
    geom_point(aes(longitude, latitude), data = my_points, col = 'red', size = 2)

【讨论】:

是的,我一直在寻找这个,但很遗憾得到一张看起来更糟糕的地图(区域之间的空白太多),我会尝试检查是否可以填充它(或者如果你知道怎么做)。谢谢! 我认为它只是看起来更糟,因为另一张图片超级小。【参考方案2】:

第一步 carte_france

有几种简单的方法可以关闭细化:

    添加选项 plot=FALSE。 添加选项分辨率=0 添加选项 fill=TRUE

在这种情况下,这三个选项中的任何一个都会产生干净的多边形。

【讨论】:

以上是关于在地图上绘制点,经度和纬度保持部门之间的边界的主要内容,如果未能解决你的问题,请参考以下文章

在地图上围绕纬度/经度绘制时间半径

如何找到给定纬度/经度以北 x 公里的纬度/经度?

如何在等值线图上绘制出现点(经度/纬度)?

如何从R中的州边界获取纬度和经度数据

什么是用于在世界地图上绘制纬度/经度对的易于使用的 API?

在图像上绘制 lat/lng 点