参考地址
线 LineString
{
"type": "LineString",
"coordinates": [ [1, 1],[2,1], [3,1]]
}
{
"type": "LineString",
"coordinates": [ [1, 1],[2,2], [3,3]]
}
{
"type": "LineString",
"coordinates": [ [1, 2],[2,3], [3,4]]
}
查询相交的线
db.geolocation.find({
"loc":{"$geoIntersects":{"$geometry":{
"type":"LineString",
"coordinates":[[1,2],[2,3],[3,4]]
}}}
})
面 Polygon
db.polygonCol.insert({
"name":"chengdu",
"loc":{
"type":"Polygon",
"coordinates":[[[1,2],[2,3],[3,2],[1,2]]]
}
})
db.polygonCol.insert({
"name":"shenzhen",
"loc":{
"type":"Polygon",
"coordinates":[[[4,2],[4,4],[5,4],[5,2]]]
}
})
查询有相交的数据
db.polygonCol.find({
"loc":{"$geoIntersects":{"$geometry":{
"type":"Polygon",
"coordinates":[[[1,2],[1,4],[2,4],[2,1],[1,2]]]
}}}
})
上面的查询语句只返回了name=shenzhen的数据
db.polygonCol.find({
"loc":{"$geoIntersects":{"$geometry":{
"type":"Polygon",
"coordinates":[[[2,2],[2,4],[5,1],[2,2]]]
}}}
})
返回两条数据
用java代码查询
import com.alibaba.fastjson.JSONObject;
import org.springframework.data.geo.Point;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.geo.GeoJsonPolygon;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class GEOTestService {
@Autowired
MongoTemplate mongoTemplate;
public List find(String jsonObject){
Query query = new Query();
GEOPolygon geoPolygon = JSONObject.parseObject(jsonObject, GEOPolygon.class);
List points = new ArrayList<>();
List>> coordinates = geoPolygon.getCoordinates();
List> coordinate = coordinates.get(0);
for (List doubles : coordinate) {
Point point = new Point(doubles.get(0), doubles.get(1));
points.add(point);
}
GeoJsonPolygon geoJsonPolygon = new GeoJsonPolygon(points);
query.addCriteria(Criteria.where("loc").intersects(geoJsonPolygon));
List list = mongoTemplate.find(query, JSONObject.class, "polygonCol");
return list;
}
}
@Data
public class GEOPolygon {
String type;
List>> coordinates;
}
查询参数:
{ "type":"Polygon", "coordinates":[[[2,2],[2,4],[5,1],[2,2]]] }
原文:https://www.cnblogs.com/james-roger/p/13207746.html