Я хочу сохранить данные GeoJson для области, используя MongoDB.Данные поступают с официального сайта.Каждая область представлена как MultiPolygon
.В конце я хочу найти все области, которые содержат пары lng / lat, используя $intersect
, например:
db.areas.find({
"location.geometry": {
"$geoIntersects": {
"$geometry": {
"type": "Point",
"coordinates": [
<lng>,
<lat>
]
}
}
}
}
В принципе, это, кажется, работает нормально.Тем не менее, я столкнулся с проблемами в некоторых областях, по-видимому, в отношении набора полигонов MultiPolygon
.Я мог бы свести мою проблему к индивидуальному случаю:
Область (будучи GeoJson MultiPolygon
) имеет шесть полигонов, скажем [A, B, C, D, E, F]
.Также точка <lng>,<lat>
, которую я запрашиваю, лежит в пределах многоугольника A
.Теперь приведенный выше запрос работает только в том случае, если область не содержит многоугольников D
и F
(конечно, всегда нужно включать A
), то есть я получаю ожидаемый результат поиска.В противном случае запрос будет пустым (но без ошибки).Короче говоря
- Что работает:
[A]
, [A,B]
, [A,B,C]
, [A,B,C,E]
, [A,C]
, ... (любая комбинация с A
и без D
&F
) - Что не работает:
[A,D]
, [A,B,F]
, ... (любая комбинация, которая содержит D
или F
)
Чтопроблема с полигонами D
и F
?Разве им не разрешено перекрываться с другими полигонами в MultiPolygon
?Возможно, они слишком маленькие?Я попробовал определение GeoJson, но не увидел никаких проблем.Может быть потому, что GeoJson поддерживает MongoDB.