2017-02-23 38 views
0

Ребята Я пытаюсь запросить все полигоны внутри ограничивающей рамкой, но он просто возвращает 0 .. Он должен возвращать много полигонов!

В качестве альтернативы я пытаюсь запросить гораздо более крупную ограничительную рамку, и ничего не происходит!

Мой запрос:

{ 
geometry: 
    { $geoWithin: 
     { $box: 
      [ [-73.995762,40.764826], [-73.934034,40.802038] ] 
     } 
    }      
} 

Обратите внимание, что тот же самый запрос возвращает правильный результат для геометрий типа Point

Points

ответ

1

запросить все полигоны внутри по ограничивающего параллелепипеда но он просто возвращает 0

$box operator для $geoWithin поддерживает только документы на основе grid coordinates и не поддерживает формат GeoJSON.

тот же запрос возвращает правильный результат для геометрии типа точка

В зависимости от структуры документов, и как вы запрашиваете их, это, вероятно, рассматриваться как координаты сетки т.е. {geometry: [<long>, <lat>]} Эта возможно, не работали для вашего документа полигонов, потому что для GeoJSON Polygons требуется дополнительная массивная оболочка. то есть [[ [<long>, <lat>] ]], недействительным формат координат сетки.

Если ваши документы находятся в формате GeoJSON, и вы хотите выбрать область, вместо этого вы можете использовать $geometry.

db.places.find(
    { 
    'geometry': { 
     $geoWithin: { 
      $geometry: { 
      type : "Polygon" , 
      coordinates: [ [ [ 0, 0 ], [ 3, 6 ], [ 6, 1 ], [ 0, 0 ] ] ] 
      } 
     } 
    } 
    } 
) 

Стоит отметить, что MongoDB Compass геопространственной визуализации в настоящее время (v1.6) не поддерживает в формате GeoJSON еще.

+0

Wan, это предложение поддержки GeoJSON для точек и полигонов .. Возможно, вы уже видели старую документацию? У них действительно есть entra wrap для массива, но он все равно работает нормально, проверьте решение, которое я разместил. Спасибо за помощь. – bobleujr

+0

Основано на руководстве MongoDB [$ box] (https://docs.mongodb.com/manual/reference/operator/query/box/#box), как опубликовано для текущего стабильного v3.4 «При использовании с оператором $ box, $ geoWithin возвращает документы на основе координат сетки и не запрашивает формы GeoJSON ». Обновите свой пост с помощью структуры/схемы образца документов, чтобы другие могли попытаться воспроизвести вашу проблему. –

0

Здесь идет ответ:

$ коробки работает с GeoJSON, но не с полигонами! Вместо этого вам нужно создать геометрию с полем $.

Кроме того, он всегда должен был в начальную точку и точку, так что 4-точка полигона должны 5 координат кортежи

НО становится сложнее, он должен следовать правилу правой руки (против часовой стрелки).

it's anticlockwise

ТЕСТИРОВАНИЕ GeoJSON С $ BOX И ТОЧЕК

мой запрос {геометрия: {$ geoWithin: {$ коробка: [[-71.934034,38.764826], [-75.995762,43.802038]]}}}

+0

Это не должно быть принятым ответом. Не только это противоречит документации (вплоть до текущего MongoDB v3.4), ответ предполагает недоказанный (против часовой стрелки) обход, а также сломанные изображения, которые не помогают этому. –

+0

https://data.ny.gov/ - datasets = "Building Footprints" и "Selected Facilities and Program Sites" Остальная информация, которую вы можете найти по этому вопросу. Попробуйте воспроизвести его, и, возможно, мы сможем дойти до сути решения, чтобы передать его людям, которые могут понадобиться! Я удалил правильную проверку ответа, пока не найдет ее =) Спасибо! – bobleujr

+0

Спасибо за обновление скриншотов с рабочими изображениями. Два последних скриншота используют [$ geometry] (https://docs.mongodb.com/manual/reference/operator/query/geometry/) вместо '$ box'. Как было предложено выше, вы должны использовать '$ geometry' вместо' $ box' для формата GeoJSON. '$ box' не поддерживает GeoJSON, он возвращает тип' Point' из-за сходства форматирования с устаревшими координатами. Для получения дополнительной информации см. Также [руководство: минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) при задании вопросов. –