2013-05-13 8 views
0

Я пытаюсь передать переменные в google.maps.LatLngBounds, но это не работает. единственная вещь, которая, кажется, работает, - это если я жестко кодирую числа как float (литералы). Если я попробую то, что ниже, это не сработает. Я пробовал каждый способ кастинга, но он просто не отображается. Пример ниже - это последнее, что я пробовал.Передача переменных в LatLngBounds

Я геокодирую центр с адреса и пытаюсь создать наложение, окружающее центр, поэтому наложение изображений всегда будет за центром.

var x1 = (parseFloat(xLat) - 0.0003).toFixed(6); 
var y1 = (parseFloat(yLon) + 0.0003).toFixed(6); 
var x2 = (parseFloat(xLat) + 0.0003).toFixed(6); 
var y2 = (parseFloat(yLon) - 0.0003).toFixed(6); 
var coordinates1 = x1 + "," + y1; 
var coordinates2 = x1 + "," + y1; 
     var imageBounds = new google.maps.LatLngBounds(
      new google.maps.LatLng(parseFloat(coordinates1.split(",")[0]), parseFloat(coordinates1.split(",")[1])), //sw 
      new google.maps.LatLng(parseFloat(coordinates2.split(",")[0]), parseFloat(coordinates2.split(",")[1])) //ne 
     ); 

Любые идеи, почему это не удается? Я знаю, что есть и другие подобные вопросы, и ни одно из этих решений не работало. Я думаю, что я пробовал их всех, буквально.

ответ

1

google.maps.LatLng класс Constructor LatLng (лат: номер, LNG: номер) Documentation

var x1 = xLat - 0.0003; 
var y1 = yLon - 0.0003;//Was + 1 in Question & Origonal Answer 
var x2 = xLat + 0.0003; 
var y2 = yLon + 0.0003;//Was - 1 in Question & Origonal Answer 

var imageBounds = new google.maps.LatLngBounds(
      new google.maps.LatLng(x1, y1), //sw 
      new google.maps.LatLng(x2, y2) //ne 
     ); 

EDIT Изменено y1 y2 & в ответ на комментарий Майкла и ответы, как они были неправы

+0

поэтому я попытался это сделать, я думал, что разница заключалась в использовании конструктора ('new google.maps.LatLng (x1, y1)'), но то, что вы показали, было первым, что я пробовал. Он работает, если я использую что-то вроде этого: new google.maps.LatLng (40.000000, -70.000000) – roberthuttinger

+0

Вы просто инвертируете значения? SW lat и lng должны быть ниже NE lat и lng, за исключением случаев, когда лимиты включены. – lib3d

+0

Эти расчеты не будут меняться в зависимости от того, являются ли исходные координаты отрицательными или положительными. (Я просто игнорирую случай, когда вы размещаете 180 меридианов, но по крайней мере это правда.) –

2

Просто ответьте на прекрасный ответ Дэвида, разместив это как ответ вместо комментария, потому что я не могу сделать форматирование кода в комментарии.

Вместо имен, таких как x1, давайте использовать имена, соответствующие терминологии в API Карт. Во-первых, я собираюсь переименовать xLat как lat и yLon как lng, а затем мы отправимся оттуда. Кроме того, мы будем делать это шаг за шагом для ясности:

var s = lat - 0.0003; 
var w = lng - 0.0003; 
var n = lat + 0.0003; 
var e = lng + 0.0003; 

var sw = new google.maps.LatLng(s, w); 
var ne = new google.maps.LatLng(n, e); 

var imageBounds = new google.maps.LatLngBounds(sw, ne); 

Обратите внимание, как мы закончили исправление ошибки здесь, просто потому, что имена теперь более ясно. Юг всегда меньше Севера, а Запад всегда меньше Востока (игнорируя 180 меридианов). С именами x1 неясно было, что было, и ошибка проскользнула в код, где Север (y2) был меньше чем Южный (y1). Это легко случается, когда имена переменных не имеют смысла.

Еще один интересный момент заключается в том, что код больше не нуждается в комментариях // sw и // ne. На самом деле, даже если вернуться к стилю, где sw и ne переменные не используются, это все-таки ясно, что на юго-западе и которая на северо-востоке:

var s = lat - 0.0003; 
var w = lng - 0.0003; 
var n = lat + 0.0003; 
var e = lng + 0.0003; 

var imageBounds = new google.maps.LatLngBounds(
    new google.maps.LatLng(s, w), 
    new google.maps.LatLng(n, e) 
); 

Обратите внимание, как эти замечания будут по-прежнему быть ненужным Вот.

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

+0

хорошие поты, простые и прямые всегда лучше. похоже, что основная математика была моей проблемой. спасибо вам обоим. – roberthuttinger

Смежные вопросы