📄 aimsclassrender.js
字号:
}
function setClassRenderBreaks(theReply) {
ClassRenderCount = justGetFeatureCount(theReply);
//alert(ClassRenderCount + " Features");
if (ClassRenderCount>0) {
if (ClassRenderCount<ClassRenderClasses) ClassRenderClasses = ClassRenderCount;
var theValues = getAllFieldValues(theReply,ClassRenderLayerField,ClassRenderCount);
//alert("Values extracted");
theValues.sort(numberorder);
//alert("Values sorted");
ClassRenderMin = theValues[0];
ClassRenderMax = theValues[ClassRenderCount-1];
ClassRenderRange = ClassRenderMax - ClassRenderMin;
ClassRenderBreakIncrement = ClassRenderRange / ClassRenderClasses;
ClassRenderRecordIncrement = Math.round(ClassRenderCount / ClassRenderClasses);
//alert("Min:" + ClassRenderMin + "\nMax:" + ClassRenderMax);
var msg = crList[13] + "\n";
if (ClassRenderMethod==0) {
// equal interval
j=-1;
for (var i=0;i<LayerFieldCount;i++) {
if (ClassRenderLayerField==LayerFields[i]) j=i;
}
if (j!=-1) {
var u = Math.pow(10, parseInt(LayerFieldPrecision[j]));
} else {
//go with value specified in orginal version of this script
var u = Math.pow(10, numDecimals);
}
msg +="u=" + u + "\n";
var theIncre = ClassRenderMin;
for (var i=0;i<ClassRenderClasses;i++) {
if ( (i>0) && (theIncre!=0) ) {
// Get ceiling of theIncre at precision. (Round to handle numbers ending in 5)
ClassRenderBreakMin[i] = Math.round(parseFloat(theIncre * u + (5/10))) / u;
} else {
ClassRenderBreakMin[i] = theIncre;
}
// Add the increment
theIncre = theIncre + ClassRenderBreakIncrement;
if (theIncre!=0) {
// Get floor of theIncre at precision
ClassRenderBreakMax[i] = parseInt(theIncre * u) / u;
} else {
ClassRenderBreakMax[i] = theIncre;
}
// alert("CRBMin:" + ClassRenderBreakMin[i] + "\nCRBMax:" + ClassRenderBreakMax[i]);
msg +=theIncre + "\n";
}
} else {
// quantile
var theRecord = 0;
for (var i=0;i<ClassRenderClasses;i++) {
ClassRenderBreakMin[i] = theValues[theRecord];
theRecord = theRecord + ClassRenderRecordIncrement;
if (theRecord>=ClassRenderCount) theRecord = ClassRenderCount-1;
if (theRecord>0) {
ClassRenderBreakMax[i] = theValues[theRecord-1];
} else {
ClassRenderBreakMax[i] = theValues[theRecord];
}
msg +=theValues[theRecord] + "\n";
}
}
// end if statement
ClassRenderBreakMax[ClassRenderClasses-1] = ClassRenderMax;
//alert(msg);
setBreakColors();
setBreakSizes();
ClassRenderString[ClassRenderLayerIndex] = ClassRenderStringPrefix[ClassRenderLayerIndex] + setRenderString() + ClassRenderStringSuffix[ClassRenderLayerIndex];
legTitle = ClassRenderTitle;
theValues=null;
}
hideRetrieveData();
if (aimsLayersPresent) {
if ((hasTOC) && (!legendVisible)) parent.TOCFrame.document.location = appDir + "toc.htm";
if (LayerListOpen) writeLayerListForm();
}
sendMapXML();
}
function setRenderString() {
//ClassRenderShape = LayerType[ActiveLayerIndex];
var rendString = '<VALUEMAPRENDERER lookupfield="' + ClassRenderLayerField + '">\n';
for (var z=0;z<ClassRenderClasses;z++) {
rendString += '<RANGE lower="' + ClassRenderBreakMin[z] + '" upper="' + ClassRenderBreakMax[z] + '" equality="all">\n';
if (ClassRenderShape=="point") {
rendString += '<SIMPLEMARKERSYMBOL color="' + ClassRenderBreakColor[z] + '" type="' + ClassRenderStyle[ClassRenderLayerIndex] + '" width="' + ClassRenderBreakSize[z] + '" />\n';
} else if (ClassRenderShape=="polygon") {
rendString += '<SIMPLEPOLYGONSYMBOL fillcolor="' + ClassRenderBreakColor[z] + '" filltype="' + ClassRenderStyle[ClassRenderLayerIndex] + '" ';
if (ClassRenderOutlineColor[ClassRenderLayerIndex]!="") {
rendString += 'boundarycolor="' + ClassRenderOutlineColor[ClassRenderLayerIndex] + '" boundarywidth="' + ClassRenderBreakSize[z] + '" ';
} else {
rendString += 'boundary="false" ';
}
rendString += '/>\n';
} else {
rendString += '<SIMPLELINESYMBOL type="' + ClassRenderStyle[ClassRenderLayerIndex] + '" color="' + ClassRenderBreakColor[z] + '" width="' + ClassRenderBreakSize[z] + '" />\n';
}
rendString += '</RANGE>\n';
}
rendString += '</VALUEMAPRENDERER>';
return rendString
}
// ramp out colors
function setBreakColors() {
if (ClassRenderStartColor[ClassRenderLayerIndex]==ClassRenderEndColor[ClassRenderLayerIndex]) {
// starting and ending colors are the same
for (var i=0;i<ClassRenderClasses;i++) {
ClassRenderBreakColor[i] = ClassRenderStartColor[ClassRenderLayerIndex];
}
} else {
var sColors = ClassRenderStartColor[ClassRenderLayerIndex].split(",");
var eColors = ClassRenderEndColor[ClassRenderLayerIndex].split(",");
var sRed = parseInt(sColors[0]);
var sGreen = parseInt(sColors[1]);
var sBlue = parseInt(sColors[2]);
var eRed = parseInt(eColors[0]);
var eGreen = parseInt(eColors[1]);
var eBlue = parseInt(eColors[2]);
var rRange = eRed - sRed;
var gRange = eGreen - sGreen;
var bRange = eBlue - sBlue;
var rIncre = parseInt(rRange / ClassRenderClasses);
var gIncre = parseInt(gRange / ClassRenderClasses);
var bIncre = parseInt(bRange / ClassRenderClasses);
var theRed = sRed + rIncre;
var theGreen = sGreen + gIncre;
var theBlue = sBlue + bIncre;
ClassRenderBreakColor[0] = ClassRenderStartColor[ClassRenderLayerIndex];
ClassRenderBreakColor[ClassRenderClasses-1] = ClassRenderEndColor[ClassRenderLayerIndex];
for (var i=1;i<(ClassRenderClasses-1);i++) {
ClassRenderBreakColor[i] = theRed + "," + theGreen + "," + theBlue;
theRed = theRed + rIncre;
theGreen = theGreen + gIncre;
theBlue = theBlue + bIncre;
}
sColors=null;
eColors=null;
}
}
// ramp out sizes
function setBreakSizes() {
if (ClassRenderStartSize[ClassRenderLayerIndex]==ClassRenderEndSize[ClassRenderLayerIndex]) {
// starting and ending sizes are the same
for (var i=0;i<ClassRenderClasses;i++) {
ClassRenderBreakSize[i] = ClassRenderStartSize[ClassRenderLayerIndex];
}
} else {
ClassRenderBreakSize[0] = ClassRenderStartSize[ClassRenderLayerIndex];
ClassRenderBreakSize[ClassRenderClasses-1] = ClassRenderEndSize[ClassRenderLayerIndex];
var sRange = ClassRenderEndSize[ClassRenderLayerIndex] - ClassRenderStartSize[ClassRenderLayerIndex];
var sIncre = parseInt(sRange * 10 + (5/10)) / 10;
var theSize = ClassRenderStartSize[ClassRenderLayerIndex] + sIncre;
for (var i=1;i<(ClassRenderClasses-1);i++) {
ClassRenderBreakSize[i] = theSize;
theSize = theSize + sIncre;
}
}
}
function calcFieldStats(theReply,theLayer,theField) {
inCount = justGetFeatureCount(theReply);
hideRetrieveData();
var theValues = getAllFieldValues(theReply,theField,inCount);
var theCount = theValues.length;
if (theCount>0) {
//alert("Values extracted");
theValues.sort(numberorder);
//alert("Values sorted");
var theMin = theValues[0];
var theMax = theValues[theCount-1];
var theRange = theMax - theMin;
var theVarInt = 0;
var theSum = 0;
for (var i=0;i<theCount;i++) {
theSum = theSum + theValues[i];
theVarInt = theVarInt + Math.pow(theValues[i],2);
}
var u = Math.pow(10,numStatDecimals);
var theAverage = theSum / theCount;
var theVariance = (theVarInt - theCount * Math.pow(theAverage,2)) / (theCount-1);
var theStdDev = Math.sqrt(theVariance);
if (theAverage!=0) theAverage = parseInt(theAverage * u + 0.5) / u;
if (theStdDev!=0) theStdDev = parseInt(theStdDev * u + 0.5) / u;
if (theSum!=0) theSum = parseInt(theSum * u + 0.5) / u;
var msg = crList[14] + theField ;
msg +="\n" + crList[15] + theLayer;
msg +="\n\n" + crList[16] + theCount + "\n" + crList[17] + theMin;
msg +="\n" + crList[18] + theMax + "\n" + crList[19] + theSum;
msg +="\n" + crList[20] + theAverage + "\n" + crList[21] + theRange;
msg +="\n" + crList[22] + theVariance;
msg +="\n" + crList[23] + theStdDev;
alert(msg);
} else {
alert(crList[24]);
}
theValues=null;
}
// form for interactive classifying
function writeFieldStatsForm(theIndex) {
var crIndex = theIndex;
if (useTextFrame) {
var Win1 = parent.TextFrame;
Win1.document.open();
var t = "parent.MapFrame";
} else {
var Win1 = open(appDir + "text.htm","RenderWindow","width=575,height=150,scrollbars=yes,resizable=yes");
var t = "opener";
if (parent.MapFrame!=null) t = "opener.parent.MapFrame";
}
Win1.document.writeln('<html><meta http-equiv="Content-Type" content="text/html; charset=' + charSet + '"><HEAD>');
Win1.document.writeln('<script language="javascript">');
Win1.document.writeln(' var t = ' + t);
Win1.document.writeln(' function setStyle() {');
Win1.document.writeln(' var f = document.forms[0];');
Win1.document.writeln(' var qField = f.QueryField.options[f.QueryField.selectedIndex].value;');
Win1.document.writeln(' t.setupFieldStats(qField);');
Win1.document.writeln(' }');
Win1.document.writeln(' function selectLayer() {');
Win1.document.writeln(' var f = document.forms[0];');
Win1.document.writeln(' var theIndex = f.theLayer.selectedIndex;');
Win1.document.writeln(' t.ClassRenderLayerIndex = theIndex;');
Win1.document.writeln(' t.fieldStats();');
Win1.document.writeln(' }');
Win1.document.writeln('</script>');
Win1.document.writeln('</head>');
Win1.document.writeln('<body bgcolor="Black" text="White" topmargin=0 leftmargin=0 rightmargin=0 onload="window.focus()">');
Win1.document.writeln('<div align="center">');
Win1.document.writeln('<font face="Arial" size="-2"><b>');
Win1.document.writeln('<form action="" name="theStatsForm" onsubmit="setStyle(); return false;">');
Win1.document.writeln('<table cellspacing="2" nowrap bgcolor="' + textFrameFormColor + '" width=100%>');
Win1.document.writeln('<tr><th colspan="3" align="CENTER">');
Win1.document.writeln('<font face="Arial" size="-1"><b>' + crList[25] + '</b><br></font>');
Win1.document.writeln('<font face="Arial" size="-2"><b>' + crList[26] +'</b></font>');
Win1.document.writeln('</th>');
Win1.document.writeln('</tr>');
Win1.document.writeln('<tr>');
Win1.document.writeln('<td align="Left">');
Win1.document.writeln('<font face="Arial" size="-1"> ' + crList[5] + '<br>');
Win1.document.writeln('<select name="theLayer" onchange="selectLayer()">')
for (var i=0;i<ClassRenderLayer.length;i++) {
Win1.document.write(' <option value=' + i);
if (i==crIndex) Win1.document.write(' selected');
Win1.document.writeln('>' + ClassRenderLayer[i]);
}
Win1.document.writeln('</select>');
Win1.document.writeln('</font></td>');
Win1.document.writeln('<td><font face="Arial" size="-1">' + crList[6] + '<br>');
Win1.document.writeln(' <select name="QueryField">');
for (var i=0;i<LayerFieldCount;i++) {
var typeNum = Math.abs(parseInt(LayerFieldType[i]));
if ((typeNum>=4) && (typeNum<=9)) {
Win1.document.write(' <option value="' + LayerFields[i] + '"');
Win1.document.writeln('>' + LayerFields[i]);
}
}
Win1.document.writeln(' </select>');
Win1.document.writeln('</font>');
Win1.document.writeln('</td>');
Win1.document.writeln('<td align="CENTER" valign="BOTTOM">');
Win1.document.writeln('<input type="Button" name="setDU" value="' + crList[12] + '" onclick="setStyle()"> <br>');
Win1.document.writeln('</td></tr></table></form>');
Win1.document.writeln('</b></font></div>');
Win1.document.writeln('</body></html>');
Win1.document.close();
Win1=null;
}
// send XML request for field values to setup new custom renderer for the current ClassRenderLayer
function setupFieldStats(theField) {
ClassRenderLayerField = theField;
var theLayer = ClassRenderLayer[ClassRenderLayerIndex];
// get LayerName index
var j=-1;
for (var k=0;k<LayerName.length;k++) {
if (LayerName[k]==theLayer) j=k;
}
// get shape type
var shapeType = LayerType[j];
var theLayerID = LayerID[j]
showRetrieveData();
var theString = writeGetAllValues(theLayerID, shapeType, theField);
ClassRenderLayerName = theLayer;
sendGetValuesRequest(theString, 2002);
}
// set up the interactive classification
function fieldStats() {
var j = -1;
for (var i=0;i<LayerName.length;i++) {
if (ClassRenderLayer[ClassRenderLayerIndex] == LayerName[i]) j = i;
}
if (j>-1) {
setLayerFields(j);
fieldIndex=0;
selectCount=0;
showBuffer=false;
ActiveLayer=LayerID[j];
ActiveLayerType=LayerType[j];
ActiveLayerIndex=j;
writeFieldStatsForm(ClassRenderLayerIndex);
} else {
alert(crList[27]);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -