使用 YAML 进行地理空间索引“未找到字段映射”

Posted

技术标签:

【中文标题】使用 YAML 进行地理空间索引“未找到字段映射”【英文标题】:Geospatial Indexing "No mapping found for field" with YAML 【发布时间】:2012-06-16 17:29:58 【问题描述】:

我在尝试使用 Doctrine2 的 YAML 格式的 OD 和 MongoDB 映射嵌入文档以进行地理空间索引时遇到问题: 我会尝试在“地点”文档中嵌入“坐标”文档,以便能够执行一些地理空间索引查询,但遇到了映射问题。

如官方文档所示: http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/indexes.html#geospatial-indexing

但我使用 YAML 映射格式... 并遇到了这个问题:

“在类'IntraMuros\CoreBundle\Document\Coordinates'中找不到字段'/Applications/MAMP/htdocs/intramuros-web/src/IntraMuros/CoreBundle/Resources/config/doctrine/Coordinates.mongodb.yml'的映射。”

这是我的 YAML 文件:Place.mongodb.yml,正确放置在 Symfony2 包的 Resources\config 目录中。

IntraMuros\CoreBundle\Document\Place:
  type: document
  db: intramuros
  collection: places
  repositoryClass: IntraMuros\CoreBundle\Repository\PlaceRepository
  fields:
    id:
      type: id
      id:  true
    name:
      type: string
    address:
      type: string
    coordinates:
      embedded: true
      type: one
      targetDocument: IntraMuros\CoreBundle\Document\Coordinates
      cascade: all
      strategy: set
    indexes:
      coordinates:
        keys:
          coordinates: 2d

IntraMuros\CoreBundle\Document\Coordinates:
  type: EmbeddedDocument
  db: intramuros
  fields:
    latitude:
      type: float
    longitude:
      type: float

这是我要使用的 php 文档类。

<?php

namespace IntraMuros\CoreBundle\Document;


/**
 * @Document(requireIndexes=true)
 * @Indexes(
 *     @Index(keys="coordinates"="2d")
 * )
 */
class Place

    /**
     * @Id
     */
    protected $id;

    /**
     * @String
     */
    protected $name;

    /**
     * @String 
     */
    protected $address;

    /**
     * @EmbedOne(targetDocument="IntraMuros\CoreBundle\Document\Coordinates")
     */
    protected $coordinates;

    public function __construct($latitude = NULL, $longitude = NULL)
    
        $coordinates = new Coordinates($latitude, $longitude);
        $this->setCoordinates($coordinates);
    

    public function getId()
    
        return $this->id;
    

    public function setName($name)
    
        $this->name = $name;
    

    public function getName()
    
        return $this->name;
    

    public function setAddress($address)
    
        $this->address = $address;
    

    public function getAddress()
    
        return $this->address;
    

    public function setCoordinates($coordinates)
    
        $this->coordinates = $coordinates;
    

    public function getCoordinates($toArray = false)
    
        if ($toArray) 
            if ($this->coordinates) 
                return $this->coordinates->toArray();
            
        
        return $this->coordinates;
    

    public function toArray()
    
        return array(
            'id' => $this->getId(),
            'name' => $this->getName(),
            'address' => $this->getAddress(),
            'coordinates' => $this->getCoordinates(true)
        );
    



/**
 * @EmbeddedDocument
 */
class Coordinates

    /**
     * @Float
     */
    protected $latitude;

    /**
     * @Float
     */
    protected $longitude;

    public function __construct($latitude = NULL, $longitude = NULL)
    
        $this->latitude = $latitude;
        $this->longitude = $longitude;
    

    public function setLatitude($latitude)
    
        $this->latitude = $latitude;
    

    public function getLatitude()
    
        return $this->latitude;
    

    public function setLongitude($longitude)
    
        $this->longitude = $longitude;
    

    public function getLongitude()
    
        return $this->longitude;
    

    public function toArray()
    
        return array(
            'latitude' => $this->getLatitude(),
            'longitude' => $this->getLongitude()
        );
    

非常感谢您, 鲍比。

【问题讨论】:

【参考方案1】:

您应该使用注释而不是 YML 来映射您的文档。

它会很容易工作。

祝你好运! ;)

【讨论】:

哦哦是的,它工作得很好!该死,我永远不会忘记使用@Annotations 进行数据库实体/文档映射的好习惯!!! 我不认为这是一个真正有建设性的答案。 ODM 提供 YML 映射,因此“使用另一种方式”对那些需要使用 YAML 表示法的人没有帮助(因为不想用实现细节污染域对象)

以上是关于使用 YAML 进行地理空间索引“未找到字段映射”的主要内容,如果未能解决你的问题,请参考以下文章

地理空间索引:GeoHash原理

使用 Doctrine MongoDB ODM 进行地理空间查询

地理空间索引的划分查询

通过 zip 进行 MongoDB 地理空间搜索

在 Cloudant 中使用 MapReduce 获取地理空间索引的结果

请问在使用arcgis中有sbn的文件,这是啥文件啊?