ढूंढ रहा है मेरे पास एक मोंगोडीबी डेटाबेस है जिसमें fooCollection
नामक संग्रह है। इस संग्रह में दस्तावेजों में एक बाध्यकारी बहुभुज के रास्ते में भू-स्थानिक डेटा शामिल है। मैं अपने ऐप में सी # मोंगोडीबी ड्राइवर का उपयोग कर रहा हूं। मैंने देखा कि यह कुछ स्थानिक प्रश्नों के साथ दस्तावेज़ नहीं ढूंढ रहा था हालांकि यह उनमें से अधिकांश के साथ काम करता है। मैंने एक अपमानजनक दस्तावेज़ को छोड़कर संग्रह खाली कर दिया और मैंने सीधे प्रश्नों को निष्पादित करके इसे खोजने का प्रयास किया।
मेरे दस्तावेज़ इस तरह दिखता है:
{
"_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]]
}}}})
यदि आप उन तीन ज्यामितिओं को साजिश करते हैं, तो मैं वास्तव में नहीं देख सकता कि कोई काम क्यों करेगा लेकिन दूसरा नहीं।
- दोनों लाइनों बहुभुज
- के भीतर पूरी तरह झूठ काम कर लाइन बहुत लंबे समय तक
- काम कर लाइन 0 डिग्री और 90 डिग्री के बीच का एक असर, 90 डिग्री और 180 डिग्री के बीच अन्य है।
क्या कोई इस व्यवहार को समझाने में सक्षम है?
संपादित करें: मैंने लाइनस्ट्रिंग का उपयोग करने के बजाय अलग-अलग बिंदुओं का भी परीक्षण किया है। हिट होने वाला एकमात्र ऐसा [24.7698287, -28.7353533]
है। मैं क्या ज़रूरत है LineStrings - क्वेरी एक हिट भले ही बढ़त बहुभुज काटती है होना चाहिए और कोई अंक
के भीतर ही होनी आप GeoJSON here देख सकते हैं या आप तीन geometries खुद 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]]}]}
अरे इवान, मैंने बहुभुज निर्दिष्ट करके '$ geoIntersects' के साथ लगातार सफलता प्राप्त की है, मोंगो दस्तावेज़ भी लाइनस्ट्रिंग का उपयोग करके उदाहरणों से दूर शर्मिंदा हैं। जैसा कि आप सही ढंग से निरीक्षण करते हैं, क्वेरी को काम करना चाहिए, इसलिए यह अजीब बात है कि यह नहीं है। क्या आपने अन्य भू ऑपरेटरों को यह देखने के लिए प्रयास किया है कि आप उनके साथ एक ही परिणाम प्राप्त कर सकते हैं या नहीं? आखिरकार, क्या आप ऐसे मार्ग ढूंढ रहे हैं जो पूरी तरह से बाध्यकारी बॉक्स में आते हैं, या जो 'स्पर्श' या आंशिक रूप से बाध्यकारी बॉक्स के साथ छेड़छाड़ करते हैं? –