|
本帖最后由 zhoumh1988 于 2015-3-5 14:06 编辑
- (function(h){
- /**
- * 多边形包含点
- * @param {} p 判断的点
- * @return {Boolean} true 包含,false不包含
- */
- h.Polygon.prototype.Contains = function(p) {
- var nCross = 0;
- var path = this.getPath();
- var nCount = path.length;
- for (var i = 0; i < nCount; i++) {
- var p1 = path[i];
- var p2 = path[(i + 1) % nCount];
- if (p1.lat == p2.lat) continue;
- if (p.lat < Math.min(p1.lat, p2.lat)) continue;
- if (p.lat >= Math.max(p1.lat, p2.lat)) continue;
- var x = parseFloat(p.lat - p1.lat) * parseFloat(p2.lng - p1.lng) / parseFloat(p2.lat - p1.lat) + p1.lng;
- if (x > p.lng) nCross++;
- }
- return (nCross % 2 == 1);
- };
- /**
- * 圆包含点
- * @param {} p 判断的点
- * @return {Boolean} true 包含,false不包含
- */
- h.Circle.prototype.Contains = function(p) {
- var c = this.getCenter();
- var radius = this.getRadius();
- var distance = p.distance(c);
- // var distance = Math.sqrt((p.lng - c.lng) * (p.lng - c.lng) + (p.lat - c.lat) * (p.lat - c.lat));
- return distance <= radius;
- };
- /**
- * 线包含点
- * @param {} p 判断的点
- * @return {Boolean} true 包含,false不包含
- */
- h.Polyline.prototype.Contains = function(p) {
- var path = this.getPath();
- var length = path.length;
- for (var i = 0; i < length - 1; i++) {
- var p1 = path[i], p2 = path[(i+1) % length];
- if(p2.lng == p1.lng) {
- if(p.lng != p1.lng) continue;
- else if(p.lat < p.lat < Math.max(p1.lat, p2.lat) && p.lat > p.lat < Math.min(p1.lat, p2.lat)) {
- return true;
- } else {
- continue;
- }
- } else {
- var k = (p2.lat - p1.lat) / (p2.lng - p1.lng),
- b = p2.lat - k * p2.lng;
- if ((p.lat - k * p.lng) == b) return true;
- }
- }
- return false;
- };
- })(AMap);
复制代码 此扩展方法是本人自己写的,仅供参考,如有BUG或者更好的方法,请回复一起探讨。 |
|