ArgumentOutOfRangeException: Индекс был вне диапазона

У вас есть два варианта.

  1. В настоящее время вы делаете «нормальный» маркер (не используя DataLayer). Чтобы стилизовать его так же, как и стили маркеров уровня данных, создайте функцию, которая делает маркер стилизующим его так же:
function createMarker(latLng, mag) {
  var low = [151, 83, 34]; // color of mag 1.0
  var high = [5, 69, 54]; // color of mag 6.0 and above
  var minMag = 1.0;
  var maxMag = 6.0;

  // fraction represents where the value sits between the min and max
  var fraction = (Math.min(mag, maxMag) - minMag) /
    (maxMag - minMag);

  var color = interpolateHsl(low, high, fraction);
  var marker = new google.maps.Marker({
    position: latLng,
    icon: {
      path: google.maps.SymbolPath.CIRCLE,
      strokeWeight: 0.5,
      strokeColor: '#fff',
      fillColor: color,
      fillOpacity: 2 / mag,
      // while an exponent would technically be correct, quadratic looks nicer
      scale: mag
    },
    zIndex: Math.floor(mag),
    map: map
  });
  return marker;
}

подтверждение концепции скрипта [ 1118]

screenshot of resulting map, showing styled marker

  1. Если вы хотите добавить местоположение к уровню данных и иметь стиль слоя данных, то вам нужно сделать что:
  map.data.add({
    geometry: new google.maps.Data.Point({
      lat: 20,
      lng: -160
    }),
    properties: {
    mag: 2
    }
  });

Тогда он будет стилизован как все остальные

доказательство концепции скрипки

[1112 ] screenshot of resulting map with added point geometry

фрагмент кода:

var map;

function initMap() {
  map = new google.maps.Map(document.getElementById('map'), {
    center: {
      lat: 20,
      lng: -160
    },
    zoom: 2,
    styles: mapStyle
  });
  map.data.add({
    geometry: new google.maps.Data.Point({
      lat: 20,
      lng: -160
    }),
    properties: {
      mag: 2
    }
  });

  map.data.setStyle(styleFeature);

  // Get the earthquake data (JSONP format)
  // This feed is a copy from the USGS feed, you can find the originals here:
  //   http://earthquake.usgs.gov/earthquakes/feed/v1.0/geojson.php
  var script = document.createElement('script');
  script.setAttribute(
    'src',
    'https://storage.googleapis.com/mapsdevsite/json/quakes.geo.json');
  document.getElementsByTagName('head')[0].appendChild(script);
}

// Defines the callback function referenced in the jsonp file.
function eqfeed_callback(data) {
  map.data.addGeoJson(data);
}

function styleFeature(feature) {
  var low = [151, 83, 34]; // color of mag 1.0
  var high = [5, 69, 54]; // color of mag 6.0 and above
  var minMag = 1.0;
  var maxMag = 6.0;

  // fraction represents where the value sits between the min and max
  var fraction = (Math.min(feature.getProperty('mag'), maxMag) - minMag) /
    (maxMag - minMag);

  var color = interpolateHsl(low, high, fraction);

  return {
    icon: {
      path: google.maps.SymbolPath.CIRCLE,
      strokeWeight: 0.5,
      strokeColor: '#fff',
      fillColor: color,
      fillOpacity: 2 / feature.getProperty('mag'),
      // while an exponent would technically be correct, quadratic looks nicer
      scale: Math.pow(feature.getProperty('mag'), 2)
    },
    zIndex: Math.floor(feature.getProperty('mag'))
  };
}


function interpolateHsl(lowHsl, highHsl, fraction) {
  var color = [];
  for (var i = 0; i < 3; i++) {
    // Calculate color based on the fraction.
    color[i] = (highHsl[i] - lowHsl[i]) * fraction + lowHsl[i];
  }

  return 'hsl(' + color[0] + ',' + color[1] + '%,' + color[2] + '%)';
}

var mapStyle = [{
  'featureType': 'all',
  'elementType': 'all',
  'stylers': [{
    'visibility': 'off'
  }]
}, {
  'featureType': 'landscape',
  'elementType': 'geometry',
  'stylers': [{
    'visibility': 'on'
  }, {
    'color': '#fcfcfc'
  }]
}, {
  'featureType': 'water',
  'elementType': 'labels',
  'stylers': [{
    'visibility': 'off'
  }]
}, {
  'featureType': 'water',
  'elementType': 'geometry',
  'stylers': [{
    'visibility': 'on'
  }, {
    'hue': '#5f94ff'
  }, {
    'lightness': 60
  }]
}];
html,
body,
#map {
  height: 100%;
  margin: 0;
  padding: 0;
}

[ 1124]

5
задан Thomas Levesque 26 July 2010 в 09:14
поделиться

3 ответа

Я нашел решение этой проблемы, которая следовала из моей собственной глупости во-первых. Все это стало ясным мне, как только я генерировал hbm файлы от быстрого отображения NH.

<class name="CatalogItem" table="`CatalogItem`" xmlns="urn:nhibernate-
mapping-2.2" optimistic-lock="version">
    ...

    <property name="Name" length="100" type="String">
      <column name="Name" />
    </property>

    ...

    <component name="Manufacturer" insert="false" update="true">
      <property name="Name" length="100" type="String">
        <column name="Name" />
      </property>
    </component>
  </class>

Заметьте, что столбец для свойства Name и столбец для компонента Производителя оба отображаются на том же столбце. Вот почему это закончилось в ArgumentOutOfRangeException, потому что было больше аргументов, чем были имена столбцов. Я решил это explicitely определение имени столбца для отображения компонента:

Компонент (catalogItem => catalogItem. Производитель, m => m. Карта (производитель => производитель. Имя, "Производитель"));

Другой урок извлечен.

15
ответ дан 18 December 2019 в 09:54
поделиться

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

0
ответ дан 18 December 2019 в 09:54
поделиться

Ваш CatalogItem кажется, не имеет a Price свойство, которое кажется нечетным, когда Вы используете Reveal помощник.

0
ответ дан 18 December 2019 в 09:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: