2011-03-18 17 views
5

के रूप में यहां उनका उल्लेख मैं, भू-स्थानिक प्रश्नों को चलाने के लिए MongDBs 2 डी अनुक्रमण उपयोग करने के लिए कोशिश कर रहा हूँ - http://www.mongodb.org/display/DOCS/Geospatial+IndexingMongoDB भू-स्थानिक प्रश्नों

यह ठीक काम कर रहा है, और मैं इस तरह के

db.places.find({ point : { $near : [151.1955562233925,-33.87107475181752] , $maxDistance : 0.1/111} }) 
के रूप में सक्षम रन प्रश्नों हूँ सीएलआई उपकरण से

, लेकिन जब मैं PHP में क्वेरी को चलाने और चलाने की कोशिश करता हूं (पीईसीएल मोंगो ड्राइवर का उपयोग करके) मुझे कोई परिणाम नहीं मिल रहा है।

PHP के लिए उपरोक्त क्वेरी को लिखने के तरीके के साथ कोई मदद? क्या किसी को पता है कि PHP ड्राइवर भू-स्थानिक प्रश्नों का समर्थन करता है या नहीं?

धन्यवाद

+1

अरे मैं इसी तरह कुछ करने के लिए कोशिश कर रहा हूँ। क्या आप मुझे बता सकते हैं कि आपके द्वारा निर्दिष्ट अधिकतमडिस्टिस कौन सी इकाई है। क्या यह किलोमीटर या मील है और इसे 111 तक क्यों विभाजित किया जा रहा है। – swordfish

उत्तर

7

मैं PHP चालक उत्पादन में काम के साथ जिओ देखने की है।

$latLong = $geo->lookupLatLong($address); 
$cursor = $coats->find(Array('latLong' => Array('$near' => $latLong)))->limit(10); 

इसके अलावा, आप $ nearSphere के रूप में $ के पास करने का विरोध किया और अधिक सटीक निर्देशांक प्राप्त करने के लिए उपयोग करने पर विचार करना चाह सकते हैं: यह इस तरह दिखता है। अधिक जानकारी के लिए the mongo docs देखें।

+0

धन्यवाद ढेर, मुझे यह काम मिल गया। यह एक शर्म की बात है कि मोंगो में सरल JSON क्वेरी टाइपकास्टिंग नोट के लिए php – micmcg

0

मैं PHP में खोज हालत के एक भाग के रूप में 'पास' का उपयोग कर या तो सफलता नहीं था।

आप उपयोग कर सकते हैं बजाय MongoDB geoNear आदेश:

$db->command(array('geoNear'=>'places','near'=>array(151.1955562233925,-33.87107475181752),'num'=>9)); 
0

PHP में $ nearSphere आदेश का उपयोग कर कुछ ऐसा दिखाई देगा का एक उदाहरण:

$lonlat = array($lon, $lat); 
$cursor = $this->collection->find(Array('loc' => Array('$nearSphere' => $lonlat)))->limit($limit); 

जहाँ 'loc' 2 डी भू-स्थानिक सूचकांक है और सीमा वैकल्पिक है।

1

मुझे अपने मोंगो क्वेरी के लिए सटीक PHP पोर्ट आज़माएं।

$collection->find(Array("point" => Array('$within' => Array('$center'=> Array(Array(151.1955562233925,-33.87107475181752), 0.1/111))))); 

कृपया सुनिश्चित करें कि आप फ्लोट के साथ लेट-लांग टाइप करें। या फिर मोंगो एक्सटेंशन इसे एक स्ट्रिंग (आश्चर्य, आश्चर्य) के रूप में पेश करेगा और क्वेरी खाली स्थिति मानने पर वापस आ जाएगी (यह हमेशा मुझे ढूंढने के लिए ले लिया)।

EDIT: भू-प्रश्नों का उपयोग करने के अधिक तरीकों के लिए केकफ़्प मोन्गो ड्राइवर स्रोत पर नज़र डालें। https://github.com/ichikaway/cakephp-mongodb/blob/master/samples/controllers/geos_controller.php

+0

+1 में इतनी वर्बोज़ बन जाती है। वह एक परेशानीपूर्ण छोटी जानकारी थी। – pospi

0

प्रलेखन के अनुसार MongoDB website

{ $near: { $geometry: { type: "Point" , coordinates: [ <longitude> , <latitude> ] }, $maxDistance: <distance in meters>, $minDistance: <distance in meters> } }

में ऊपर क्वेरी के लिए php कोड होगा:

$query = array(
       'loc' => array(
        '$near' => array(
         '$geometry' =>array(
          'type' => 'Point', 
          'coordinates'=>array(floatval($lon),floatval($lat)), 
          '$maxDistance' => intval($max_distance), 
          '$mixDistance' => intval($min_distance)))));