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

时间:2017-04-05 14:34:07

标签: r google-maps ggplot2 geolocation maps

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

点数示例:

  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")

我明白了:

france map with map()

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

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

我明白了:

france map with some ggplot modifications

地图很好看但我想保持部门之间的界限。可能吗?或者我应该使用其他东西? DATAS:

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"))

2 个答案:

答案 0 :(得分:1)

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

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

enter image description here

并包括这些要点:

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')

enter image description here

间隙是我猜测的形状文件的属性,但您可以通过绘制较粗的线来至少减少问题。

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)

enter image description here

答案 1 :(得分:0)

在你的第一步 carte_france&lt; - map(&#34; france&#34;) 您将地图视为简单的线而不是多边形。因此,运行默认的细线,并且此算法不对称。由于两个相邻的多边形共享一条在两个不同方向上变薄的公共线,因此可以获得这样的间隙。

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

  1. 添加选项plot = FALSE。
  2. 添加选项resolution = 0
  3. 添加选项fill = TRUE
  4. 在这种情况下,这三个选项中的任何一个都会产生干净的多边形。