Вы можете использовать feature.get (propertyname) в вашем styleFunction и использовать значение для управления стилем, например
var styleFunction = function(feature) {
var now = new Date().getTime()
var time = feature.get('time');
var color;
if (time < now - (96 * 3600000)) {
color = 'rgba(255,255,0,'
} else if (time < now - (48 * 3600000)) {
color = 'rgba(255,191,0,'
} else {
color = 'rgba(255,0,0,'
}
return [
new ol.style.Style({
image: new ol.style.Circle({
radius: (feature.get('mag')-3)*5,
fill : new ol.style.Fill({
color: color + '0.5)'
})
})
})
]
};
var vectorSource = new ol.source.Vector({
url: 'https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.geojson',
format: new ol.format.GeoJSON()
});
var vectorLayer = new ol.layer.Vector({
source: vectorSource,
style: styleFunction
});
var map = new ol.Map({
layers: [
new ol.layer.Tile({
source: new ol.source.OSM(),
}),
vectorLayer
],
target: 'map',
view: new ol.View({
center: [0,0],
zoom: 2,
})
});
<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css" type="text/css">
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
<div id="map" class="map"></div>
Так, вот идея, как это могло работать.
На основе моего предыдущего ответа (присоединяют к AppDomain. CurrentDomain. ProcessExit) и комментарий stephbu:
Это захватит наиболее структурированные разрушения процесса, например, - но я не уверен, что это захватит все холмы слезы. например, Процесс http://blogs.msdn.com/jmstall/archive/2006/11/26/process-exit-event.aspx перерабатывает, уничтожит процесс, если это, будет казаться, будет подвешено - Ваш обработчик не назвать.
Я предлагаю следующую стратегию:
В (обычном) обработчике ProcessExit (то, которое мы предполагаем, не назовут на переработке пула приложений), запишите некоторый файл в диск как"app_domain_end_ok.tmp
".
Затем в Application_Start Вашего global.asax проверяют на этот файл. Если это не существует, это - знак, что приложение не было завершено в очевидном способе (или что это - первый раз когда-либо, это запустилось). Не забывайте удалять этот файл из диска после проверки.
Я не попробовал это сам, но это могло стоить попытки.
Я нашел эту статью о блоге Scott Guthries:
Вход событий завершения работы приложения ASP.NET
Кто-то на listserv недавно спросил, был ли способ выяснить, почему и когда ASP.NET перезапускает домены приложения. А именно, он искал точную причину того, что инициировало их на его приложении в совместно использованной размещенной среде производства (было это web.config изменение файла, изменение global.asax, app_code изменение каталога, каталог удаляет изменение, макс. цифровые компиляции достигли квоты, \bin изменение каталога, и т.д.).
У Thomas в моей команде есть прохладный фрагмент кода, что он записал, что использует некоторые изящные частные отражательные приемы, чтобы получить и зарегистрировать эту информацию. Это довольно легко к повторному использованию, и добавьте в любое приложение, и может использоваться для входа информации где угодно, Вы хотите (ниже использования кода журнал событий NT для сохранения его – но Вы могли столь же легко отправить его в базу данных или по электронному письму администратору). Код работает и с ASP.NET V1.1 и с ASP.NET V2.0.
Просто добавьте Систему. Отражение и Система. Пространства имен диагностики к Вашему классу/файлу Global.asax, и затем добавляют событие Application_End с этим кодом:
public void Application_End() {
HttpRuntime runtime =
(HttpRuntime) typeof(System.Web.HttpRuntime).InvokeMember("_theRuntime",
BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.GetField,
null, null, null);
if (runtime == null)
return;
string shutDownMessage =
(string) runtime.GetType().InvokeMember("_shutDownMessage",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
null, runtime, null);
string shutDownStack =
(string) runtime.GetType().InvokeMember("_shutDownStack",
BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField,
null, runtime, null);
if (!EventLog.SourceExists(".NET Runtime")) {
EventLog.CreateEventSource(".NET Runtime", "Application");
}
EventLog log = new EventLog();
log.Source = ".NET Runtime";
log.WriteEntry(String.Format(
"\r\n\r\n_shutDownMessage={0}\r\n\r\n_shutDownStack={1}",
shutDownMessage, shutDownStack),
EventLogEntryType.Error);
}
Я никогда не пробовал это сам, но Вы могли попытаться присоединить обработчик событий к событию ProcessExit AppDomain.
...
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnExit);
...
void OnExit(object sender, EventArgs e) {
// do something
}
Я надеюсь, что это помогает!