【问题标题】:Spring data Mongodb Store and query GIS Circle and PolygonSpring data Mongodb 存储和查询 GIS Circle 和 Polygon
【发布时间】:2016-02-06 03:15:16
【问题描述】:

我有一个使用 MongoDB 和 Spring-data 连接器来解决的简单用例。

  • 存储多边形或圆(带半径的简单点)
  • 检查给定点是否在多边形/圆内

现在,我已经这样做了:

  • 将 Polygon 作为 geoJSON 存储到文档中
  • 应用 2dSphere 索引
  • 以 Polygon geoJSON 类型存储的多边形
  • 圆将单个点和半径存储为单独的参数
  • 我可以使用 $geoIntersects 查询多边形
  • 我可以使用带有聚合的 $geoNear 进行查询

问题:

  • 存储和索引圆(点和半径)和多边形(多个点)的正确方法是什么?
  • 如何进行单个查询来检查给定点是否位于多边形/圆形中?

【问题讨论】:

  • 你能解释一下,目前你是如何插入多边形的吗?

标签: spring mongodb gis polygon geometry


【解决方案1】:

目前 Spring Data 不支持使用 MongoRepository 接口的这种查询($geoIntersects),但这对我有用: 假设我们有以下文档

@Document
public class AreaTown {
    @Id
    private String id;
    private String name;

    @GeoSpatialIndexed(type = GeoSpatialIndexType.GEO_2DSPHERE)
    private GeoJsonPolygon  area;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public GeoJsonPolygon getArea() {
        return area;
    }

    public void setArea(GeoJsonPolygon area) {
        this.area = area;
    }

    @Override
    public String toString() {
        return "AreaTown [id=" + id + ", name=" + name + ", area=" + area + "]";
    }

}

应用自定义查询,我能够找到一个点是否在多边形内

@SpringBootApplication
public class MongoGeoJsonApplication   implements CommandLineRunner{

    public static void main(String[] args) {
        SpringApplication.run(MongoGeoJsonApplication.class, args);
    }



    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public void run(String... args) throws Exception {  

        Point inside  = new Point(-97.406285,18.481136);
        Query query = new Query().addCriteria(Criteria.where("area").intersects(new GeoJsonPoint(inside)));
        List<AreaTown> list = mongoTemplate.find(query, AreaTown.class);
        System.out.println(list);



    }
}

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 2014-10-04
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多