2013-04-07 7 views
16

के अंदर है या नहीं, मैं mongodb geolocation सुविधाओं में नया हूं।मोंगोडब: जांचें कि कोई बिंदु संग्रहीत बहुभुज

मैंने कुछ बहुभुजों को संग्रहीत किया जो देश के नाम के साथ डेटाबेस में देश सीमाओं का प्रतिनिधित्व करते हैं। अब मैं क्या करना चाहता हूं यह जांच रहा है कि कौन सा देश एक बिंदु है। उदाहरण के लिए यदि मैं अपना खुद का भौगोलिक स्थान देता हूं तो मैं वह देश प्राप्त करना चाहता हूं जहां मैं हूं।

क्या यह mongodb के साथ ऐसा करने का कोई तरीका है? शायद geoWithin के साथ?

बशर्ते आप GeoJSON का उपयोग कर बहुभुज जैसे देशों को परिभाषित, धन्यवाद

+0

इस जवाब की जांच करें: http://stackoverflow.com/questions/ 120 9 5 9 65/मैंगोडब-कैसे-कर-आई-चेक-अगर-पॉइंट-इन-इन-ए-पॉलीगॉन और http://stackoverflow.com/questions/10774427/how-to-find-if-a- बिंदु मौजूद है-इन-जो-बहुभुज। ऐसा लगता है कि दोनों प्रासंगिक हैं और समाधान है। – brotherofken

+2

मुझे इसकी आवश्यकता है। @brotherofken: प्रश्न बिल्कुल विपरीत है: मुझे wich बहुभुज (mongodb पर संग्रहीत) खोजने की आवश्यकता है एक पैरामीटर बिंदु है। मुझे इस दिशा में कोई उदाहरण नहीं मिला है। –

+0

मुझे यह पता लगाने की ज़रूरत है कि एक बिंदु बंद सर्कल के अंदर है या नहीं। किसी भी लीड पर मैं इसे कैसे प्राप्त करूं? –

उत्तर

4

हाँ, आप $geoWithin जांच करने के लिए उपयोग कर सकते हैं। इसके लिए, this GitHub repo आज़माएं।

+1

बहुभुज के लिए धन्यवाद लेकिन मुझे एक और सटीक सेट मिला, मुझे याद नहीं है कि मुझे यह कहां मिला। क्या आपको लगता है कि मुझे इन सभी बहुभुजों को फिर से शुरू करना होगा, जिसमें यह पता लगाने के लिए कि बिंदु क्या है या mongodb geoWithin मुझे इस तरह के बैकट्रैकिंग से बचने में मदद करता है? – SkinyMonkey

+0

$ geoWithin एक बहुभुज के साथ काम करता है। – Sim

+1

geoWithin * बहुभुज * के भीतर सभी सुविधाओं को वापस देता है। geoIntersects सुविधा देता है जो * एक विशेषता के साथ * अंतरण * (एक बिंदु, इस मामले में)। इसलिए, इस मामले में, geoIntersects आपको एक प्रश्न में वही चीज़ देता है जो आपको चाहिए, जबकि आपको अपने पॉलीगॉन के साथ भू-विथिन चलाने होंगे। –

5

इसके लिए आपको $geoIntersects का उपयोग करना होगा।

db.features.find({mystoredpolygon:{$geoIntersects:{$geometry:{type:'Point', coordinates:[22,38]}}}}) 
+0

हां, $ geoIntersects काम करता है। यहां संदर्भ लिंक है: [MongoDB $ geoIntersects] (http://docs.mongodb.org/manual/reference/operator/query/geoIntersects/) – Adam

6

आप इस स्कीमा की तरह आपका स्थान डेटा संग्रहीत करना होगा:

{"loc": 
    {"coordinates":[ 
     [ 
     [1.0,1.0], 
     [1.0,10.0], 
     [10.0,10.0], 
     [10.0,1.0], 
     [1.0,1.0] 
     ] 
     ], 
    "type":"Polygon" 
    } 
} 

और फिर भेज $geoIntersects प्रश्नों

db.polygons.find({"loc":{"$geoIntersects":{"$geometry":{"type":"Point", "coordinates":[x, y]}}}} 
+0

निर्देशांक के लिए सरणी में कोई सरणी क्यों है? हमारे लिए निर्देशांक का एक और सेट क्या जोड़ देगा? उदाहरण के लिए [[[1,1], ...], [[2,2] ...]] –

+0

शायद एक बहुभुज अन्य –

+0

युप के अंदर स्थित हो सकता है, मुझे कुछ समय पहले पता चला कि अगले सरणी तत्व निर्दिष्ट हैं बहुभुज जो बाहरी "कट आउट" करते हैं। https://developers.google.com/maps/documentation/javascript/examples/layer-data-simple –

संबंधित मुद्दे