Расчет области просмотра карты Google?

Я немного занимаюсь геокодированием с помощью локального поиска Google, и мне нужно установить область просмотра объекта API v3 карт Google на странице.

Теперь это нормально, если локальный поиск Google вернул мне хорошее окно просмотра, как для почтового индекса или улицы, но если я, например, введу название бара. Предположительно возвращенная область просмотра очень велика, потому что локальный поиск нашел много совпадений, но выдал лучшее.

В этом случае я хотел бы рассчитать свой собственный видовой экран и делаю это следующим образом:

result.Centre = new LatLon(double.Parse(lat),double.Parse(lon));
result.Span = new LatLon(0.006295d, 0.008407d);
string viewport = "{{\"center\":{{\"lat\":\"{0}\",\"lng\":\"{1}\"}},\"span\":{{\"lat\":\"{2}\",\"lng\":\"{3}\"}},\"sw\":{{\"lat\":\"{4}\",\"lng\":\"{5}\"}},\"ne\":{{\"lat\":\"{6}\",\"lng\":\"{7}\"}}}}";
//Calculate the south west by taking half the span and adding it to the centre
double swLat = result.Centre.Latitude + (result.Span.Latitude/2);
double swLon = result.Centre.Longitude + (result.Span.Longitude/2);
//and northeast corners by taking half the span and subtracting from the centre
double neLat = result.Centre.Latitude - (result.Span.Latitude/2);
double neLon = result.Centre.Longitude - (result.Span.Longitude/2);


//Fingers crossed :)
result.ViewPortJSON = string.Format(viewport, result.Centre.Latitude, result.Centre.Longitude,result.Span.Latitude, result.Span.Longitude, swLat, swLon,neLat, neLon);

Проблема в том, что я получаю действительный json, но карты Google уменьшают масштаб, поэтому я могу видеть весь мир. Тот же код используется во внешнем интерфейсе, как если бы Google предоставил мне область просмотра, поэтому я не понимаю, что происходит.

Есть идеи? Я ошибся в своих расчетах? Я пробовал со всем пролетом (т.е. предполагая, что это уже радиус) с тем же эффектом.

Заранее спасибо.


person Rob Stevenson-Leggett    schedule 06.03.2010    source источник


Ответы (1)


Эй, разве ты не должен делать:

double swLat = result.Centre.Latitude - (result.Span.Latitude/2); 

double swLon = result.Centre.Longitude - (result.Span.Longitude/2); 

//and northeast corners by taking half the span and subtracting from the centre 

double neLat = result.Centre.Latitude + (result.Span.Latitude/2); 

double neLon = result.Centre.Longitude + (result.Span.Longitude/2);
person morpheus    schedule 07.03.2010
comment
Ага! Дох, я думал о X и Y, а не о широте и долготе. Спасибо :-) - person Rob Stevenson-Leggett; 07.03.2010