原则2空间数据



我很难让这个doctrine2扩展正常工作。是的https://github.com/djlambert/doctrine2-spatial关于如何创建多边形的文档也不多。我已经把配置文件处理好了,但我正在努力创建实际的多边形。

array:564 [
   0 => array:2 [
    0 => -73.698313
    1 => 45.546876
   ]
   1 => array:2 [
     0 => -73.69813
     1 => 45.546916
   ]
   2 => array:2 [
     0 => -73.697656
     1 => 45.546899
   ]
    3 => array:2 [
      0 => -73.697413
      1 => 45.546899
   ]
 $poly = new Polygon($array);
[CrEOFSpatialExceptionInvalidValueException]  
  Invalid Polygon Point value of type "double"  

这就是我得到的实际错误。我试着创造分数,因为它显然不喜欢双打。

$p = new Point($coord);
$temp[] = $p;
$poly = new Polygon($temp);

[CrEOFSpatialExceptionInvalidValueException]                                    
  Invalid Polygon LineString value of type      "CrEOFSpatialPHPTypesGeometryPoint" 

在那之后,我想好了,让我们创建一个字符串对象并传递它

$line = new LineString($points);
$poly - new Polygon($line);
 [SymfonyComponentDebugExceptionContextErrorException]                                                                                                           
  Catchable Fatal Error: Argument 1 passed to    CrEOFSpatialPHPTypesAbstractPolygon::__construct() must be of the type array,   object given, called in /Library/Web        Server/Documents/mg/src/Momoa/ImmobilierBundle/Entity/geography/Quartier.php on line 131 and defined

我现在只是迷路了,我唯一想要的就是将多边形存储在数据库中,并调用空间函数,如CONTAINS。你有什么建议或其他事情可以让这一切顺利进行吗。

在挖掘源代码后,我发现了这个验证函数,这似乎是的问题

case (is_array($point) && count($point) == 2 && is_numeric($point[0]) &&    is_numeric($point[1])):
            return array_values($point);
            break;
        default:
            throw InvalidValueException::invalidType($this, GeometryInterface::POINT, $point);
    }

我理解这一点的方式是,扩展不接受具有十进制值的点?!啊,这是不是意味着我需要把坐标转换成2个整数?!

我会发布我找到的解决方案。基本上你需要创建你的多边形像这个

$line = new LineString($coords);
$poly = new Polygon(array($line));
//Or you can do it like this
$coords[0] = $coords;
$poly = new Polygon($coords);
//Following if you wanna use MBRContains or Contains
$dql = "SELECT p FROM polygon p WHERE MBRContains(p.geometry, GeomFromText('Point($lat $lng)'))=1";
//Dont use GeomFromText(:point), and then $point = new Point(array($lat,$lng));

祝大家好运,这个库很有用,但文档很糟糕!昨天花了一整天的时间!!

您可以通过在构造函数中传递数据来创建它。但问题是,你应该有一个有效的多边形数据:

$p = new Polygon([[[lat1, lng1], [lat2, lng2], [lat3, lng3], [lat1, lng2]]]);

确保在多边形中

  1. 有三个数组——线的数组,其中线是点的数组,每个点都是数组
  2. 路径是闭合的——最后一个点等于第一个点

MultiPolygon也是如此,但多了一个数组。F.e。[[[["32.699005219026645","-117.18222600929262"],["32.694563070816095","-117.18437177650453"],["32.697687043641835","-117.17149717323305"],["32.699005219026645","-117.18222600929262"]]]]

相关内容

  • 没有找到相关文章

最新更新