MongoDb / GeoJson: MultiPolygon vs GeometryCollection, содержащая только многоугольники - PullRequest
0 голосов
/ 25 сентября 2018

Я собираю информацию о местоположении из разных источников и храню все в коллекции MongoDb.Помимо точечных местоположений с одиночными координатами широты и долготы, я также храню области.

Теперь одни данные дают мне информацию о местоположении как GeometryCollection, но со всеми элементами Polygons.Другой источник данных дает мне местоположение как MultiPolygon.Хотя на самом деле я думаю о том, чтобы иметь коллекцию для каждого источника данных, мне интересно, какой подход лучше в целом.

GeometryCollection, безусловно, более гибкий, но, возможно, MultiPolygon показывает лучшую производительность запросов (учитывая, что я всегда создаю индекс 2dspehere над полем местоположения).Стоит ли конвертировать одно представление в другое?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Хорошая новость: производительность и индексируемость запросов одинаковы в MongoDB для всех поддерживаемых типов GeoJSON.

Основным фактором, определяющим ваше решение, должно быть то, нужна ли вашей информационной архитектуре геополе и требуемое программное обеспечение.содержать больше типов, чем просто полигоны.Вы говорите, что храните точки?Если вы хотите хранить все геоданные в одном поле, например, location (и, вероятно, с указанием индекса 2dsphere), вам понадобится GeometryCollection, в который вы можете поместить Point и MultiPolygon.В спецификации GeoJSON рекомендуется https://tools.ietf.org/html/rfc7946#page-9 , а не для вложения GeometryCollection, поэтому для тех источников данных, которые дают вам GeometryCollection, вы должны выполнить итерацию содержимого и заполнить свой собственный GeometryCollection, которыйтакже содержит ваши Point s и т. д.

Если вы храните баллы отдельно, например, eventCenter отдельно от eventAreasEffected, тогда eventCenter может быть просто Point и eventAreasEffectedможет быть одним «MultiPolygon»;нет необходимости в GeometryCollection.Прекрасно иметь гео в более чем одном поле и иметь или не иметь несколько индексов 2dsphere в этих полях.Начиная с MongoDB 4.0, вы можете использовать $geoNear в коллекции, имеющей более одного индекса 2dsphere, включив опцию key.

Вот неофициальный, но разумный подход к определению: A MultiPolygon не являетсяпроизвольная совокупность Polygon, а точнее единственная «концепция формы», которая, как оказалось, имеет непересекающиеся многоугольники.Соединенные Штаты могут быть описаны в одном MultiPolygon, который имеет Аляску, Гавайи, континентальную часть США, может быть, Пуэрто-Рико и т. Д. На самом деле, с этой целью вы заметите, что хранить данные, относящиеся ккаждый член MultiPolygon, потому что coordinates может быть только массивом точек.Например, информация о третьем полигоне должна переноситься в одноранговом поле в одноуровневое поле coordinates.Но дискретный массив Polygon или GeometryCollection из Polygon может хранить дополнительную информацию в форме каждая .Обратите внимание, что ни GeoJSON, ни MongoDB не ограничивают вас в добавлении полей в дополнение к type и coordinates для каждой фигуры.

Более тонкий вопрос - это дизайн и семантика GeometryCollection из Polygon против. MultiPolygon.Чтобы еще более усложнить это, существует проблема явных дыр, определенных в Polygon, по сравнению с коллекцией неявно «слоистых» Polygon, которые пост-обрабатываются вне БД гео-программным обеспечением.

0 голосов
/ 25 сентября 2018

проблема с этим предметом в том, что нет хорошего ответа.все о том, что вы предпочитаете или нуждаетесь.Вот отличный ответ, написанный на stackExchange.

Полигон против MultiPolygon https://gis.stackexchange.com/questions/225368/understanding-difference-between-polygon-and-multipolygon-for-shapefiles-in-qgis

, и я не знаю о GeometryCollection, поэтому не могу вам ничего рассказать об этом.но эта ссылка покажет вам много информации.

...