标签: point-in-polygon

如何确定2D点是否在多边形内?

我正在尝试在多边形算法中创建一个快速 2D点,用于命中测试(例如Polygon.contains(p:Point)).对于有效技术的建议将不胜感激.

graphics performance polygon collision-detection point-in-polygon

473
推荐指数
15
解决办法
26万
查看次数

SciPy创建2D多边形蒙版

我需要使用标准的Python包创建一个numpy 2D数组,它表示多边形的二进制掩码.

  • 输入:多边形顶点,图像尺寸
  • 输出:多边形的二进制掩码(numpy 2D数组)

(更大的上下文:我想使用scipy.ndimage.morphology.distance_transform_edt获取此多边形的距离变换.)

谁能告诉我怎么做?

python polygon scipy sage point-in-polygon

37
推荐指数
4
解决办法
3万
查看次数

如何在笛卡尔坐标系中绘制双面正多边形?

我一直在试图弄清楚如何编写一个简单的程序来计算x,y点来创建n个边的正多边形.有人可以给我一些不使用绘制多边形的预先存在的函数的代码示例吗?我想了解这个过程,我假设是这样的:

  1. 从半径和中心点开始选择一个角度
  2. 以某种方式计算离中心那个距离的x,y位置(怎么样?)
  3. 将360除以边数,移动该距离并从第一个x,y点绘制下一行
  4. 继续,直到角度= 360除以该数字.

假设我的假设是正确的,那么主要的是要了解如何计算x,y点.

更喜欢使用Visual Basic(甚至旧式Microsoft/Atari/Commodore BASIC)或英语中人类可读的一组步骤来回答答案.如果你必须用数学公式回答,用计算机语言来做,这样我就可以读它,即使用C或C++我也可以弄明白,但我不知道如何阅读数学符号.我正在使用的语言是类似Visual Basic的语言,除了线条图之外几乎没有图形基元.

language-agnostic polygon point-in-polygon

23
推荐指数
2
解决办法
2万
查看次数

在多边形PHP中查找点

我有一个几何数据类型为mysql,polygon的典型问题.

我有纬度和经度数组形式的多边形数据,例如:

[["x":37.628134,  "y":-77.458334],
["x":37.629867,   "y":-77.449021],
["x":37.62324,    "y":-77.445416],
["x":37.622424,   "y":-77.457819]]
Run Code Online (Sandbox Code Playgroud)

我有一个坐标为纬度和经度的点(顶点),例如:

$location = new vertex($_GET["longitude"], $_GET["latitude"]);
Run Code Online (Sandbox Code Playgroud)

现在我想找到这个顶点(点)是否在多边形内.我怎么能在PHP中这样做?

php mysql polygon point-in-polygon

22
推荐指数
5
解决办法
2万
查看次数

检查地理点是否在Python的多边形内部或外部

我正在使用python,我已经定义了地图上多边形的纬度和经度(以度为单位).我的目标是检查一般P坐标点是否x,y落在这样的多边形内.因此,我希望有一个功能,允许我检查这种情况并返回True或者False如果该点在多边形内部或外部.

在此输入图像描述

在这个例子中,点在外面,结果就是 False

问题:是否有允许达到目标的库/包?如果是,你推荐哪一个?你能给出一个如何使用它的小例子吗?

这是我到目前为止编写的代码:

import numpy as np

# Define vertices of polygon (lat/lon)
v0 = [7.5, -2.5] 
v1 = [2, 3.5]
v2 = [-2, 4]
v3 = [-5.5, -4]
v4 = [0, -10]
lats_vect = np.array([v0[0],v1[0],v2[0],v3[0],v4[0]])
lons_vect = np.array([v0[1],v1[1],v2[1],v3[1],v4[1]])

# Point of interest P
x, y = -6, 5 # x = Lat, y = Lon

## START MODIFYING FROM HERE; DO NOT MODIFY POLYGON VERTICES AND DATA TYPE …
Run Code Online (Sandbox Code Playgroud)

python polygon coordinate-systems point-in-polygon shapely

20
推荐指数
4
解决办法
2万
查看次数

检查点是否在由多个多边形/孔组成的空间对象中

我有一个SpatialPolygonsDataFrame,包含11589个"polygons"类对象.这些对象中的10699个正好由1个多边形组成,但其余对象由多个多边形(2到22)组成.

如果一个对象由多个多边形组成,则可能有三种情况:

  1. 有时,这些附加多边形描述了由"多边形"类对象中的第一个多边形描述的地理区域中的"洞".
  2. 有时,这些额外的多边形描述了额外的地理区域,即该区域的形状非常复杂,并通过将多个部分组合在一起来描述.
  3. 有时,它可能是两者的混合,1)和2).

Stackoverflow帮助我正确地绘制了这样一个空间对象(绘制由多个多边形定义的空间区域).

但是,我仍然无法回答如何确定一个点(由经度/纬度定义)是否在多边形中.

以下是我的代码.我试图point.in.polygonsp包中应用该函数,但是没有办法处理这样一个由多个多边形/孔组成的对象.

# Load packages
# ---------------------------------------------------------------------------
library(maptools)
library(rgdal)
library(rgeos)
library(ggplot2)
library(sp) 


# Get data
# ---------------------------------------------------------------------------
# Download shape information from the internet
URL <- "http://www.geodatenzentrum.de/auftrag1/archiv/vektor/vg250_ebenen/2012/vg250_2012-01-01.utm32s.shape.ebenen.zip"
td <- tempdir()
setwd(td)
temp <- tempfile(fileext = ".zip")
download.file(URL, temp)
unzip(temp)

# Get shape file
shp <- file.path(tempdir(),"vg250_0101.utm32s.shape.ebenen/vg250_ebenen/vg250_gem.shp")

# Read in shape file
map <- readShapeSpatial(shp, proj4string = CRS("+init=epsg:25832"))

# Transform the geocoding from UTM to Longitude/Latitude
map <- …
Run Code Online (Sandbox Code Playgroud)

r polygon spatial geospatial point-in-polygon

17
推荐指数
2
解决办法
1万
查看次数

是否可以使用JavasScript确定GeoJSON点是否在GeoJSON多边形内?

是否可以使用JavaScript(通过d3,topojson或任何其他方式)确定给定lat,lon中的GeoJSON点是否位于给定的GeoJSON多边形内?

例如,我可以根据这里的教程绘制一张显示英国国家的地图.

然后我有一些点有坐标但没有迹象表明它们在哪个国家.

我想显示每个国家的总点数.

我可以确定哪个国家/地区包含浏览器中的每个点,或者我是否需要使用PostGIS或类似方法在服务器上预处理我的点数据?

javascript point-in-polygon geojson d3.js topojson

17
推荐指数
3
解决办法
8616
查看次数

MySQL实现光线投射算法?

我们需要找到一种快速且相当准确的方法,用于谷地图上的纬度/长值和多边形的多边形点.经过一些研究 - 发现了一些关于mysql几何扩展的帖子,并且也实现了 -

SELECT id, Contains( PolyFromText( 'POLYGON(".$polygonpath.")' ) , PointFromText( concat( \"POINT(\", latitude, \" \", longitude, \")\" ) ) ) AS
            CONTAINS
FROM tbl_points
Run Code Online (Sandbox Code Playgroud)

然而,这并不适用于由大量点组成的多边形:(

在进行了一些更多的研究之后 - 遇到了一种称为Ray-casting算法的标准算法,但是在尝试在MySQL中开发查询之前,想要抓住机会,如果有人已经通过这个或者遇到了一个显示如何实现的有用链接MySQL/SQL-server中的算法.

因此,缩短它 - 问题是:

任何人都可以提供Ray/Cast-algorithm的MySQL/SQL-server实现吗?

其他细节:

  • 多边形是凹面,凸面或复杂的.
  • 定位快速执行超过100%的准确性.

mysql point-in-polygon raycasting

13
推荐指数
2
解决办法
4798
查看次数

扩展PiP算法的MySQL实现?

我需要在多边形 MySQL查询中提出一个观点.

我已经找到了这两个很棒的解决方案

http://forums.mysql.com/read.php?23,286574,286574

MySQL实现光线投射算法?

但是这些函数只能检查一个点是否在poly中.我有一个查询,其中PiP部分应该只是查询的一部分,并检查多边形内的x点.

像这样的东西:

$points = list/array/whatever of points in language of favour

SELECT d.name
FROM data AS d
WHERE d.name LIKE %red%
// just bla bla

// how to do this ?
AND $points INSIDE d.polygon
AND myWithin( $points, d.polygo ) // or
Run Code Online (Sandbox Code Playgroud)

UPDATE

我尝试使用这样的MBR函数:

SET @g1 = GeomFromText('Polygon((13.43971 52.55757,13.41293 52.49825,13.53378 52.49574, 13.43971 52.55757))');
SET @g2 = GeomFromText('Point(13.497834 52.540489)');
SELECT MBRContains(@g1,@g2);
Run Code Online (Sandbox Code Playgroud)

G2不应该在G1内,但MBR说它是.

php mysql point-in-polygon raycasting

13
推荐指数
1
解决办法
557
查看次数

Polygon Touch检测Google Map API V2

我想弄清楚如何最好地做到这一点,我有一张地图上Polygon画了一张.因为Google Maps API V2似乎没有在Polygon上进行触摸检测.我很想知道是否可以检测触点是否在Polygon内?如果是这样,我的主要目标是在地图上勾画状态,当用户点击该状态时,它将在自定义视图中显示更多细节.到目前为止,我能够捕获MapOnClick地图,但是当用户点击内部时,Polygon我想要polygon.getID()设置在地图上Toast.我是新手,所以如果我不够清楚,我会道歉.

googleMap.setOnMapClickListener(new OnMapClickListener() 
    {
        public void onMapClick(LatLng point) 
        {
        boolean checkPoly = true;

        Toast.makeText(MainActivity.this,"The Location is outside of the Area", Toast.LENGTH_LONG).show();
        }    
     });
     }
     }
   catch (Exception e) {
         Log.e("APP","Failed", e);
     }    
Run Code Online (Sandbox Code Playgroud)

好的,这就是我到目前为止所做的半工作

    private boolean rayCastIntersect(LatLng tap, LatLng vertA, LatLng vertB) {

    double aY = vertA.latitude;
    double bY = vertB.latitude;
    double aX = vertA.longitude;
    double bX = vertB.longitude;
    double pY = tap.latitude;
    double pX = tap.longitude;
     if …
Run Code Online (Sandbox Code Playgroud)

java android coordinates point-in-polygon google-maps-android-api-2

12
推荐指数
3
解决办法
1万
查看次数