自2018年10月18日起,高德开发者论坛除车机板块外,其他板块将停止发帖与维护,如您有使用问题请 提交工单 联系我们,感谢您的理解。

查看: 572|回复: 7
打印 上一主题 下一主题

【JS API】如何判断一个点是否在一个多边形内呢?

[复制链接]
最佳答案
0 

1

主题

1

帖子

11

积分

新手上路

Rank: 1

积分
11
跳转到指定楼层
楼主
发表于 2014-9-27 11:11:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
跪求如何判断一个点是否在一个多边形内呢?
回复

使用道具 举报

最佳答案
0 

1

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
沙发
发表于 2014-9-28 08:17:48 | 只看该作者
顶楼上,不知道有没有这方面的api
回复 支持 反对

使用道具 举报

最佳答案
0 

2

主题

9

帖子

44

积分

新手上路

Rank: 1

积分
44
板凳
发表于 2014-9-29 09:34:10 | 只看该作者
有的,

已有实例化了的多边形对象:polygon
var point = new AMap.LngLat(longitude,latitude);; //假设这个点已经有经纬度

polygon.getBounds.contains(point) 即可获取,返回boolean型

说明楼上二位没有仔细研究过API文档,里面有详细说明的
回复 支持 反对

使用道具 举报

地板
发表于 2014-9-29 17:42:46 | 只看该作者
网上搜下,有脚本的
修改个人资料
回复 支持 反对

使用道具 举报

最佳答案
0 

0

主题

1

帖子

4

积分

新手上路

Rank: 1

积分
4
5#
发表于 2014-10-1 02:33:11 | 只看该作者
wltj920 发表于 2014-9-29 09:34
有的,

已有实例化了的多边形对象:polygon

这样子好像不精确,polygon.getBounds()方法会把多边形转化为一个四边行的区域
回复 支持 反对

使用道具 举报

最佳答案
0 

1

主题

3

帖子

21

积分

新手上路

Rank: 1

积分
21
6#
发表于 2014-10-8 15:31:36 | 只看该作者
//判断点是否在多边形外
var isPointInPolygon = function(o, l) {
    if (! (o instanceof AMap.LngLat) || !(l instanceof AMap.Polygon)) {
        return false;
    }
    var k = l.getBounds();
    if (!k.contains(o)) {
        return false;
    }
    var t = l.getPath();
    var h = t.length;
    var n = true;
    var j = 0;
    var g = 2e-10;
    var s, q;
    var e = o;
    s = t[0];
    for (var f = 1; f <= h; ++f) {
        if (e.equals(s)) {
            return n;
        }
        q = t[f % h];
        if (e.lat < Math.min(s.lat, q.lat) || e.lat > Math.max(s.lat, q.lat)) {
            s = q;
            continue;
        }
        if (e.lat > Math.min(s.lat, q.lat) && e.lat < Math.max(s.lat, q.lat)) {
            if (e.lng <= Math.max(s.lng, q.lng)) {
                if (s.lat == q.lat && e.lng >= Math.min(s.lng, q.lng)) {
                    return n;
                }
                if (s.lng == q.lng) {
                    if (s.lng == e.lng) {
                        return n;
                    } else {++j
                    }
                } else {
                    var r = (e.lat - s.lat) * (q.lng - s.lng) / (q.lat - s.lat) + s.lng;
                    if (Math.abs(e.lng - r) < g) {
                        return n;
                    }
                    if (e.lng < r) {++j;
                    }
                }
            }
        } else {
            if (e.lat == q.lat && e.lng <= q.lng) {
                var m = t[(f + 1) % h];
                if (e.lat >= Math.min(s.lat, m.lat) && e.lat <= Math.max(s.lat, m.lat)) {++j;
                } else {
                    j += 2;
                }
            }
        }
        s = q;
    }
    if (j % 2 == 0) {
        return false;
    } else {
        return true;
    }
};
回复 支持 反对

使用道具 举报

最佳答案
5 

22

主题

760

帖子

1877

积分

超级版主

Rank: 8Rank: 8

积分
1877
QQ
7#
发表于 2014-10-9 11:50:11 | 只看该作者
Akuan01 发表于 2014-10-8 15:31
//判断点是否在多边形外
var isPointInPolygon = function(o, l) {
    if (! (o instanceof AMap.LngLat)  ...

感谢分享,如果可以的话,请开一个单独的帖子,可以作为案例分享~~~
回复 支持 反对

使用道具 举报

最佳答案
0 

9

主题

111

帖子

349

积分

中级会员

Rank: 3Rank: 3

积分
349
8#
发表于 2014-10-9 15:48:48 | 只看该作者
本帖最后由 zhoumh1988 于 2014-10-9 15:56 编辑

http://lbsbbs.amap.com/forum.php ... &extra=#pid1788
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|小黑屋|高德开发者论坛

Copyright ©2014 高德开发者论坛.All Rights Reserved |京ICP证070711号

意见反馈 常见问题 服务条款 联系我们
快速回复 返回顶部 返回列表