cadastral.tools = {
prevQuery: "",
swapQuickZoom: function (zoomType) {
switch (zoomType) {
case "city":
cadastral.tools.fillCityList();
break;
case "county":
cadastral.tools.fillCountyList();
break;
default:
break;
}
if (zoomType !== "") {
dojo.style(zoomType, "display", "block");
}
if (cadastral.tools.prevQuery !== "" && cadastral.tools.prevQuery !== null && cadastral.tools.prevQuery != zoomType) {
dojo.style(cadastral.tools.prevQuery, "display", "none");
}
cadastral.tools.prevQuery = zoomType;
},
fillCityList: function () {
dojo.byId('citySelect').options.length = 0;
var sortedArray = cadastral.cities.sort(function (a, b) {
return a.name == b.name ? 0 : ((a.name > b.name) ? 1 : -1);
});
var options = "";
dojo.forEach(sortedArray, function (item, i) {
dojo.byId('citySelect').options.add(new Option(item.name, item.value));
});
},
findCity: function () {
cadastral.base.showLoading();
var si = dojo.byId("citySelect").selectedIndex;
var cityName = dojo.byId('citySelect').options[si].text;
var searchLayer = dojo.byId('citySelect').options[si].value;
var queryUrl = "";
switch (searchLayer) {
case "MT_Cities":
queryUrl = cadastral.cityQueryUrl;
break;
default:
queryUrl = cadastral.citySeatQueryUrl;
break;
}
var queryTask = new esri.tasks.QueryTask(queryUrl);
var query = new esri.tasks.Query();
query.returnGeometry = true;
query.where = "NAME = '" + cityName + "'";
dojo.connect(queryTask, "onComplete", function (featureSet) {
try {
if (featureSet.features.length > 0) {
cadastral.map.graphics.clear();
var feature = featureSet.features[0];
var newExtent = new esri.geometry.Extent(feature.geometry.x - 2000, feature.geometry.y - 2000, feature.geometry.x + 2000, feature.geometry.y + 2000, new esri.SpatialReference({ wkid: 102100 }));
cadastral.map.setExtent(newExtent, true);
//cadastral.hidePane('toolsPane')
}
}
catch (err) { alert(err); }
});
queryTask.execute(query);
},
fillCountyList: function () {
dojo.byId('countyZoomSelect').options.length = 0;
var sortedArray = cadastral.counties.sort(function (a, b) {
return a.name == b.name ? 0 : ((a.name > b.name) ? 1 : -1);
});
var options = "";
dojo.forEach(sortedArray, function (item, i) {
dojo.byId('countyZoomSelect').options.add(new Option(item.name, item.name));
});
},
findCounty: function () {
cadastral.base.showLoading();
var si = dojo.byId("countyZoomSelect").selectedIndex;
var countyName = dojo.byId('countyZoomSelect').options[si].text;
var queryTask = new esri.tasks.QueryTask(cadastral.countyQueryUrl);
var query = new esri.tasks.Query();
query.returnGeometry = true;
query.where = "NAME = '" + countyName + "'";
dojo.connect(queryTask, "onComplete", function (featureSet) {
try {
if (featureSet.features.length > 0) {
cadastral.map.graphics.clear();
var graphic = featureSet.features[0];
var extent = esri.graphicsExtent([graphic]);
cadastral.map.setExtent(extent, true);
}
}
catch (err) { alert(err); }
});
queryTask.execute(query);
},
findTRS: function () {
cadastral.base.showLoading();
dojo.byId("findTRSMessage").innerHTML = "";
var township = dojo.byId("townshipDDL").value;
var tarray = township.split(".");
var tfrac;
if (tarray.length > 1) {
township = tarray[0];
if (township.length == 1) {
township = "00" + township;
}
else {
township = "0" + township;
}
tfrac = 2;
}
else {
tfrac = 0;
}
var td = null;
if (dojo.byId("TN").checked) {
td = "N";
}
else {
td = "S";
}
var range = dojo.byId("range").value;
var rarray = range.split(".");
var rfrac;
if (rarray.length > 1) {
range = rarray[0];
if (range.length == 1) {
range = "00" + range;
}
else {
range = "0" + range;
}
rfrac = 2;
}
else {
rfrac = 0;
}
var rd = null;
if (dojo.byId("RE").checked) {
rd = "E";
}
else {
rd = "W";
}
// Sec will hold each html section control
var sec;
// sections will hold the list of sections to zoom to
var sections = "";
var sectionsArray = [];
for (i = 1; i < 37; i++) {
sec = document.getElementById('sec' + i);
if (sec.colorChanged === true) {
sections += sec.innerHTML + ",";
}
}
if (sections !== "") {
sections = sections.substr(0, sections.length - 1);
sectionsArray = sections.split(',');
}
if (sectionsArray.length === 0) {
var queryTask = new esri.tasks.QueryTask(cadastral.plssQueryUrl);
var query = new esri.tasks.Query();
query.returnGeometry = true;
query.outFields = ["PLSSID"];
query.where = "TWNSHPNO = '" + township + "' AND TWNSHPFRAC = '" + tfrac + "' AND TWNSHPDIR = '" + td + "' AND RANGENO = '" + range + "' AND RANGEFRAC = '" + rfrac + "' AND RANGEDIR = '" + rd + "'";
dojo.connect(queryTask, "onComplete", function (featureSet) {
if (featureSet.features.length > 0) {
cadastral.map.graphics.clear();
var graphic = featureSet.features[0];
var extent = esri.graphicsExtent([graphic]);
cadastral.map.setExtent(extent, true);
} else {
dojo.byId("findTRSMessage").innerHTML = "*Not a valid TRS search for Montana. Please try again.";
cadastral.base.hideLoading();
}
});
dojo.connect(queryTask, "onError", function (error) {
alert(error);
cadastral.base.hideLoading();
});
queryTask.execute(query);
}
else {
var queryTask = new esri.tasks.QueryTask(cadastral.plssQueryUrl);
var query = new esri.tasks.Query();
query.returnGeometry = true;
query.outFields = ["PLSSID"];
query.where = "TWNSHPNO = '" + township + "' AND TWNSHPFRAC = '" + tfrac + "' AND TWNSHPDIR = '" + td + "' AND RANGENO = '" + range + "' AND RANGEFRAC = '" + rfrac + "' AND RANGEDIR = '" + rd + "'";
var plssId;
dojo.connect(queryTask, "onComplete", function (featureSet) {
try {
if (featureSet.features.length > 0) {
cadastral.map.graphics.clear();
var graphic = featureSet.features[0];
plssId = graphic.attributes.PLSSID;
var secQuery = "";
for (i = 0; i < sectionsArray.length; i++) {
if (sectionsArray[i].length == 1) {
sectionsArray[i] = "0" + sectionsArray[i];
}
if (i === 0) {
secQuery = "(FRSTDIVNO = '" + sectionsArray[i] + "'";
}
else {
if (sectionsArray[i] !== "") {
secQuery += " OR FRSTDIVNO = '" + sectionsArray[i] + "'";
}
}
}
secQuery += ")";
if (plssId !== "") {
var queryTask = new esri.tasks.QueryTask(cadastral.plssSecQueryUrl);
var query = new esri.tasks.Query();
query.returnGeometry = true;
query.where = "PLSSID = '" + plssId + "' AND " + secQuery;
var plssId;
dojo.connect(queryTask, "onComplete", function (featureSet) {
try {
if (featureSet.features.length > 0) {
var maxX;
var maxY;
var minX;
var minY;
for (i = 0; i < featureSet.features.length; i++) {
var extent = esri.graphicsExtent([featureSet.features[i]]);
if (i === 0) {
maxX = extent.xmax;
maxY = extent.ymax;
minX = extent.xmin;
minY = extent.ymin;
}
if (maxX < extent.xmax) {
maxX = extent.xmax;
}
if (maxY < extent.ymax) {
maxY = extent.ymax;
}
if (minX > extent.xmin) {
minX = extent.xmin;
}
if (minY > extent.ymin) {
minY = extent.ymin;
}
}
cadastral.map.graphics.clear();
var extent = new esri.geometry.Extent(minX, minY, maxX, maxY, new esri.SpatialReference({ wkid: 102100 }));
cadastral.map.setExtent(extent, true);
}
}
catch (err) { alert(err); }
});
dojo.connect(queryTask, "onError", function (error) {
alert(error);
cadastral.base.hideLoading();
});
queryTask.execute(query);
}
} else {
dojo.byId("findTRSMessage").innerHTML = "*Not a valid TRS search for Montana. Please try again.";
cadastral.base.hideLoading();
}
}
catch (err) { alert(err); }
});
dojo.connect(queryTask, "onError", function (error) {
alert(error);
cadastral.base.hideLoading();
});
queryTask.execute(query);
}
},
selectSection: function (obj) {
if (obj.colorChanged === true) {
obj.style.background = '#D6D6E0';
obj.colorChanged = false;
}
else {
obj.style.background = '#25AAE1';
obj.colorChanged = true;
}
},
navToolbar: null,
extentHistoryChangeHandler: function () {
dojo.byId("prevExtent").disabled = cadastral.tools.navToolbar.isFirstExtent();
dojo.byId("nextExtent").disabled = cadastral.tools.navToolbar.isLastExtent();
},
prevSelectType: "",
swapSelectType: function (selectType) {
cadastral.base.showData("", 'bufferResults');
// First thing we do is disconnect any onclick listeners on the map
for (var i = 0; i < cadastral.mapOnClickListeners.length; i++) {
dojo.disconnect(cadastral.mapOnClickListeners[i]);
}
cadastral.toolbar.deactivate();
switch (selectType) {
case "buffer":
dojo.addClass("bufferLi", "active");
dojo.removeClass("polygonLi", "active");
var queryTask = new esri.tasks.QueryTask(cadastral.parcelQueryUrl);
var query = new esri.tasks.Query();
query.returnGeometry = true;
//query.outFields = ["PARCELID", "PARCELNAME", "OWNERCLASSIFICATION", "PROPERTY_TYPE", "OWNER_NAME_1", "AREATYPE"];
query.outFields = ["*"];
var gsvc = new esri.tasks.GeometryService(cadastral.geometryServiceUrl);
// Wire up the click event for the map
cadastral.mapOnClickListeners.push(dojo.connect(cadastral.map, "onClick", function (evt) {
dojo.style("bufferWait", "display", "block");
cadastral.map.graphics.clear();
var params = new esri.tasks.BufferParameters();
params.geometries = [evt.mapPoint];
// Buffer in linear units such as meters, km, miles etc.
params.distances = [dojo.byId('bufferDistance').value];
params.unit = esri.tasks.GeometryService.UNIT_STATUTE_MILE;
params.bufferSpatialReference = new esri.SpatialReference({ wkid: 102100 });
params.outSpatialReference = cadastral.map.spatialReference;
gsvc.buffer(params);
}));
// Listen for and handle the buffer complete event. This will draw the buffer polygon and run the query.
dojo.connect(gsvc, "onBufferComplete", function (geometries) {
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 128, 255]), 2), new dojo.Color([0, 128, 255, 0.15]));
//var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 128, 255]), 2);
var graphic = new esri.Graphic(geometries[0], symbol);
cadastral.map.graphics.add(graphic);
query.geometry = esri.geometry.webMercatorToGeographic(geometries[0]);
query.outSpatialReference = { "wkid": 102100 };
queryTask.execute(query);
});
// Listen for and handle the on complete event of the query.
dojo.connect(queryTask, "onComplete", function (fset) {
//create symbol for selected features
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 2);
var parcelId = [];
var resultFeatures = fset.features;
for (var i = 0, il = resultFeatures.length; i < il; i++) {
if (resultFeatures[i].attributes["PARCELID"] != " ") {
parcelId.push(resultFeatures[i].attributes["PARCELID"]);
var graphic = resultFeatures[i];
graphic.setSymbol(symbol);
cadastral.map.graphics.add(graphic);
}
}
if (parcelId.length <= 60) {
// Call SearchByGeocodeArray passing in the array of geocodes.
dojo.xhrGet({
url: cadastral.pathName + "/Search/SearchByGeocodeArray",
content: { geocodes: parcelId },
handleAs: "json",
load: function (rdata) {
cadastral.base.showData(rdata, 'bufferResults');
}
});
}
else {
cadastral.map.graphics.clear();
dojo.style("bufferWait", "display", "none");
alert("To large of a query. Please use a smaller buffer, especially in heavily populated areas.");
}
});
dojo.connect(queryTask, "onError", function (error) { alert(error); });
break;
case "polygon":
for (var i = 0; i < cadastral.toolbarOnDrawEndListeners.length; i++) {
dojo.disconnect(cadastral.toolbarOnDrawEndListeners[i]);
}
dojo.addClass("polygonLi", "active");
dojo.removeClass("bufferLi", "active");
var queryTask = new esri.tasks.QueryTask(cadastral.parcelQueryUrl);
var query = new esri.tasks.Query();
query.returnGeometry = true;
query.outFields = ["*"];
cadastral.map.graphics.clear();
cadastral.toolbar.activate(esri.toolbars.Draw.POLYGON);
//on draw end add graphic, project it, and get new length
cadastral.toolbarOnDrawEndListeners.push(dojo.connect(cadastral.toolbar, "onDrawEnd", function (geometry) {
cadastral.toolbar.deactivate();
dojo.style("bufferWait", "display", "block");
var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([0, 128, 255]), 2), new dojo.Color([0, 128, 255, 0.15]));
var graphic = new esri.Graphic(geometry, symbol);
cadastral.map.graphics.add(graphic);
var features = [];
features.push(graphic);
var featureSet = new esri.tasks.FeatureSet();
featureSet.features = features;
query.geometry = esri.geometry.webMercatorToGeographic(graphic.geometry);
query.outSpatialReference = { "wkid": 102100 };
queryTask.execute(query);
}));
// Listen for and handle the on complete event of the query.
dojo.connect(queryTask, "onComplete", function (fset) {
//create symbol for selected features
var symbol = new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([255, 0, 0]), 2);
var parcelId = [];
var resultFeatures = fset.features;
for (var i = 0, il = resultFeatures.length; i < il; i++) {
if (resultFeatures[i].attributes["PARCELID"] != " ") {
parcelId.push(resultFeatures[i].attributes["PARCELID"]);
var graphic = resultFeatures[i];
graphic.setSymbol(symbol);
cadastral.map.graphics.add(graphic);
}
}
if (parcelId.length <= 60) {
// Call SearchByGeocodeArray passing in the array of geocodes.
dojo.xhrGet({
url: cadastral.pathName + "/Search/SearchByGeocodeArray",
content: { geocodes: parcelId },
handleAs: "json",
load: function (rdata) {
cadastral.base.showData(rdata, 'bufferResults');
}
});
}
else {
cadastral.map.graphics.clear();
dojo.style("bufferWait", "display", "none");
alert("Too large of a query. Please use a smaller polygon, especially in heavily populated areas.");
}
});
dojo.connect(queryTask, "onError", function (error) {
dojo.style("bufferWait", "display", "none");
alert("An error occured. Please try again.");
});
break;
default:
break;
}
if (selectType !== "") {
dojo.style(selectType, "display", "block");
}
if (cadastral.tools.prevSelectType !== "" && cadastral.tools.prevSelectType !== null && cadastral.tools.prevSelectType != selectType) {
dojo.style(cadastral.tools.prevSelectType, "display", "none");
}
cadastral.tools.prevSelectType = selectType;
},
prevTool: "",
displayTool: function (tool) {
switch (tool) {
case "identifyButton":
for (var i = 0; i < cadastral.mapOnClickListeners.length; i++) {
dojo.disconnect(cadastral.mapOnClickListeners[i]);
}
cadastral.mapOnClickListeners.push(dojo.connect(cadastral.map, "onClick", cadastral.identify.identifyIt));
break;
case "quickZoomSubContainer":
dojo.byId("QuickZoomSelect").value = "";
dojo.style(tool, "display", "block");
break;
case "bufferSubContainer":
dojo.style(tool, "display", "block");
break;
case "measureButton":
for (var i = 0; i < cadastral.mapOnClickListeners.length; i++) {
dojo.disconnect(cadastral.mapOnClickListeners[i]);
}
dojo.style("distanceDiv", "visibility", "visible");
cadastral.toolbar.activate(esri.toolbars.Draw.POLYLINE);
//on draw end add graphic, project it, and get new length
cadastral.toolbarOnDrawEndListeners.push(dojo.connect(cadastral.toolbar, "onDrawEnd", cadastral.measure.addToMap));
cadastral.map.disablePan();
break;
default:
break;
}
switch (cadastral.tools.prevTool) {
case "quickZoomSubContainer":
if (cadastral.tools.prevTool !== "") {
dojo.style(cadastral.tools.prevTool, "display", "none");
}
if (cadastral.tools.prevQuery !== "") {
dojo.style(cadastral.tools.prevQuery, "display", "none");
}
break;
case "bufferSubContainer":
dojo.style(cadastral.tools.prevTool, "display", "none");
break;
case "measureButton":
dojo.style("distanceDiv", "visibility", "hidden");
// turn off the measure tool
cadastral.toolbar.deactivate();
// clear out line drawn
cadastral.map.graphics.clear();
dojo.byId("distance").innerHTML = "";
cadastral.map.enablePan();
for (var i = 0; i < cadastral.toolbarOnDrawEndListeners.length; i++) {
dojo.disconnect(cadastral.toolbarOnDrawEndListeners[i]);
}
break;
default:
break;
}
if (tool == cadastral.tools.prevTool) {
cadastral.tools.prevTool = "";
}
else {
cadastral.tools.prevTool = tool;
}
},
showError: function (error) {
alert(error);
}
};