Google Maps JS API-рендеринг полигонов - PullRequest
0 голосов
/ 04 мая 2020

Я создаю карту Google со многими полигонами. Проблема в том, что когда мои полигоны отображаются, они окрашены непостоянно (разные цвета по всему телу полигона), и они не отображаются полностью. Включены 2 изображения, где вы можете увидеть количество заданного полигона, который не соответствует.

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

Полагаю, это проблема листов. Вот код, который я использую для управления логиками «getTile» и «releaseTile» c для моего пользовательского типа карты:

GMICMapType.prototype.getTile = function(coord, zoom, ownerDocument) {
    var c = Math.pow(2, zoom);
    var c = Math.pow(2, zoom);
    var tilex=coord.x,tiley=coord.y;
    if (imageWraps) {
      if (tilex<0) tilex=c+tilex%c;
      if (tilex>=c) tilex=tilex%c;
      if (tiley<0) tiley=c+tiley%c;
      if (tiley>=c) tiley=tiley%c;
    }
    else {
      if ((tilex<0)||(tilex>=c)||(tiley<0)||(tiley>=c)) {
        var blank = ownerDocument.createElement('DIV');
        blank.style.width = this.tileSize.width + 'px';
        blank.style.height = this.tileSize.height + 'px';
        return blank;
      }
    }
    var img = ownerDocument.createElement('IMG');
    var d = tilex;
    var e = tiley;
    var f = "t";
    for (var g = 0; g < zoom; g++) {
      c /= 2;
      if (e < c) {
          if (d < c) { f += "q" }
          else { f += "r"; d -= c }
      }
      else {
          if (d < c) { f += "t"; e -= c }
          else { f += "s"; d -= c; e -= c }
      }
}
GMICMapType.prototype.realeaseTile = function(tile) {
      var idx = this.Cache.indexOf(tile);
      if(idx!=-1) this.Cache.splice(idx, 1);
      tile=null;
}

Кроме того, я использую этот код для pu sh полигоны на карту:

            // Construct the sector outline.
        window[sectorName] = new google.maps.Polygon({
          name: sectorTitle,
          infoWindowPointX: sectorCenterPointX,
          infoWindowPointY: sectorCenterPointY,
          knownSystems: knownSystems,
          factionColor: factionColor,
          paths: sectorCoords,
          sectorDataNum: s,
          strokeColor: sectorColor,
          strokeOpacity: 1,
          strokeWeight: 0.8,
          zIndex: 1,
          fillColor: sectorColor,
          fillOpacity: 1
        });
        polygons.push(window[sectorName]);
        window[sectorName].setMap(map);

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

polygon render problem example zoom 1

polygon render problem example zoom 2

1 Ответ

0 голосов
/ 07 мая 2020

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

  1. Проблема: Неправильно окрашенные полигоны.

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

Проблема: не все полигоны отображаются на всех уровнях масштабирования.

Решение: Моим исходным исходным изображением была карта размером 1000px X 1000px с контентом, нарисованным почти по 3 из 4 краев (что означает очень небольшое пустое пространство возле границ с 3 сторон). Я увеличил исходное изображение до 2000px X 2000px и поместил исходное изображение в центр, то есть моя карта теперь имеет гораздо больше «пустого» пространства, где я не рендерил полигоны вблизи краев. Это привело к созданию карты меньшего размера с более низкой точностью в координатах (1 X теперь в два раза больше, чем это было раньше на участках карты с контентом), однако полигоны теперь расположены только вблизи центра элемента карты Google. , По какой-то причине это означает, что все полигоны отображаются на всех уровнях масштабирования, что является желаемым результатом за счет некоторой точности и разрешения изображения карты.

...