我正在搞乱Geodjango,我只是想在数据库中添加一个简单的多边形字段,然后在其上运行一个多边形点,以确保一切正常.
这是我在views.py中的代码:
#adding a polygon
pe = PolygonExample.objects.create(name="uk_polygon", poly="POLYGON((58.768200159239576, -12.12890625, 58.49369382056807 1.1865234375, 49.18170338770662 -12.9638671875, 50.2612538275847 5.537109375))" )
#doing the point-in-polygon check
result = PolygonExample.objects.filter(poly__contains='POINT(52.696361078274485 -0.87890625)')
Run Code Online (Sandbox Code Playgroud)
这是我在models.py中的内容:
class PolygonExample(models.Model):
name = models.CharField(max_length=16, db_index=True)
poly = models.PolygonField()
objects = models.GeoManager()
Run Code Online (Sandbox Code Playgroud)
但是当我尝试添加多边形(PolygonExample.objects.create)时,我收到一个错误:"检查从GEOS C函数"GEOSWKTReader_read"返回的Geometry时遇到错误.
我添加多边形的代码是错误的吗?我不确定我是否理解如何直接插入纬度/经度坐标.
或者这是GEOS安装错误?
谢谢.
我在php中使用了一个多边形点检查,但是我遇到了重大错误 - 因为在多边形中不存在的点会出现在内部.
我的基本功能在下面输入(在这里找到,从一个类修改为一个简单的函数:http://www.assemblysys.com/dataServices/php_pointinpolygon.php).我唯一能想到的是某种地方的某种舍入错误?
作为一个例子,我试图确定一个点是否在中央公园,一个简单的广场,但我从公园外的点得到肯定.
感谢您的任何见解,
-D
$central_park = array('40.768109,-73.981885', '40.800636,-73.958067', '40.796900,-73.949184', '40.764307,-73.972959');
$test_points = array('40.7546755,-73.9758343', '40.764405,-73.973951', '40.7594219,-73.9733896', '40.768137896318315,-73.9814176061', '40.7982394,-73.9523718', '40.685135,-73.973562', '40.7777062,-73.9632719', '40.764109,-73.975948', '40.758908,-73.9813128', '40.7982782,-73.9525028', '40.7463886,-73.9817654', '40.7514592,-73.9760405', '40.7514592,-73.9760155', '40.7514592,-73.9759905', '40.7995079,-73.955431', '40.7604354,-73.9758778', '40.7642878,-73.9730075', '40.7655335,-73.9800484', '40.7521678,-73.9777978', '40.7521678,-73.9777728')
function pointStringToCoordinates($pointString) {
$coordinates = explode(",", $pointString);
return array("x" => trim($coordinates[0]), "y" => trim($coordinates[1]));
}
function isWithinBoundary($point,$polygon){
$point = pointStringToCoordinates($point);
$vertices = array();
foreach ($polygon as $vertex) {
$vertices[] = pointStringToCoordinates($vertex);
}
// Check if the point is inside the polygon …Run Code Online (Sandbox Code Playgroud) 我试图找出一个点是否在 3D 多边形中。我使用了另一个我在网上找到的脚本来处理很多使用光线投射的 2D 问题。我想知道如何将其更改为适用于 3D 多边形。我不会看那些有很多凹面或孔洞或任何东西的非常奇怪的多边形。这是python中的2D实现:
def point_inside_polygon(x,y,poly):
n = len(poly)
inside =False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xinters = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
if p1x == p2x or x <= xinters:
inside = not inside
p1x,p1y = p2x,p2y
return inside
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!谢谢你。
假设我有数百个甚至数千个 GPS 坐标、纬度和经度,它们构成了一个国家/地区的边界。
我也有我目前的位置纬度和经度。
我如何确定(使用 C#,为 Windows10 UWP 编程)我的位置是否在某个国家/地区的边界内?
EG 假设我拥有构成下图中红线的所有点。如果我在 X 位置,我的函数将返回 true。如果我在 Y 位置,我的函数将返回 false。
我有一组形成闭合路径的位置(类似于多边形)。有什么方法可以检查封闭路径内是否存在特定的经度和纬度?
我正在尝试找到一种有效的方法来计算python中从点到多边形的最近边缘的距离.我认为它的形状很完美,但它只计算点在多边形外的距离.我想过opencv,它有一个内置函数,但它需要整数坐标(我不能离散我的数据).多边形不保证是凸的.
我有一个由 6 个曲面定义的 3d 封闭体积,每个曲面都有 4 个顶点。
所以,我想检查给定的点是在体积内还是在体积外。我想到的一个解决方案是:
从给定点绘制一条随机线并检查它与包围体积的表面相交的位置。由于我使用矢量代数来计算线和曲面的交点,因此交点可以位于 3d 无限曲面上的任何位置。
现在我检查这个交点是否恰好位于位于无限平面上并包围体积的那个面上。
为此,我再次想从我的交点到体积的各个面绘制一条随机光线,并检查点是否位于面上。
But I don't know how to check this feature of locating if it is on the surface
or not. Can someone please suggest how can I do it.
P.S. One way of doing this was extending ray casting to 3d but that involves
comparison of slopes to check the orientation. So how can I check orientation
of 3 points in 3d space. I have 4 vertices which …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个函数,True如果给定的(x,y)点在凸多边形内,它将返回.我试图使它没有numpy或任何类似的导入,只是纯python代码.
我已经找到了一个示例解决方案,乍一看似乎没问题,但它无法正常工作,我无法弄清楚原因.代码如下:
def point_in_poly(x,y,poly):
n = len(poly)
inside = False
p1x,p1y = poly[0]
for i in range(n+1):
p2x,p2y = poly[i % n]
if y > min(p1y,p2y):
if y <= max(p1y,p2y):
if x <= max(p1x,p2x):
if p1y != p2y:
xints = (y-p1y)*(p2x-p1x)/(p2y-p1y)+p1x
if p1x == p2x or x <= xints:
inside = not inside
p1x,p1y = p2x,p2y
return inside
Run Code Online (Sandbox Code Playgroud)
如果我测试它为(9,9),对于下面的多边形,它给了我True:
polygon = [(0,10),(10,10),(10,0),(0,0)]
point_x = 9
point_y = 9
print point_in_poly(point_x,point_y,polygon)
Run Code Online (Sandbox Code Playgroud)
但是当我改变多边形点的顺序时,对于同一点,它给了我False:
polygon = [(0,0), …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用fgets和sscanf读取多行不同长度的顶点.
(1,6),(2,6),(2,9),(1,9)
(1,5)
Run Code Online (Sandbox Code Playgroud)
我的程序进入第一个顶点内的无限循环.
char temp3[255];
while(fgets(temp3, 255, fp)!= NULL){
printf("Polygon %d: ", polycount);
while(sscanf(temp3, "(%d,%d)", &polygonx[polycount][vertcount], &polygony[polycount][vertcount]) != EOF){
sscanf(temp3, ",");
printf("(%d,%d),",polygonx[polycount][vertcount], polygony[polycount][vertcount]);
vertcount++;
}
vertcounts[polycount] = vertcount;
vertcount = 0;
polycount++;
}
Run Code Online (Sandbox Code Playgroud)
我必须能够将顶点的x和y值提供给多边形数组,所以我坚持使用sscanf.我也遇到了问题,因为我无法在互联网上找到每行扫描不同数量元素的内容.
我需要一种算法,它可以判断Point是否位于凸包(C / C ++)的内部/外部或边界(边缘)上。
凸包被描述为点X,Y,整数,连接从i到i + 1的数组。
目前,我使用绕组数算法,描述如下:http : //geomalgorithms.com/a03-_inclusion.html它是函数“ wn_PnPoly()”。
如果Point正好位于凸面的边界(边缘)上,是否有可能以及如何使绕组数算法检测到?还有另一种算法可以做到这一点吗?(需要在整数上工作)。
我有以下 GeoJSON 数据文件,其中包含一个带坐标的多边形。
[
{
"geometry": {
"type": "Polygon",
"coordinates":
[
[
[
9.137248,
48.790411
],
[
9.137248,
48.790263
],
[
9.13695,
48.790263
],
[
9.137248,
48.790411
]
]
]
}
}
]
Run Code Online (Sandbox Code Playgroud)
在 的帮助下org.geotools.geojson.geom.GeometryJSON,我正在解析com.vividsolutions.jts.geom.Polygon类中的 JSON 坐标,如下所示。并检查是否Coordinate(9.13710, 48.790360)在这个多边形内。
GeometryJSON g = new GeometryJSON();
com.vividsolutions.jts.geom.Polygon polygon = g.readPolygon(new File(fileLocation));
System.out.println("Type="+polygon.getGeometryType());
GeometryFactory gf = new GeometryFactory();
boolean pointIsInPolygon = polygon.contains(gf.createPoint(new Coordinate(9.13710, 48.790360)));
System.out.println("Point is in polygon="+pointIsInPolygon);
Run Code Online (Sandbox Code Playgroud)
但是我的程序总是给我下面的结果,即给定的坐标不在多边形中。
类型=多边形
a) 你能看出为什么pointIsInPolygon是假的。我错过了什么吗?
b) 我应该在这里给出什么坐标,所以 …