我有一个简单的用例,用MongoDB和Spring-data连接器来解决。
现在,我已经做了这样的工作。
问题:如何正确存储和索引圆(点和半径)和多边形(多点)?
目前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);
}
}