精华内容
下载资源
问答
  • 如何判断一个是否在多边形内部?(1)面积和判别法:判断目标多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。(2)夹角和判别法:判断目标与所有边的夹角和是否为360度,为360度则在...

    如何判断一个点是否在多边形内部?

    (1)面积和判别法:判断目标点与多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。

    (2)夹角和判别法:判断目标点与所有边的夹角和是否为360度,为360度则在多边形内部。

    (3)引射线法:从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点,则说明在内部,如果有偶数个交点,则说明在外部。

    具体做法:将测试点的Y坐标与多边形的每一个点进行比较,会得到一个测试点所在的行与多边形边的交点的列表。在下图的这个例子中有8条边与测试点所在的行相交,而有6条边没有相交。如果测试点的两边点的个数都是奇数个则该测试点在多边形内,否则在多边形外。在这个例子中测试点的左边有5个交点,右边有三个交点,它们都是奇数,所以点在多边形内。

    算法图解:

    关于这个算法的具体的更多图形例子:http://alienryderflex.com/polygon/

    参考代码:

    int pnpoly(int nvert, float *vertx, float *verty, float testx, floattesty)

    {int i, j, c = 0;for (i = 0, j = nvert-1; i < nvert; j = i++)

    {if ( ((verty[i]>testy) != (verty[j]>testy)) &&(testx< (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) +vertx[i]) )

    c= !c;

    }returnc;

    }

    来自一个polygon的内部实现:

    public boolIsInside(PointLatLng p)

    {int count =Points.Count;if(count < 3)

    {return false;

    }bool result = false;for(int i = 0, j = count - 1; i < count; i++)

    {var p1 =Points[i];var p2 =Points[j];if(p1.Lat < p.Lat && p2.Lat >= p.Lat || p2.Lat < p.Lat && p1.Lat >=p.Lat)

    {if(p1.Lng + (p.Lat - p1.Lat) / (p2.Lat - p1.Lat) * (p2.Lng - p1.Lng)

    {

    result= !result;

    }

    }

    j=i;

    }returnresult;

    }

    特殊情况:要检测的点在多变形的一条边上,射线法判断的结果是不确定的,需要特殊处理(If the test point is on the border of the polygon, this algorithm will deliver unpredictable results)。

    计算一个多边形的面积(area of a polygon):

    private static double SignedPolygonArea(Listpoints)

    {//Add the first point to the end.

    int pointsCount =points.Count;

    PointLatLng[] pts= new PointLatLng[pointsCount + 1];

    points.CopyTo(pts,0);

    pts[pointsCount]= points[0];for (int i = 0; i < pointsCount + 1; ++i)

    {

    pts[i].Lat= pts[i].Lat * (System.Math.PI * 6378137 / 180);

    pts[i].Lng= pts[i].Lng * (System.Math.PI * 6378137 / 180);

    }//Get the areas.

    double area = 0;for (int i = 0; i < pointsCount; i++)

    {

    area+= (pts[i + 1].Lat - pts[i].Lat) * (pts[i + 1].Lng + pts[i].Lng) / 2;

    }//Return the result.

    returnarea;

    }///

    ///Get the area of a polygon///

    ///

    ///

    public static double GetPolygonArea(Listpoints)

    {//Return the absolute value of the signed area.//The signed area is negative if the polygon is oriented clockwise.

    returnMath.Abs(SignedPolygonArea(points));

    }

    参考资料:

    http://alienryderflex.com/polygon/

    http://en.wikipedia.org/wiki/Point_in_polygon

    http://www.codeproject.com/Tips/84226/Is-a-Point-inside-a-Polygon

    展开全文
  • 根据项目需求,我们做了一个保护区的图层,图层的type是esriGeometryPolygon(多边形),然后用户要部署一个定点,我们需要...第四步,根据多边形对象的contains方法,返回true,就表示多边形内。 具体代码: ...

     根据项目需求,我们做了一个保护区的图层,图层的type是esriGeometryPolygon(多边形),然后用户要部署一个定点,我们需要知道用户的这个定点是否在保护区内,如果在的话,给出相应提示。

    第一步,在事件中加入这个保护区的图层,为featurelayer;

    第二步,调用view的when事件;

    第三步,在事件中调用featurelayer的queryfeatures()方法,获取多边形对象;

    第四步,根据多边形对象的contains方法,返回true,就表示点在多边形内。

    具体代码:https://download.csdn.net/download/qiulei_21/15447000

    展开全文
  • 有人可以为我清除这个 – 这是否意味着如果我存储了一个多边形并想要检测一个是否落在某个多边形内,它将不会100%准确?如果是这样,它会有多准确?此外,这需要的SQL,在我的头顶,它将是这样的东西:SELECT * WHERE ...

    这表明mysql GIS扩展尚未完全实现.有人可以为我清除这个 – 这是否意味着如果我存储了一个多边形并想要检测一个点是否落在某个多边形内,它将不会100%准确?如果是这样,它会有多准确?

    此外,这需要的SQL,在我的头顶,它将是这样的东西:

    SELECT * WHERE WITHIN(POINT(_LAT_ _LONG_), `polygon`)

    (其中polygon是一个表列,并且该点是根据给定的lat和long值构造的.)

    如果精度足够,你会如何找到接近给定Lat和Long的点?关于使用COS / SQRT或内置DISTANCE功能有不同的意见,这是最好的和/或最好的方法吗?

    实质上:

    > mySQL GIS扩展是否可以用于检测点是否在多边形内(必须相当准确,多边形不是定义的形状或大小).

    >如果是,那么检测这个的最佳方法是什么,另外想要的是找到给定Lat和Long附近点的最佳方法

    解决方法:

    根据docs,除Distance()和Related()之外的所有函数仅测试MBR关系.

    Currently, MySQL does not implement these functions according to the specification. Those that are implemented return the same result as the corresponding MBR-based functions. This includes functions in the following list other than Distance() and Related().

    不可能说MBR测试的准确性是否足够,因为这很大程度上取决于多边形的形状.

    “Are the mySQL GIS extensions up to the job for detecting if a point is within a polygon (has to be fairly accurate, polygon is not a defined shape or size)?”

    没有.

    如果可以,请使用PostGIS.

    标签:mysql,gis

    来源: https://codeday.me/bug/20190630/1340168.html

    展开全文
  • 本文将介绍使用mysql判断是否在指定多边形区域的方法,提供完整流程。1.创建测试表CREATE TABLE `zone` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `polygongeo` polygon NOT NULL, PRIMARY KEY (`id`))...

    本文将介绍使用mysql判断点是否在指定多边形区域内的方法,提供完整流程。

    1.创建测试表CREATE TABLE `zone` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `polygongeo` polygon NOT NULL, PRIMARY KEY (`id`)) ENGINE=MYISAM DEFAULT CHARSET=utf8;

    注意:空间索引只能在存储引擎为MYISAM的表中创建

    2.插入多边形数据insert into zone(polygongeo) values(POLYGONFROMTEXT('POLYGON((1 1,1 5,5 5,5 1,1 1))'));

    3.判断点是否在多边形区域

    测试 POINT(3, 4)select AsText(polygongeo) from zone where MBRWithin(POLYGONFROMTEXT('POINT(3 4)'),polygongeo);

    输出: POLYGON((1 1,1 5,5 5,5 1,1 1))

    表示点 POINT(3, 4) 在多边形区域内

    测试 POINT(6, 1)select AsText(polygongeo) from zone where MBRWithin(POLYGONFROMTEXT('POINT(6 1)'),polygongeo);

    输出: 空

    表示点 POINT(6, 1) 在多边形区域外

    总结:mysql空间查询并不很适合地图坐标,因此查询地图坐标可以使用mongodb实现,参考:《mongodb 判断坐标是否在指定多边形区域内的方法》

    本文讲解了如何通过mysql 判断点是否在指定多边形区域内 ,更多相关内容请关注php中文网。

    相关推荐:

    通过php 中的imagemagick来实现老照片效果

    如何通过php 计算多个集合的笛卡尔积的相关知识

    微信开发的分享接口 相关内容

    展开全文
  • 判断在直线的一侧 方法1: http://zhidao.baidu.com/question/47341112.html 已知P(0,0),Q(3,2)两,试判断P,Q是否在直线2x+3y=4的同一侧。 解:直线2x+3y=4即直线2x+3y-4=0把P、Q代入2x+3y-4得到2*0+3*0...
  • 来源:天极网作者:若水2008-05-15/01:29本文是采用射线法判断是否在多边形内的C语言程序。多年前,我自己实现了这样一个算法。但是随着时间的推移,我决定重写这个代码。参考周培德的《计算几何》一书,结合我的...
  • 把凸多边形的顶点以顺时针方向排列,可以得到一系列的向量 P1P2……PnP1 ...大于0 小于0 P在凸多边形内 小于0 大于0 P在凸多边形外 小于0 小于0 分别利用公式求夹角的余弦值,记PrPr+1点乘E夹角余弦值为
  • 多边形内随机生成多边形内随机生成这个问题可以理解为判断一个是否在多边形内。 最近项目有个需求,需要在地图区域随机生成一些。完成后效果如下: 因为项目使用是d3,所有优先考虑d3.js中多边形库。...
  • package algs.boundary;/*** Author: areful* Date: 2018/8/9*/public class Boundary {private final BoundaryPoint[] points;Boundary(BoundaryPoint[] points) {this.points = points;}boolean contains(Boundary...
  • 我没有使用你正在使用的方法,但我在 sp 中有一个在你的多边形上完美运行 .我挑选了你的代码并将 lat 和 lon 作为向量,将坐标作为值来满足函数要求 .但是你可以很容易地创建一个数据框并明确地将列用作lat / ...
  • 算法思路判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有...
  • /*** 检查多边形是否包含了某~* @param point* @return*/public boolean containsPoint(BYPoint point) {int verticesCount = vertices.size();int nCross = 0;for (int i = 0; i < verticesCount; ++ i) {...
  • 判断在凸多边形內

    2021-06-17 20:25:13
    判断在凸多边形內 判断在凸多边形内的算法有很多,可以参考链接3,个人尝试使用了同侧法,此处也只解析这个方法 算法原理: 同侧法是判断在向量哪一侧的一个方法,这个算法的概念是来自于参考文献一,...
  • 实现方案 先直接上代码,这个方法就是关键的操作(用于js中),用来判断是否在多边形内,先解释一下里面的变量及其含义 变量名 内容 length 多边形的数量 lianx 多边形内经度坐标数组 lianx 多边形内纬度坐标...
  • 当你说“a和b的那些在多边形之外的”是指所有多边形的外部还是多边形的外部?在这是:读入多边形点并创建与point_in_poly函数一起使用的适当数据结构的例程。在检查是否在任何多边形中的例行程序。在以下是从...
  • 本文实例为大家分享了python3射线法判断是否在多边形内的具体代码,供大家参考,具体内容如下#!/usr/bin/python3.4# -*- coding:utf-8 -*-def isPointinPolygon(point, rangelist): #[[0,0],[1,1],[0,1],[0,0]] [1...
  • 如何判断一个是否在多边形内部?(1)面积和判别法:判断目标多边形的每条边组成的三角形面积和是否等于该多边形,相等则在多边形内部。(2)夹角和判别法:判断目标与所有边的夹角和是否为360度,为360度则在...
  • 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况。该算法的思路很简单,就是从目标点出发引一条射线,看这条射线和多边形所有边的交点数目。如果有奇数个交点...
  • px: flag = not flag j = i i += 1 #射线穿过多边形边界的次数为奇数时点在多边形内 return (px,py) if flag else 'out' #根据数组下标奇偶数得到的坐标 def getpoint(a): i = 0 zhima = [] while i (a.split(',')...
  • 从P开始的射线穿过多边形边界次数,多边形的边界将多边形分为内部和外部。如果是偶数在多边形外部,否则奇数在多边形内部。如下图所示Pin为内部,Qout为外部,n为通过边界次数。 另如果射线经过顶点的时候,一...
  • 本文是采用射线法判断是否在多边形内的算法。但是随着时间的推移,我决定重写这个代码。参考周培德的《计算几何》一书,结合我的实践和经验,我相信,在这个算法的实现上,这是你迄今为止遇到的最优的代码。这是个...
  • 判断是否在任意多边形内(java)1.import java.util.ArrayList;2.3.public class Test {4.5. public static void main(String[] args) {6. double px = 113.0253;7. double py = 23.98049;8. ArrayListpolygonXA = ...
  • 本文实例为大家分享了java判断某个是否在所画范围的具体代码,供大家参考,具体内容如下IsPtInPoly.javapackage .../*** java判断某个是否在所画范围(多边形【isPtInPoly】/圆形【distencePC】)* @param...
  • #coding=UTF-8importcsvimportjson#是否在外包矩形def isPoiWithinBox(poi, sbox, toler=0.0001):#sbox=[[x1,y1],[x2,y2]]#不考虑在边界上,需要考虑就加等号if poi[0] > sbox[0][0] and poi[0] < sbox[1]...
  • 我的目标是检查坐标x,y的通用P是否落在这样的多边形内.因此,我希望有一个允许我检查这种情况的函数,如果该在多边形内部或外部,则返回True或False. 在此示例中,该在外部,因此结果将为False问题:是否有允许达到...
  • 以下是包含边缘的正确代码:def point_inside_polygon(x, y, poly, include_edges=True):'''Test if point (x,y) is inside polygon poly.poly is N-vertices polygon defined as[(x1,y1),...,(xN,yN)] or [(x1,y1),...
  • import java.util.ArrayList;public class Test {public static void main(String[] args) {double px = 113.0253;double py = 23.98049;ArrayList polygonXA = new ArrayList();ArrayList polygonYA = new ArrayLis...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 49,149
精华内容 19,659
关键字:

多边形的内点