База метро Москвы и Санкт-Петербурга с координатами

Полезные базы данных: города, страны, ZIP-коды и т.д.
Ответить
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

База метро Москвы и Санкт-Петербурга с координатами

Сообщение pirrat »

База метро Москвы и Санкт-Петербурга с координатами в sql формате.
city_id: 1-Москва, 2 - Санкт-Петербург

координаты вычислялись через google map api, возможны неточности.

Использовалась база для определения ближайших метро от определенной точки.
Вложения
metro.zip
(5.29 КБ) 1830 скачиваний
pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: База метро Москвы и Санкт-Петербурга с координатами

Сообщение pirrat »

подумал, что неплохо бы выложить и запрос для получения ближайших точек по координатам, поскольку он не очень простой:

Код: Выделить всё

        //scopes
    /**
     * Scope для поиск метро в радиусе $distance от точки с координатами $lat,$lng
     *
     * $ER = 6371 - радиус земли в километрах (Средний радиус Земли -  6 371 302 м. )
     * @param float  $lat latitude широта
     * @param float  $lng longitude долгота
     * @param int $distance дистанция в километрах от заданных координат
     * @return Metro
     */
    public function coordinates($lat=0,$lng=0,$distance=1)
    {
        $ER = 6371;
        $this->getDbCriteria()->mergeWith(array(
            'select'=>'t.*,( '.$ER.' * acos( cos( radians(:lat) ) * cos( radians( t.lat ) ) * cos( radians( t.lng ) - radians(:lng) ) + sin( radians(:lat) ) * sin( radians( t.lat ) ) ) ) AS distance',
            'order'=>'distance ASC',
            'having'=>'distance < :distance',
            'params'=>array(
            ':lat'=>$lat,
            ':lng'=>$lng,
            ':distance'=>$distance

        )
        ));
        return $this;

    }  

Код: Выделить всё

    
public function  getAroundMetros($distance = 1) {
        $metros = Metro::model()->coordinates($this->lat, $this->lng, $distance)->findAll();
        return $metros;
    } 
asisdes
Сообщения: 202
Зарегистрирован: 2013.10.03, 15:54

Re: База метро Москвы и Санкт-Петербурга с координатами

Сообщение asisdes »

Подскажите как правильно пользоваться

В модели Place -
public function coordinates($lat=0,$lng=0,$distance=1)
{
...
}

а это я пишу в контролер PlaceController
public function getAroundMetros($distance = 1) {
...
}

Потом у меня есть вид в PlaceControllere

Код: Выделить всё

    public function actionView($alias)
    {
        $alias = Place::aliasStr($alias);
        $model = Place::model()->findByAttributes(array('alias' => $alias));
        ...
       //здесь я ведь должен вызвать 
       $nearpoints = $this->getAroundMetros($model->lat, $model->lng);


       //потом отдам на рендеринг 
       $this->render('detailPlace',array('model'=>$model, 'newComment'=>$newComment, 'newsPlace'=>$newsPlace,
       'RecentPlace'=>$RecentPlace,[b] 'nearpoints'=>$nearpoints[/b]
 
или я что-то путаю
Изображение
Ответить