POST
|
I was trying to pass the selected features in the layer from the selection widget and the gp service widget was configured to interactively draw features. It didn't work because the selection widgets looks at the geometry type of the layer and then shows gp widgets where the input geometry match that type. Since I need points, lines and polygons I didn't specified a geometry type in the gp services and I think that is why it doesn't work. However, I just changed from interactive to select a layer as input option in the gp service widget and now the widget displays all the layers and I can choose any of them and it works! I can also select features using a square icon that appears in the widget when you select a layer or even using the selection widget. At the end I have created two gp service widgets: one with layers as input and another with interactive drawing features as inputs (since I didn't publish the gp service with a geometry type I can create and export points, lines and polygons)
... View more
08-27-2020
05:37 PM
|
1
|
0
|
3635
|
POST
|
Hi, I am looking for a solution to this too. I have created a gp service that converts points, polylines or polygons to kml, but I'm unable to use it to export features from existing layers because the option to add the selected features to the geoprocessing tool doesn't show up.
... View more
08-27-2020
04:17 PM
|
0
|
2
|
3635
|
POST
|
Thank you Randal! We ended up using the combobox to be able to add local data to the list. So, we kept it like that, but it is good to know the answer.
... View more
11-08-2018
10:09 AM
|
0
|
0
|
959
|
POST
|
Hi, I'm trying to define a parameter called Landscape layers in a python toolbox that basically would be a table with two columns. Something like this: @property
def paramLandscapeProducts(self):
if not self._paramLandscapeProducts:
self._paramLandscapeProducts = arcpy.Parameter(
displayName="Landscape layers",
name="landscapeLayers",
datatype="GPValueTable",
parameterType="Required",
enabled=True,
direction="Input"
)
self._paramLandscapeProducts.columns = [['GPString', 'Layer'], ['GPString', 'Buffer distance']]
self._paramLandscapeProducts.values = [['NWI Wetlands 2015', '50 feet'],['NHDPlus V.2 Flowlines', '50 feet'],
["NHDPlus V.2 Waterbodies", '50 feet'], ["Roads","100 feet"],
["Ventyx transmission", "100 feet"],["Ventyx natural gas line","30 ft"]]
return self._paramLandscapeProducts This one is using a Value Table parameter, but the problem is that I don't want the user to be able to add more entries to the table. Thus, I would like to remove or disable the combobox part of the Landscape layers parameter. Ideally, I also would like to have a checkbox in front of each landscape layer entry to be able to include or remove that layer from the analysis. This looks more like the thing I want but I'm not able to add another column with the buffer distances, that have to be editable. @property
def paramElevationProducts(self):
if not self._paramElevationProducts:
self._paramElevationProducts = arcpy.Parameter(
displayName="Elevation Products",
name="outputElevationProducts",
datatype="GPString",
parameterType="Optional",
enabled=True,
direction="Input",
multiValue=True
)
self._paramElevationProducts.filter.type = "ValueList"
self._paramElevationProducts.filter.list = [
"Aspect",
"Aspect_Map",
"Grayscale_Hillshade",
"Multi-Directional_Hillshade",
"Ellipsoidal_Height",
"Slope_Degrees",
"Slope_Degrees_Map",
"Elevation_Tinted_Hillshade"
]
return self._paramElevationProducts Thank you!
... View more
04-03-2018
02:01 PM
|
0
|
3
|
1168
|
POST
|
Thank you Robert, you were right, if I use symbolJsonUtils, I don't need to create the symbol again. I also had a small error assigning the symbology to the correct index in the options[] array.
... View more
04-13-2015
11:02 AM
|
0
|
0
|
1187
|
POST
|
Sorry, the context of the application is that I have a map with an ArcGISDynamicMapServiceLayer that has two dynamic workspaces defined. The application has two buttons, when I click the proj1 button, it reads three shp files and adds them to the service using the dynamicLayerInfos array. The shp files need a symbology, so I use the jsonSymbologies object to store a few symbologies in Json format. Here is the whole script (btw, I'm new to programming, so don't get too scared of the code) var map, usaLayer;
require([
"esri/map", "esri/layers/ArcGISDynamicMapServiceLayer",
"esri/layers/DynamicLayerInfo", "esri/layers/LayerDataSource",
"esri/layers/LayerDrawingOptions", "esri/layers/TableDataSource",
"esri/Color", "esri/renderers/SimpleRenderer", "esri/symbols/jsonUtils",
"esri/symbols/SimpleFillSymbol", "esri/symbols/SimpleMarkerSymbol", "esri/symbols/SimpleLineSymbol",
"dojo/dom", "dojo/dom-construct", "dojo/dom-style",
"dojo/_base/lang", "dojo/query", "dojo/on",
"dojo/parser", "dojo/json", "dojo/_base/array", "dojo/dnd/Source", "dijit/registry", "dojo/ready",
"dijit/form/Button", "dojo/domReady!"
], function (
Map, ArcGISDynamicMapServiceLayer,
DynamicLayerInfo, LayerDataSource,
LayerDrawingOptions, TableDataSource,
Color, SimpleRenderer, symbolJsonUtils,
SimpleFillSymbol, SimpleMarkerSymbol, SimpleLineSymbol,
dom, domConstruct, domStyle,
lang, query, on,
parser, JSON, arrayUtils, Source, registry, ready
) {
//function init() {
parser.parse();
var dynamicLayerInfos;
map = new Map("map", {
center: [-93.636, 46.882],
zoom: 6,
slider: false
});
var initBasemap = new esri.layers.ArcGISTiledMapServiceLayer("http://server.arcgisonline.com/ArcGIS/rest/services/World_Topo_Map/MapServer");
map.addLayer(initBasemap);
usaLayer = new ArcGISDynamicMapServiceLayer("https://arcgis.edf-re.com/rag/rest/services/Other/dynamicworkspaceservice/MapServer", {
"id": "abc",
"opacity": 1
});
//here you create the DynamicLayerInfos that you need to add the new layers to the service
usaLayer.on("load", function (e) {
dynamicLayerInfos = e.target.createDynamicLayerInfosFromLayerInfos();
dynamicLayerInfos = []; // this eliminates all the existing layers in the map service
});
registry.byId("proj1").on("click", addProject);
registry.byId("proj2").on("click", addProject);
// add the layer to the existing map service
map.addLayer(usaLayer);
function addProject() {
console.log("start");
// get the workspaceID based on the selected project
var projID = this.onClick.target.id;
var workspaceID = projID;
// read the folder contents based on the selected workspaceID
var layerList = [];
if (workspaceID === "proj1") {
layerList = ["substation_v12_point", "transmission_v12_polyline", "regions_v12_polygon"];
} else{
layerList = ["subs_v1_pnt", "trans_v1_polyline", "buildable_v1_polygon"];
}
var options = []; // for the renderers
arrayUtils.forEach(layerList, function (tmpLayer, i) {
var dynamicLayerInfo = new DynamicLayerInfo();
dynamicLayerInfo.id = dynamicLayerInfos.length;
dynamicLayerInfo.name = tmpLayer;
var dataSource = new TableDataSource();
dataSource.workspaceId = workspaceID; // not exposed via REST :(
dataSource.dataSourceName = tmpLayer;
var layerSource = new LayerDataSource();
layerSource.dataSource = dataSource;
dynamicLayerInfo.source = layerSource;
dynamicLayerInfos.push(dynamicLayerInfo);
// get the right renderer here
var renderer = getSimpleRenderer(tmpLayer);
if (renderer !== false) {
console.log("ok renderer");
var drawingOptions = new LayerDrawingOptions();
drawingOptions.renderer = renderer;
options[i+1] = drawingOptions;
}
});
// set the dynimicaLayerInfo for all layers and update the map
usaLayer.setDynamicLayerInfos(dynamicLayerInfos, true);
usaLayer.setLayerDrawingOptions(options);
console.log("end");
}
function getSimpleRenderer(tmpLayer) {
var jsonSymbologies = {};
jsonSymbologies.subs_point = '{"color":[250,0,250,255],"size":12,"angle":-30,"xoffset":0,"yoffset":0,"type":"esriSMS","style":"esriSMSCircle","outline":{"color":[255,0,0,255],"width":1,"type":"esriSLS","style":"esriSLSSolid"}}';
jsonSymbologies.trans_polyline = '{"color": [0,255,0,255], "width": 1, "type": "esriSLS", "style": "esriSLSLongDashDot"}';
jsonSymbologies.region_polygon = '{"color": [255,0,0,255], "type": "esriSFS","style": "esriSFSSolid", "outline": {"color": [230,230,230,255], "width": 0.5, "type": "esriSLS", "style": "esriSLSDashDot"}}';
jsonSymbologies.buildable_polygon = '{"color": [255,255,0,255], "type": "esriSFS","style": "esriSFSSolid", "outline": {"color": [230,230,230,255], "width": 0.5, "type": "esriSLS", "style": "esriSLSDashDot"}}';
var layerSemanticTypes = ["subs", "trans", "region", "buildable"];
var nameParts = tmpLayer.split("_");
// reduce the synonyms in the semantic types
var nameSemantic = nameParts[0].toLowerCase();
arrayUtils.some(layerSemanticTypes, function (dictSemanticType) {
if (nameSemantic.indexOf(dictSemanticType) > -1) {
nameSemantic = dictSemanticType;
return false;
}
});
// reduce the synonyms in the geometry types
var nameGeom = tmpLayer.split("_")[nameParts.length - 1].toLowerCase();
if (nameGeom === "pnt") {
nameGeom = "point";
} else if (nameGeom === "line") {
nameGeom = "polyline";
}
// get the appropiate renderer
var symbol;
var baseSymbol;
var tmpJson;
if (nameGeom === "point") {
tmpJson = JSON.parse(jsonSymbologies[nameSemantic + "_point"]);
baseSymbol = symbolJsonUtils.fromJson(tmpJson);
symbol = new SimpleMarkerSymbol(baseSymbol)
} else if (nameGeom === "polyline") {
tmpJson = JSON.parse(jsonSymbologies[nameSemantic + "_polyline"]);
baseSymbol = symbolJsonUtils.fromJson(tmpJson)
symbol = new SimpleLineSymbol(baseSymbol)
} else if (nameGeom === "polygon") {
tmpJson = JSON.parse(jsonSymbologies[nameSemantic + "_polygon"]);
baseSymbol = symbolJsonUtils.fromJson(tmpJson)
symbol = new SimpleFillSymbol()
}else{
console.log(nameGeom + " is an undefined geometry type!");
return false;
}
return new SimpleRenderer(symbol);
}
// }
// ready(init);
});
... View more
04-10-2015
04:51 PM
|
0
|
2
|
1187
|
POST
|
I am trying to apply some symbology form a Json like string. I have a point, polyline and polygon datasets and only the polyline and polygon layers are getting symbolized, although not like defined in the Json. So, my guess is that I am doing something really wrong. Here is the code, in case someone can point me in the right direction. Thanks! function getSimpleRenderer(tmpLayer) {
var jsonSymbologies = {};
jsonSymbologies.subs_point = '{"color":[250,0,250,255],"size":12,"angle":-30,"xoffset":0,"yoffset":0,"type":"esriSMS","style":"esriSMSCircle","outline":{"color":[255,0,0,255],"width":1,"type":"esriSLS","style":"esriSLSSolid"}}';
jsonSymbologies.trans_polyline = '{"color": [0,255,0,255], "width": 1, "type": "esriSLS", "style": "esriSLSLongDashDot"}';
jsonSymbologies.region_polygon = '{"color": [255,0,0,255], "type": "esriSFS","style": "esriSFSSolid", "outline": {"color": [230,230,230,255], "width": 0.5, "type": "esriSLS", "style": "esriSLSDashDot"}}';
jsonSymbologies.buildable_polygon = '{"color": [255,255,0,255], "type": "esriSFS","style": "esriSFSSolid", "outline": {"color": [230,230,230,255], "width": 0.5, "type": "esriSLS", "style": "esriSLSDashDot"}}';
var layerSemanticTypes = ["subs", "trans", "region", "buildable"];
var nameParts = tmpLayer.split("_");
// reduce the synonyms in the semantic types
var nameSemantic = nameParts[0].toLowerCase();
arrayUtils.some(layerSemanticTypes, function (dictSemanticType) {
if (nameSemantic.indexOf(dictSemanticType) > -1) {
nameSemantic = dictSemanticType;
return false;
}
});
// reduce the synonyms in the geometry types
var nameGeom = tmpLayer.split("_")[nameParts.length - 1].toLowerCase();
if (nameGeom === "pnt") {
nameGeom = "point";
} else if (nameGeom === "line") {
nameGeom = "polyline";
}
// get the appropiate renderer
var symbol;
var baseSymbol;
var tmpJson;
if (nameGeom === "point") {
tmpJson = JSON.parse(jsonSymbologies[nameSemantic + "_point"]);
baseSymbol = symbolJsonUtils.fromJson(tmpJson);
symbol = new SimpleMarkerSymbol(baseSymbol)
} else if (nameGeom === "polyline") {
tmpJson = JSON.parse(jsonSymbologies[nameSemantic + "_polyline"]);
baseSymbol = symbolJsonUtils.fromJson(tmpJson)
symbol = new SimpleLineSymbol(baseSymbol)
} else if (nameGeom === "polygon") {
tmpJson = JSON.parse(jsonSymbologies[nameSemantic + "_polygon"]);
baseSymbol = symbolJsonUtils.fromJson(tmpJson)
symbol = new SimpleFillSymbol()
}else{
console.log(nameGeom + " is an undefined geometry type!");
return false;
}
return new SimpleRenderer(symbol);
}
... View more
04-10-2015
02:08 PM
|
0
|
4
|
5385
|
POST
|
Hi, I need to cluster a point layer but the resulting cluster can't have points with different values for a given attribute. For instance, if I am clustering cities in Europe, the clusters in one country can't contain cities from a different country. I was looking around and I found this: http://thunderheadxpler.blogspot.com/2010/08/weighted-clustering-with-attributes.html That it is exactly what I need but in Flex, and I haven't found anything similar in Silverlight. Has someone done something similar? Are the Flex and Silverlight API similar enough to try implement the Flex solution in Silverlight? Thanks a lot,
... View more
06-17-2013
09:11 AM
|
0
|
0
|
536
|
POST
|
You can force a linear regression to pass through the origin of coordinates. The best way I have found so far it is to convert the raster to a numpy array, move the coordinate system so my origin of coordinates is the point I want to pass through, create a least square model using numpy.linalg.lstsq where Z = aX + bY + c and c = 0, and then use the model to create the raster. I'll let you know if it works.
... View more
08-15-2012
12:55 PM
|
0
|
0
|
559
|
POST
|
Hi - I need to interpolate a linear trend surface through a really big number of points but with the condition that the surface has to pass exactly through one of them, like the origin point. I couldn't find any option for that in the trend tool so I though about creating a lot of points really close to the origin point to force the trend but since I already have so many points I get an out of memory error. Does someone know if there is another way of doing this? I am using python to perform this analysis so I though about converting the points to a numpy array but so far I haven't found anything in numpy to calculate the trend. Thanks a lot for your help! Jose Luis Serrano GIS Programmer/Analyst
... View more
08-14-2012
10:44 AM
|
0
|
3
|
1029
|
POST
|
Hi - I need to interpolate a linear trend surface through a really big number of points but with the condition that the surface has to pass exactly through one of them, like the origin point. I couldn't find any option for that in the trend tool so I though about creating a lot of points really close to the origin point to force the trend but since I already have so many points I get an out of memory error. Does someone know if there is another way of doing this? I am using python to perform this analysis so I though about converting the points to a numpy array but so far I haven't found anything in numpy to calculate the trend. Thanks a lot for your help! Jose Luis Serrano GIS Programmer/Analyst
... View more
08-14-2012
10:43 AM
|
0
|
0
|
653
|
POST
|
Thanks Nathan, last time I did that I think I had to edit the windows registry, but this is much easier!
... View more
07-02-2012
09:07 AM
|
0
|
0
|
223
|
POST
|
Hi, I have installed PythonWin after installing ArcMap 10.1 but when I click Edit... in the contextual menu of a script tool notepad is open. I was wondering if it is possible modify the Edit... option to open PythonWin instead. Thanks,
... View more
07-02-2012
08:50 AM
|
0
|
2
|
427
|
POST
|
Hi, after some workarounds we found out that you need to include some code to check the license first. Just in case someone also needs it, this is the code that you have to add at the beginning: Dim pAoInit As IAoInitialize Set pAoInit = New AoInitialize pAoInit.Initialize esriLicenseProductCodeArcView Cheers, casti
... View more
11-23-2011
01:18 PM
|
0
|
0
|
877
|
POST
|
Hi, I have an access 2007 database with a form that adds tower information to several tables in that database. Since one of the attributes we add is the coordinates, we want to keep a feature layers for these towers in a separete file geodatabase and update it using the same form in the first access 2007 database. Unfortunately, I get a run-time error / automation error when I try to open the file geodatabase from the access 2007 form. I have also tried with a personal geodatabase, but I got the same error. Curiously, if I run the code from within ArcMap, it works like a charm. I don't know if there is any restrictions on accessing the geoDatabase from outside an ArcMap Document or I am missing something else . Thank you very much, casti ' these are the libraries I have referenced ' ESRI GeoDatabase Object Library ' ESRI DataSourcesGDB OBJECT Library ' ESRI Geometry Object Library Public Sub createFeatureFromXYCoordinates() ' Subtask 1. Access the States feature class. Dim pWSF As IWorkspaceFactory Dim pFWS As IFeatureWorkspace Dim pFC As IFeatureClass Set pWSF = New FileGDBWorkspaceFactory Set pFWS = pWSF.OpenFromFile("C:\feature_lyr_from_table_view_filegdb.gdb", 0) ' i got the error here Set pFC = pFWS.OpenFeatureClass("GIS_Info_Spatial") MsgBox "There are " & pFC.FeatureCount(Nothing) & " mets" ' Get coordinate system. Dim geoDataset As IGeoDataset Set geoDataset = pFC Dim gcs As IGeographicCoordinateSystem Set gcs = geoDataset.SpatialReference ' Create a new point using the gcs. Dim pPoint As IPoint Set pPoint = New Point Set pPoint.SpatialReference = gcs pPoint.PutCoords -121.35, 50.01 ' Create a new feature. Dim feature As IFeature Set feature = pFC.CreateFeature Set feature.Shape = pPoint feature.Store MsgBox "Now there are " & pFC.FeatureCount(Nothing) & " mets" End Sub
... View more
11-21-2011
02:06 PM
|
0
|
1
|
3763
|
Title | Kudos | Posted |
---|---|---|
1 | 08-27-2020 05:37 PM |
Online Status |
Offline
|
Date Last Visited |
06-23-2023
09:21 PM
|