나는 fooCollection
콜렉션을 가지고있는 MongoDB 데이터베이스를 가지고있다. 이 컬렉션에는 바운딩 폴리곤의 방식으로 지형 공간 데이터가 포함 된 문서가 있습니다. 내 응용 프로그램에서 C# MongoDB 드라이버를 사용하고 있습니다. 나는 그것이 대부분의 사람들과 잘 작동하지만 특정 공간 질의가있는 문서를 찾지 못하고있는 것으로 나타났습니다. 내가 위반 한 문서를 제외하고는 해당 문서를 비우고 쿼리를 직접 실행하여 문서를 찾으려고했습니다.
내 문서는 다음과 같습니다
{
"_id" : UUID("12345678-62d9-4024-86dc-123456789012"),
"polygon" : {
"type" : "Polygon",
"coordinates" : [ [
[ 18.414846, -33.9699577 ],
[ 18.414846, -26.0991189 ],
[ 31.0330578, -26.0991189 ],
[ 31.0330578, -33.9699577 ],
[ 18.414846, -33.9699577 ]
] ]
},
"foo": "bar"
}
나는 또한 컬렉션이 인덱스를 가지고 :
다음 쿼리가 제대로이 문서 반환[
1,
{
"polygon" : "2dsphere"
},
"polygon_2dsphere",
"data.fooCollection",
3
]
그러나
db.getCollection('fooCollection').find({
"polygon": {
$geoIntersects: {
$geometry: {
type: "LineString",
coordinates: [[24.7698287, -28.7353533],[28.0423, -26.19793]]
}}}})
을, 이 검색어는 그렇지 않습니다.
db.getCollection('fooCollection').find({
"polygon": {
$geoIntersects: {
$geometry: {
type: "LineString",
coordinates: [[27.7706902, -26.1091189],[28.0423, -26.19793]]
}}}})
이러한 세 가지 기하학을 플로팅하면 실제로 작동하지 않는 이유는 알 수 없습니다.
- 두 줄은 작업 라인이 더 이상
- 작동 라인은 90 °와 180 ° 사이의 다른 ° 0 ° 내지 90의 베어링을 갖고 다각형
- 내에 완전히 놓여.
누구든지이 동작을 설명 할 수 있습니까?
EDIT : 또한 LineStrings를 사용하는 대신 개별적으로 포인트를 테스트했습니다. 적중 한 사람은 [24.7698287, -28.7353533]
뿐입니다. 당신은 geojson here을 볼 수 있습니다 또는 http://geojson.io/에 다음 줄을 붙여 세 가지 형상을 직접 그릴 수있는 쿼리는 가장자리가 다각형 교차 경우에도 히트해야하고 어떤 점
내에서 거짓말을하지 않습니다 - 나는 유도 선이 필요합니까 :
{"type":"GeometryCollection","geometries":[{"type":"Polygon","coordinates":[[[18.414846,-33.9699577],[18.414846,-26.0991189],[31.0330578,-26.0991189],[31.0330578,-33.9699577],[18.414846,-33.9699577]]]},{"type":"LineString","coordinates":[[27.7706902,-26.1091189],[28.0423,-26.19793]]},{"type":"LineString","coordinates":[[24.7698287,-28.7353533],[28.0423,-26.19793]]}]}
안녕하세요, Ivan, 폴리곤을 지정하여'$ geoIntersects '와 일치하는 성공을 거두었습니다. Mongo 문서는 또한 LineStrings를 사용하여 예제를 사용하지 않습니다. 올바르게 관찰하면 쿼리가 작동하므로 이상하지 않은 쿼리입니다. 다른 지리적 연산자를 사용해도 동일한 결과를 얻을 수 있는지 확인해 보셨습니까? 마지막으로 경계 상자 안에 완전히 들어있는 경로 나 경계 상자와 부분적으로 만나는 경로를 찾았습니까? –