Select to view content in your preferred language

Test a Shapefiles Geometry

1719
2
Jump to solution
12-15-2014 11:27 AM
jaykapalczynski
Honored Contributor

I have an app that is allowing the user to add a shapefile to the map.  I need to test for its geometry before or after adding.

var allShapeFileLayers = [];

                function addShapefileToMap (featureCollection) {

                                var fullExtent;

                                var layers = [];

                                   arrayUtils.forEach(allShapeFileLayers, function(layer) {

                                                 app.map.removeLayer(layer);

                                   });

                                arrayUtils.forEach(featureCollection.layers, function (layer) {

                                                var infoTemplateSF = new InfoTemplate("Details", "${*}");

                                                var featureLayerSF = new FeatureLayer(layer, {

                                                                infoTemplate: infoTemplateSF

                                                });

                                                 featureLayerSF.on('click', function (event) {

                                                app.map.infoWindow.setFeatures([event.graphic]);

                                  });

                                  changeRenderer(featureLayerSF);

                                  fullExtent = fullExtent ?

                                                fullExtent.union(featureLayerSF.fullExtent) : featureLayerSF.fullExtent;

                                  layers.push(featureLayerSF);

                                });

                                allShapeFileLayers = layers;

                                app.map.addLayers(allShapeFileLayers);

                                app.map.setExtent(fullExtent.expand(1.25), true);

                                dom.byId('upload-status').innerHTML = "";

                               dojo.byId("RunQueryShapefile").style.display = "block";

           // TEST FOR POLYGON ONLY

          if ( allShapeFileLayers.geometry.type === "point" || allShapeFileLayers.geometry.type === "multipoint") {

              alert("Point or multiPoint");

          } else if ( allShapeFileLayers.geometry.type === "line" || allShapeFileLayers.geometry.type === "polyline") {

              alert("Poline or polyline");

          }

          else {

              alert("Polygon");

          }

}

0 Kudos
1 Solution

Accepted Solutions
jaykapalczynski
Honored Contributor

GOT IT WITH THIS....just moved the If Else inside the arrayUtils.ForEAch to test....

                function addShapefileToMap (featureCollection) {

                                var fullExtent;

                                var layers = [];

                                arrayUtils.forEach(allShapeFileLayers, function(layer) {

                                    app.map.removeLayer(layer);

                    });

                                arrayUtils.forEach(featureCollection.layers, function (layer) {

                                                var infoTemplateSF = new InfoTemplate("Details", "${*}");

                                                var featureLayerSF = new FeatureLayer(layer, {

                                                                infoTemplate: infoTemplateSF

                                    });

                                  featureLayerSF.on('click', function (event) {

                                                 app.map.infoWindow.setFeatures([event.graphic]);

                                  });

                                  changeRenderer(featureLayerSF);

                                  fullExtent = fullExtent ?

                                                fullExtent.union(featureLayerSF.fullExtent) : featureLayerSF.fullExtent;

                                  layers.push(featureLayerSF);

                                var GeometryTypeShapefile = featureLayerSF.geometryType;

                                //alert(GeometryTypeShapefile);

                                // TEST FOR POLYGON ONLY

                                if (featureLayerSF.geometryType === "esriGeometryPoint" || featureLayerSF.geometryType === "esriGeometryMultipoint") {

                                                alert("Point or multiPoint");

                                  } else if (featureLayerSF.geometryType === "esriGeometryLine" || featureLayerSF.geometryType === "esriGeometryPolyline") {

                                                alert("line or polyline");

                                 } else if (featureLayerSF.geometryType === "esriGeometryPolygon") {

                                                 alert("Polygon");

                                } else {

                                                 alert("No Geometry");

                                }

                                });

                                allShapeFileLayers = layers;

                                app.map.addLayers(allShapeFileLayers);

                                app.map.setExtent(fullExtent.expand(1.25), true);

                                dom.byId('upload-status').innerHTML = "";

dojo.byId("RunQueryShapefile").style.display = "block";

                }

View solution in original post

0 Kudos
2 Replies
jaykapalczynski
Honored Contributor

Wondering if I should bring the shapefile in and then write its features to a GraphicLayer?

Write them to a FeatureLayer?

Then test for Geometry?  Thoughts?

0 Kudos
jaykapalczynski
Honored Contributor

GOT IT WITH THIS....just moved the If Else inside the arrayUtils.ForEAch to test....

                function addShapefileToMap (featureCollection) {

                                var fullExtent;

                                var layers = [];

                                arrayUtils.forEach(allShapeFileLayers, function(layer) {

                                    app.map.removeLayer(layer);

                    });

                                arrayUtils.forEach(featureCollection.layers, function (layer) {

                                                var infoTemplateSF = new InfoTemplate("Details", "${*}");

                                                var featureLayerSF = new FeatureLayer(layer, {

                                                                infoTemplate: infoTemplateSF

                                    });

                                  featureLayerSF.on('click', function (event) {

                                                 app.map.infoWindow.setFeatures([event.graphic]);

                                  });

                                  changeRenderer(featureLayerSF);

                                  fullExtent = fullExtent ?

                                                fullExtent.union(featureLayerSF.fullExtent) : featureLayerSF.fullExtent;

                                  layers.push(featureLayerSF);

                                var GeometryTypeShapefile = featureLayerSF.geometryType;

                                //alert(GeometryTypeShapefile);

                                // TEST FOR POLYGON ONLY

                                if (featureLayerSF.geometryType === "esriGeometryPoint" || featureLayerSF.geometryType === "esriGeometryMultipoint") {

                                                alert("Point or multiPoint");

                                  } else if (featureLayerSF.geometryType === "esriGeometryLine" || featureLayerSF.geometryType === "esriGeometryPolyline") {

                                                alert("line or polyline");

                                 } else if (featureLayerSF.geometryType === "esriGeometryPolygon") {

                                                 alert("Polygon");

                                } else {

                                                 alert("No Geometry");

                                }

                                });

                                allShapeFileLayers = layers;

                                app.map.addLayers(allShapeFileLayers);

                                app.map.setExtent(fullExtent.expand(1.25), true);

                                dom.byId('upload-status').innerHTML = "";

dojo.byId("RunQueryShapefile").style.display = "block";

                }

0 Kudos