База метро Москвы и Санкт-Петербурга с координатами в sql формате.
city_id: 1-Москва, 2 - Санкт-Петербург
координаты вычислялись через google map api, возможны неточности.
Использовалась база для определения ближайших метро от определенной точки.
База метро Москвы и Санкт-Петербурга с координатами
База метро Москвы и Санкт-Петербурга с координатами
- Вложения
-
- metro.zip
- (5.29 КБ) 1838 скачиваний
Re: База метро Москвы и Санкт-Петербурга с координатами
подумал, что неплохо бы выложить и запрос для получения ближайших точек по координатам, поскольку он не очень простой:
Код: Выделить всё
//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;
}
Re: База метро Москвы и Санкт-Петербурга с координатами
Подскажите как правильно пользоваться
В модели Place -
public function coordinates($lat=0,$lng=0,$distance=1)
{
...
}
а это я пишу в контролер PlaceController
public function getAroundMetros($distance = 1) {
...
}
Потом у меня есть вид в PlaceControllere
или я что-то путаю
В модели 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]