百度地图根据经纬度判断点是否在行政区内

有时候我们需要通过经纬度判断点是否在行政区内,这个问题的解答分为3步。

1.获取点的坐标,这些一般来自于系统的自动抓取,主要记录事件发生的地理位置。这可能涉及不同坐标系的转换。

2.获取行政区多边形信息,可利用百度地图API,用以下脚本




	
	获取地区轮廓线





输入省、直辖市或县名称: 3

3.批量判断点是否在多边形内。这里主要用到了R的spatialEco包里面的point.in.poly函数

require(sp)
   data(meuse)
   coordinates(meuse) = ~x+y
   meuse@data$test.na <- NA
 
   sr1=Polygons(list(Polygon(cbind(c(180114, 180553, 181127, 181477, 181294,  
     181007, 180409, 180162, 180114), c(332349, 332057, 332342, 333250, 333558,  
     333676, 332618, 332413, 332349)))),'10') #这些为多边形的坐标点, 第一列为经度信息,第二列为纬度信息
   sr2=Polygons(list(Polygon(cbind(c(180042, 180545, 180553, 180314, 179955, 179142,  
     179437, 179524, 179979, 180042), c(332373, 332026, 331426, 330889, 330683, 
     331133, 331623, 332152, 332357, 332373)))),'20')
   sr3=Polygons(list(Polygon(cbind(c(179110, 179907, 180433, 180712, 180752, 180329, 
     179875, 179668, 179572, 179269, 178879, 178600, 178544, 179046, 179110),
     c(331086, 330620, 330494, 330265, 330075, 330233, 330336, 330004, 
     329783, 329665, 329720, 329933, 330478, 331062, 331086)))),'30')
   sr4=Polygons(list(Polygon(cbind(c(180304, 180403,179632,179420,180304),
     c(332791, 333204, 333635, 333058, 332791)))),'40')
   sr=SpatialPolygons(list(sr1,sr2,sr3,sr4)) #这里将多边形信息放到同一个list里面
   polys=SpatialPolygonsDataFrame(sr, data.frame(row.names=c('10','20','30','40'), 
                                  PIDS=1:4, y=runif(4))) #此处通过row.names和上面的多边形匹配,加入PIDS作为多边形的标签,可以是行政区名字
   polys@data$pid <- polys@data$PIDS + 100 
 
 plot(polys)
   plot(meuse, pch=19, add=TRUE)  
pts.poly <-  point.in.poly(meuse, polys)
   head(pts.poly@data)
#我们获得的数据可能只有经纬度信息,但是匹配的时候,需要转换成坐标信息,此时,需要利用下面的函数
spdata1 <- SpatialPointsDataFrame(userdata[,c('user_lng','user_lat')], userdata, match.ID = F)

原始数据是这样的,

百度地图根据经纬度判断点是否在行政区内_第1张图片

匹配完之后,我们可以看到, 原始数据中匹配到了PIDS信息。


这就完成了

你可能感兴趣的:(研究类)