<\/HEAD>
<\/P>
Takže pracujete na své úžasné aplikaci ArcGIS JavaScript. Máte nějaké pěkné vlastní nástroje, možná dokonce i nějaké vyhledávací funkce, tahle věc vypadá skvěle<\/EM>. Kliknete na prvek na mapě a máte všechny důležité informace o poli... kromě toho, že tam máte čísla, kde by se měly zobrazovat hodnoty? <\/P>
<\/P>Co to sakra znamená? Co to číslo vůbec znamená? <\/EM> Takže se podíváte na mapovou službu a vidíte, že toto pole má s ním spojenou domain. Možná se podíváte do jiné aplikace, kde je tato služba upravována, a všimnete si, že attribute inspector v editoru má správné hodnoty domain a teď si jen drbete hlavu, jak tyto hodnoty získat. Nebojte se, jsou tam...někde<\/EM>.<\/P><\/P>Lov na pole<\/H2>Naštěstí má FeatureLayer vlastnost fields, kterou můžeme použít nejen k získání hodnot domain, ale také aliasů, což jsou pěkné čitelné pro člověka<\/EM> popisy polí. Není to přesně v optimálním formátu pro přímé použití, ale s trochou práce to můžete snadno zvládnout. Možná budete chtít vytvořit hash tabulku, abyste snadno spojili kódované hodnoty s hodnotami domain.<\/P><\/P>var fieldMap = {};
featureLayer.on('load', function() {
\/\/- iterujte pole vrstvy
featureLayer.fields.filter(function(x) {
return !!x.domain; \/\/- přetypovat na boolean. zajímají nás jen domain
}).map(function(x) { \/\/- mapování polí s domain
fieldMap[x.name] = {}; \/\/- hash tabulka
fieldMap[x.name].values = {}; \/\/- bude obsahovat hodnoty domain
fieldMap[x.name].alias = x.alias; \/\/- pěkný zobrazovaný název
x.domain.codedValues.map(function(a) { \/\/- mapování přes codedValues
fieldMap[x.name].values[a.code] = a.name; \/\/- uložit domain
});
});
});<\/PRE><\/P>Klíčem je iterovat přes pole vrstvy a uložit kódovanou hodnotu jako klíč k hodnotě domain. To usnadní vyhledávání hodnot v dalším kroku.<\/P><\/P>Máme metodu, která definuje obsah popup okna při kliknutí. Můžeme použít hash tabulku hodnot domain, aby to byla jednoduchá úloha.<\/P><\/P>function getTextContent(graphic){
\/\/- získat klíče atributů
\/\/- *Poznámka - možná budete potřebovat shim pro váš prohlížeč
var elems = Object.keys(graphic.attributes).map(function(x) {
var attr = graphic.attributes;<\/<X>
var field = fieldMap;<\/<X>
if (field) {
return "<b>" + field.alias + "<\/_b>: " + field.values[attr];
} else {
return false;
}
}).filter(function(x) { return x; }); \/\/- vrátit jen platné výsledky
return elems.join('<br \/>');
}<\/PRE><\/P>V tomto příkladu používáme Object.keys (poznámka - možná budete muset shim tuto metodu)<\/EM>, abyste získali klíče atributů. Klíče můžete použít k získání odpovídající sady kódovaných a domain hodnot spolu s aliasem pole a sestavit jednoduchý DOM prvek pro zobrazení v InfoWindow. Výsledek této techniky nyní zobrazuje InfoWindow takto níže.<\/P>
<\/P>Můžete vidět kompletní demo tohoto příkladu zde<\/A>.<\/P><\/P>
Stačí jen trochu upravit<\/H2>Někdy při práci s daty z ArcGIS Serveru a podobně může být potřeba upravit výsledky tak, aby se zobrazily podle vašich představ. Není to těžké a když to uděláte párkrát, stane se to druhou přirozeností, ale z vlastní zkušenosti vím, jak frustrující může být snažit se procházet dokumentaci a řešit tento jednoduchý úkol. Doufám, že vám to ušetří krok nebo dva. Toto není nutně jediný způsob, jak toho dosáhnout, ale považoval jsem to za nejpřímější příklad.<\/P><\/P>Pro více tipů a triků o geodev navštivte můj blog<\/A>.<\/P><\BODY><\HTML>