Визуализированный слой KML не заполняет полигоны - PullRequest
0 голосов
/ 22 ноября 2018

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

Я загружаю слой KML с этимкод:

var kmlLayerCenter = new   google.maps.KmlLayer('<kmlFileRoute>', {
        suppressInfoWindows: true,
        preserveViewport: true,
        map: map
    });

А это код KML:

<?xml version="1.0" encoding="utf-8" ?>
<kml xmlns="http://www.opengis.net/kml/2.2">
  <Document id="root_doc">
    <Folder>
      <name>Distrito_Centro_KML</name>
      <Placemark>
        <Style>
          <LineStyle>
            <color>ff0000ff</color>
          </LineStyle>
          <PolyStyle>
            <fill>1</fill>
            <color>ff0000ff</color>
            <outline>1</outline>
          </PolyStyle>
        </Style>
        <Polygon>
          <outerBoundaryIs>
            <LinearRing>
              <coordinates>
                -5.67256283331951,43.5397440536399 
                ----- LOTS OF POINTS ------
                -5.67256283331951,43.5397440536399
              </coordinates>
            </LinearRing>    
          </outerBoundaryIs>
        </Polygon>
      </Placemark>
    </Folder>
  </Document>
</kml>

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

Любая помощь будет оценена.

Ответы [ 2 ]

0 голосов
/ 24 ноября 2018

Хорошо, Невероятно, но это правда ... кажется, что точки на слоях KML должны быть упорядочены против часовой стрелки, чтобы позволить Gmaps API отображать цвета заливки.

Я не совсем понимаю, почему это так, нокажется, работает нормально.

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

0 голосов
/ 22 ноября 2018

Похоже, что рендерер Google Maps KML теперь чувствителен к направлению намотки (которое вы не указали в своем вопросе).

Это работает :

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 5,
    center: {
      lat: 24.886,
      lng: -70.268
    },
    mapTypeId: 'terrain'
  });

  var kmlLayerCenter = new google.maps.KmlLayer({
    url: 'http://www.geocodezip.com/geoxml3_test/kml/SO_20181122b.kml',
    suppressInfoWindows: true,
    // preserveViewport: true,
    map: map
  });
}
html,
body,
#map {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap"></script>
 <coordinates>
    -5.67256283331951,44.5397440536399
    -5.9439,45.254695
    -5.408402,45.284535
    -5.67256283331951,44.5397440536399
 </coordinates>

Это не :

function initMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 5,
    center: {
      lat: 24.886,
      lng: -70.268
    },
    mapTypeId: 'terrain'
  });

  var kmlLayerCenter = new google.maps.KmlLayer({
    url: 'http://www.geocodezip.com/geoxml3_test/kml/SO_20181122.kml',
    suppressInfoWindows: true,
    // preserveViewport: true,
    map: map
  });
}
html,
body,
#map {
  height: 100%;
  margin: 0;
  padding: 0;
}
<div id="map"></div>
<script async defer src="https://maps.googleapis.com/maps/api/js?callback=initMap"></script>
<coordinates>
    -5.67256283331951,44.5397440536399
    -5.408402,45.284535
    -5.9439,45.254695
    -5.67256283331951,44.5397440536399
</coordinates>

Единственная разница - направление намотки (порядок средних двух точек)

...