2014-11-14 9 views
1

Я пытаюсь сделать свой заказный наклад для карт Google. Я использую этот пример this. И у меня проблема с определением ширины наложения.Google maps custom overlay с неправильной шириной

var sw = overlayProjection.fromLatLngToDivPixel(this.bounds_.getSouthWest()); 
var ne = overlayProjection.fromLatLngToDivPixel(this.bounds_.getNorthEast()); 

// Resize the image's div to fit the indicated dimensions. 
var div = this.div_; 
div.style.left = sw.x + 'px'; 
div.style.top = ne.y + 'px'; 
div.style.width = (ne.x - sw.x) + 'px'; 
div.style.height = (sw.y - ne.y) + 'px'; 

Этот код возвращает ширину меньше одного пикселя для наложения с этим latlonbox:

<LatLonBox> 
<north>90.0</north> 
<south>-90.0</south> 
<east>180.0</east> 
<west>-180.0</west> 
</LatLonBox> 

Кто-нибудь сталкивался с этой проблемой? Может быть, кто-то знает решение. Я был бы признателен за любую помощь.

ответ

1

Как кажется, это происходит, когда границы пересекаются с первым меридианом.

Попробуйте рассчитать ширину:

  ((ne.x - sw.x) 
      + 
      (((ne.x - sw.x)<0 
      || 
      this.bounds_.getNorthEast().lng() 
      - 
      this.bounds_.getSouthWest().lng()>=360) 
      ? overlayProjection.getWorldWidth() 
      : 0)) 

Демо: http://jsfiddle.net/doktormolle/4vj37ecy/

+0

О, спасибо, это работа! Но теперь я вижу проблему с высотой тоже. Насколько я понимаю, на картах google долгота может принимать значения [-85, 85]. Но google earth kml содержит значения -90 и 90. Таким образом, высота и верхние значения неверны. Как я могу это исправить? Демонстрация: http://iwep.wc.lt/ (наложение с минимальным уровнем масштабирования) – user3390963