我是靠谱客的博主 热心哑铃,这篇文章主要介绍百度地图——判断一个点是否在一个区域内?,现在分享给大家,希望可以做个参考。

       由于目前的一个项目涉及离线地图,经过查找资料论证,最终还是决定采用百度地图。在项目过程中,遇到一个比较实际的问题:怎么判断地图上的一个点(经纬坐标下)在一个多边形区域内?

      由于我采用的是百度地图JavaScript API v2.0接口,同时由于要做的是离线地图,百度地图离线版有一些功能函数是不能用的。针对上述问题,在网上查资料发现,百度的BMapLib.GeoUtils里面有一个函数isPointInPolygon可以用于解决这个问题,但是很遗憾,我用的接口函数版本并不能用这个函数,所以我研究了一下,经过修改写了一个满足条件的函数。下面是代码部分:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
function isInsidePolygon(point, polygon) { if(!(point instanceof BMap.Point) || !(polygon instanceof BMap.Polygon)) { return false; } var polygonBounds = polygon.getBounds(); if(!polygonBounds.containsPoint(point)) { return false; } var pts = polygon.getPath(); var N = pts.length; var boundOrVertex = true; var intersectCount = 0; var precision = 2e-10; var p1, p2;//neighbour bound vertices var p = point; p1 = pts[0];//left vertex for(var i = 1; i <= N; ++i) //check all rays { if(p.equals(p1)) { return boundOrVertex; //p is an vertex } p2 = pts[i % N];//right vertex if(p.lat < Math.min(p1.lat, p2.lat) || p.lat > Math.max(p1.lat, p2.lat)) //ray is outside of our interests { p1 = p2; continue;//next ray left point } if(p.lat > Math.min(p1.lat, p2.lat) && p.lat < Math.max(p1.lat, p2.lat)) { if(p.lng <= Math.max(p1.lng, p2.lng)) { if(p1.lat == p2.lat && p.lng >= Math.min(p1.lng, p2.lng)) { return boundOrVertex; } if(p1.lng == p2.lng) { if(p1.lng == p.lng) { return boundOrVertex; } else { ++intersectCount; } } else { var xinters = (p.lat - p1.lat) * (p2.lng - p1.lng) / (p2.lat - p1.lat) + p1.lng; if(Math.abs(p.lng - xinters) < precision) { return boundOrVertex; } if(p.lng < xinters) { ++intersectCount; } } } } else { if(p.lat == p2.lat && p.lng <= p2.lng) { var p3 = pts[(i+1) % N]; //next vertex if(p.lat >= Math.min(p1.lat, p3.lat) && p.lat <= Math.max(p1.lat, p3.lat)) { ++intersectCount; } else { intersectCount += 2; } } } p1 = p2;//next ray left point } if(intersectCount % 2 == 0) {//偶数在多边形外 return false; } else { //奇数在多边形内 return true; } }

参考资料:

http://api.map.baidu.com/library/GeoUtils/1.2/docs/symbols/BMapLib.GeoUtils.html(百度开发平台)

http://lbsyun.baidu.com/cms/jsapi/reference/jsapi_reference.html(百度地图JavaScript API v2.0类参考)

最后

以上就是热心哑铃最近收集整理的关于百度地图——判断一个点是否在一个区域内?的全部内容,更多相关百度地图——判断一个点是否在一个区域内内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部