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

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

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

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>获取地区轮廓线</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3"></script>
<style type="text/css">
body{font-size:13px;margin:10px}
#container{width:800px;height:500px;border:1px solid gray}
</style>
</head>
<body>
<div id="container"></div>
<br />
输入省、直辖市或县名称:<input type="text" id="districtName" style="width:120px" value="重庆市">
<input type="button" οnclick="getBoundary()" value="获取轮廓线">
<textarea id="Div1" style="width:100%;height:200px"></textarea><script type="text/javascript">
var map = new BMap.Map("container");
map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
map.addControl(new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL}));
map.enableScrollWheelZoom();function getBoundary(){       var bdary = new BMap.Boundary();var name = document.getElementById("districtName").value;bdary.get(name, function(rs){       //获取行政区域map.clearOverlays();        //清除地图覆盖物  document.getElementById('Div1').innerText = rs.boundaries; var count = rs.boundaries.length; //行政区域的点有多少个for(var i = 0; i < count; i++){var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多边形覆盖物map.addOverlay(ply);  //添加覆盖物map.setViewport(ply.getPath());    //调整视野         }            });
}
</script>
</body>
</html>3

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

require(sp)data(meuse)coordinates(meuse) = ~x+ymeuse@data$test.na <- NAsr1=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)

原始数据是这样的,

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

这就完成了

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

  1. 百度地图根据经纬度坐标,显示汽车行驶轨迹

    继上一篇:百度地图根据经纬度坐标,显示轨迹 又进行了些许优化.将固定点为变为汽车行驶轨迹并添加点位. 上一篇链接:https://blog.csdn.net/qq_36865945/article/d ...

  2. js 根据百度地图提供经纬度计算两点距离

    正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离: var map = new BMap.Map('map_canvas'); map.getDistance(point1 ,p ...

  3. 百度地图根据经纬度计算距离php,详解js根据百度地图提供经纬度计算两点距离...

    正常在使用百度地图时,我们可以通过BMap的实例对象提供的方法计算距离: var map = new BMap.Map('map_canvas'); map.getDistance(point1 ,p ...

  4. 百度地图根据经纬度获取地址

    2019独角兽企业重金招聘Python工程师标准>>> 百度地图根据经纬度获取地址 查询地址要内部实现MKSearchListener接口 Java代码 public class S ...

  5. 百度地图获取经纬度后,获取区域代码和地址

    百度地图获取经纬度后,获取区域代码和地址: function getdistrct_code($location){$url ="api.map.baidu.com/geocoder/v2/ ...

  6. vue中调用百度地图 获取经纬度

    项目中,需要实现获取当前位置的经纬度,或者搜索某个位置并获取经纬度信息,我使用的的是vue,地图使用的是百度地图. 默认自动获取当前位置经纬度 拖动小红标 获取经纬度 关键词 查询获取经纬度 前期准备 ...

  7. 百度地图根据经纬度获取国家、州市等地址相关信息

    这是一个简单的经纬度转换成具体地址信息,支持国际和国内经纬度转换. 效果如下图所示: function xmlToArray2($xml) { // 将XML转为array $array_data = ...

  8. vue项目调用百度地图定位,判断当前位置是否在目标位置范围内

    之前用vue做了一个百度地图定位功能,判断是否当前位置在目标位置范围内的小功能,类似这样: 直接上代码 百度地图定位,设置目标位置范围,判断当前位置到目标位置的距离,BDMap.vue <tem ...

  9. 百度地图根据经纬度计算瓦片行列号

    根据百度经纬度坐标计算该点所在瓦片的行列号的算法好像并没有公开,网上相关资料很少. 通过研究百度地图JavaScript API源代码(经过混淆后的),大致了解计算过程,现将具体过程解释如下: 1.J ...

最新文章

  1. CSS样式:background-position word-wrap是控制换行的。
  2. TIME_WAIT和CLOSE_WAIT状态
  3. anaconda使用python写游戏,python娱乐时间:Anaconda方式搭建python开发环境
  4. 数据结构——树的理解路线(总)
  5. 吴恩达《机器学习》学习笔记十四——应用机器学习的建议实现一个机器学习模型的改进
  6. 关于计算机硬盘属性对话框中,计算机文化基础练习题(2).docx
  7. 南阳OJ 16 矩形嵌套
  8. Atitit 品牌之道 attilax著 艾龙 著 1. 第1章 品牌和品牌管理 1 2. 第Ⅱ篇 制定品牌战略 2 3. 第Ⅲ篇 品牌营销活动:设计与执行 2 4. 第Ⅳ篇 评估和诠释品牌绩效 3
  9. php 生成导出excel,PHP导出生成EXCEL文件
  10. selenium 实战之 A级纳税人信息
  11. 计算机怎么算折扣价格,5折怎么算-商场打折背后的猫腻:满100减50和打5折哪个更划算?...
  12. Qt error: 找不到 -lGL
  13. 乐2 体验包 Android 7,乐视2/Pro Flyme6.7.5.19R体验版
  14. 聚合资金托管+支付 联动优势推出房产行业线上产品“海金居”
  15. 关于神经网络的轻量化
  16. SVM简单非线性分类,画出分类面与支持向量(MATLAB)
  17. Scons安装和使用
  18. Go语言学习之net包(The way to go)
  19. OBS键盘插件自定义diy
  20. 10gR2--EMCA常用命令说明

热门文章

  1. win10蓝牙无法连接,可以尝试在此Windows设备上打开蓝牙
  2. ActiveSync同步Emulator
  3. Proxy returns “HTTP/1.1 407 Proxy Authentication Required
  4. ThreeJS之让一个模型围绕自己的轴心旋转
  5. 简书模拟登陆缺陷!!!
  6. Debian内核防毒AntiVir安装
  7. 监控FTP服务状态,并自动重启servU
  8. 全球人口突破80亿!免费分享全球人口分布数据
  9. E.03.25 Chinese Video Company Bilibili Eyes $2.8 Billion Hong Kong Share Sale
  10. (MACN小米AI 轻量化SISR)A Matrix-in-matrix Neural Network for Image Super Resolution