2011-03-18 25 views
5

burada özetlenen gibi ben coğrafi sorgular çalıştırmak için MongDBs 2d indeksleme kullanmaya çalışıyorum - İyi çalışıyor http://www.mongodb.org/display/DOCS/Geospatial+IndexingMongoDB Coğrafi sorgular

ve böyle

db.places.find({ point : { $near : [151.1955562233925,-33.87107475181752] , $maxDistance : 0.1/111} }) 
olarak mümkün çalıştırma sorguları değilim CLI aracından gelen

, ancak PHP'de sorguyu çalıştırmayı denediğimde (PECL mongo sürücüsünü kullanarak) herhangi bir sonuç alamıyorum.

PHP için yukarıdaki sorgunun nasıl yazılacağı ile ilgili herhangi bir yardım? PHP sürücüsünün jeo-uzamsal sorguları destekleyip desteklemediğini bilen var mı?

Teşekkür

+1

. Belirttiğiniz maxDistace biriminin ne olduğunu söyleyebilir misiniz? Km mi, mil mi, neden 111'e bölünüyor? – swordfish

cevap

7

PHP sürücüsü üretimde çalışan ile coğrafi arama vardır:

yerine mongodb geoNear komutunu kullanabilir.

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

, sen $ nearSphere daha doğru koordinatları almak yakın $ aksine kullanarak düşünebilirsiniz: Bu şuna benzer. Daha fazla bilgi için bkz. the mongo docs.

+0

Teşekkürler yığınlar, bununla çalışıyorum. Bu mongo basit JSON sorgusu yazım notu için php – micmcg

0

Ben de PHP'de bulmak durumun bir parçası olarak 'yakın' kullanarak başarıya yoktu.

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

benzer görünümde olacaktır PHP'de $ nearSphere komutunu kullanarak bir örnek: 'loc' 2d coğrafi endeksidir ve sınır isteğe bağlıdır

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

.

1

Mongo sorgunuz için tam PHP bağlantı noktasını deneyeyim.

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

Uzun süreli kayan şamandıralı tipte olduğunuzdan emin olun. Veya mongo uzantısı bir ip gibi davranacak (sürpriz, sürpriz) ve sorgu boş durumun üstesinden gelmeye dönecek (bu beni bulmak için sonsuza dek sürdü).

EDIT: Coğrafi sorguları kullanmanın daha fazla yolu için Cakephp mongo sürücüsü kaynağına bir göz atın.

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

MongoDB website yılında belgelerine göre https://github.com/ichikaway/cakephp-mongodb/blob/master/samples/controllers/geos_controller.php

+0

+ 1 çok ayrıntılı hale geldiğini utanç verici. Bu sorunlu bir detaydı. – pospi

0

yukarıdaki sorgu için php kodu olacaktır: Hey Benzer bir şey yapmak çalışıyorum

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