mongodb 점이 다각형에 있는지 확인합니다.
mongo 2.6
저장된 다각형의 양이 어느 정도 있습니다.제 말도 일리가 있어요.이 점이 저장된 다각형에 적합한지 여부를 확인합니다.
문서 예제
{ ..., "polygons" : [ [ 17.60083012593064, 78.18557739257812 ], [ 17.16834652544664, 78.19381713867188 ], [ 17.17490690610013, 78.739013671875 ], [ 17.613919673106714, 78.73489379882812 ] ], ... }
이미 거의 같은 질문이 있습니다. Mongodb : 점이 저장된 폴리곤 안에 있는지 확인합니다.그러나 이 쿼리는 적어도 하나의 결과(예를 들어)를 제공해야 하지만 그렇지 않습니다.
db.areas.find( { polygons : { $geoIntersects : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } )
사실 제가 다각형의 테두리에 있는 점을 선택했다면, 그렇습니다.
$geoWithin
방법은 작업을 수행해야 합니다.mondodb
문서에 나와 있습니다.
하지만 이러한 쿼리는 작동하지 않습니다.
db.areas.find( { polygons : { $geoWithin : { $geometry : {type:"Point",coordinates:[17.3734, 78.4738]} } } } ) - not supported with provided geometry
db.tradeareas.find( { polygons : { $geoWithin : { $geometry : {type:"Polygon",coordinates: inside_polygon} } } } ) - BadValue bad geo query
뭔가 놓친 것 같은데 무엇이 어디에 있는지 이해할 수가 없습니다.
도움을 주시면 감사하겠습니다.
그것은 주문과 관련이 있는 것 같습니다.사용 중인 경우$geoWithin
다각형 안에서 점을 찾으려 할 때, 그 안에 있는 것은 검색 중인 필드입니다.하지만,$geoIntersects
각 방향으로 작동하므로 다각형 내부 또는 점을 포함하는 다각형 내부의 점을 검색할 수 있습니다. 예:
db.geom.insert({
"polygons": {
"type":"Polygon",
"coordinates": [[
[ 17.60083012593064, 78.18557739257812],
[ 17.16834652544664, 78.19381713867188],
[ 17.17490690610013, 78.739013671875],
[ 17.613919673106714, 78.73489379882812],
[ 17.60083012593064, 78.18557739257812]
]]
}
});
db.geom.find({
polygons: {
$geoIntersects: {
$geometry: {
"type": "Point",
"coordinates": [17.3734, 78.4738]
}
}
}
});
또한 다각형의 첫 번째 점을 끝에서 반복해야 합니다.마지막 쌍을 제거하면 다음과 같은 값을 얻을 수 있습니다.$err
:
쿼리를 표준화할 수 없습니다. 잘못된 값 잘못된 지오쿼리" 오류입니다.
MongoDB는 유효하지 않은 지오메트리를 삽입할 수 있고 2dsphere 인덱스를 추가하거나 교차/내부/근접 쿼리를 수행할 때만 불만을 제기하는 것으로 보이는데, GeoJSON은 유효한 지오메트리가 아닌 유효한 JSON일 수 있기 때문에 합리적이라고 생각합니다.
John Powell에게 감사합니다. 여기 동일한 쿼리의 C# 드라이버 버전이 있습니다.
var geometry = new BsonDocument
{
{ "type", "Point" },
{ "coordinates",
new BsonArray(new double[]{ Longitude,
Latitude} ) }
};
var geometryOperator = new BsonDocument { { "$geometry", geometry } };
var geoIntersectsOperator = new BsonDocument { { "$geoIntersects", geometryOperator } };
var findField = new BsonDocument { { "geometry", geoIntersectsOperator } };
var results = MyCollection.Find(findField).ToList();
Java에서는 이러한 방식으로 수행할 수 있습니다.
@Autowired
private MongoOperations mongoOpertions;
public void pointIntersect(GeoJsonPoint gp){
Query query = new Query();
query.addCriteria(Criteria.where("geometry").intersects(gp));
List<ResultDtoType> result = mongoOpertions.find(query, ResultDtoType.class);
//perform any action with result
}
언급URL : https://stackoverflow.com/questions/24578363/mongodb-check-if-point-is-in-polygon
'programing' 카테고리의 다른 글
표 열의 모든 셀을 특정 값으로 설정 (0) | 2023.07.09 |
---|---|
CSS 불투명도는 텍스트가 아닌 배경색만 가능합니까? (0) | 2023.07.09 |
관련 없는 구성 요소 간의 Vue 통신 (0) | 2023.07.09 |
"git remote add..." 및 "git push origin master"란 무엇입니까? (0) | 2023.07.09 |
DataReader 개체에서 필드의 데이터 유형 찾기 (0) | 2023.07.09 |