【问题标题】:Server-side checking of a point's existence inside a polygonal area using Google Maps API v3使用 Google Maps API v3 对多边形区域内是否存在点进行服务器端检查
【发布时间】:2013-01-18 08:05:08
【问题描述】:

逻辑是:用户正在编辑一个现有的多边形区域,其极值点存储在数据库中。修改后的坐标在数据库中更新。现在我需要找出修改后的多边形内是否存在某个点。为此,我假设我必须进行服务器端检查。客户端检查很容易通过 javaScript 完成,我已经完成了。我遇到的真正问题是在服务器端检查这个。有什么建议吗?

【问题讨论】:

  • 您使用的是什么数据库?使用 PostgreSQL/PostGIS 很容易。顺便说一句,您使用的所有标签都与服务器端计算无关。
  • 我使用的是 microsoft sql server 2008 R2。
  • 在这种情况下,我无法帮助您。对不起。多年前我放弃了微软。现在我只使用开源产品。
  • 如果我要使用您上面提到的数据库,那么程序是什么?因为我不太了解 PostgreSQL/PostGIS。能详细解释一下吗?
  • 空间数据库,例如 PostgreSQL/PostGIS,具有可以直接在查询中使用的功能,例如 ST_CONTAINS,记录在这里:postgis.refractions.net/documentation/manual-1.4/… - 我不知道 MSSQL server 2008 是否在空间上启用。

标签: javascript sql-server html google-maps google-maps-api-3


【解决方案1】:

我已经在 PHP 中用多边形实现了服务器端点。

<?php
//Point-In-Polygon Algorithm test parameters
$polySides  = 4; //how many corners the polygon has
$polyX    =  array(4,9,11,2);//horizontal coordinates of corners
$polyY    =  array(10,7,2,2);//vertical coordinates of corners
$x = 3.5;//point
//$y = 13.5;//Outside
$y = 3.5;//Inside

function pointInPolygon($polySides,$polyX,$polyY,$x,$y) {
  $j = $polySides-1 ;
  $oddNodes = 0;
  for ($i=0; $i<$polySides; $i++) {
    if ($polyY[$i]<$y && $polyY[$j]>=$y 
 ||  $polyY[$j]<$y && $polyY[$i]>=$y) {
    if ($polyX[$i]+($y-$polyY[$i])/($polyY[$j]-$polyY[$i])*($polyX[$j]-$polyX[$i])<$x)    {
    $oddNodes=!$oddNodes; }}
   $j=$i; }

  return $oddNodes; }

//Test 
 if (pointInPolygon($polySides,$polyX,$polyY,$x,$y)){
  echo "Is in polygon!";
}
else echo "Is not in polygon";
?>

这可以修改以适应选择的语言,即。 C#

【讨论】:

  • 谢谢。这适用于 GMap 吗?这适用于 Gmap 吗?我问是因为我的查询是如何进行服务器端检查。在您的方法中,您刚刚在代码本身中提供了坐标。这只是实现客户端方法。我可能错了。但这就是我看到你的方法时的想法。如果我是,请纠正我。还是谢谢。
  • 通常在客户端使用javascript很容易找到多边形中的点。为此,服务器端使用 Ajax 发送点坐标$x&amp;$y$polyX&amp;$polyY 来自数据库。 for ($i=0; $i&lt;$polySides; $i++) { 需要更改套装,例如 php PDO while($row = $stm-&gt;fetch())
  • 很高兴为您提供帮助。您在这个问题上需要更多帮助吗?
  • 该代码适用于整数值。是否适用于 float 和 double 值。代码已经在多边形的线上出现问题。请参考文章alienryderflex.com/polygon
  • 该代码适用于整数和浮点数,整数仅用于说明。您提到的问题是在绘制多边形时没有实现代码。如果您阅读文章并查看某个点是否在畸形多边形内,逻辑仍然成立。
猜你喜欢
  • 2013-12-03
  • 2011-09-25
  • 2012-11-23
  • 1970-01-01
  • 2017-05-03
  • 1970-01-01
  • 2012-01-01
  • 2013-09-07
  • 1970-01-01
相关资源
最近更新 更多