public static string ParameterToDisplayString(GPParameterType type, GPParameter param)
 {
     if (param == null)
         return string.Empty;
     switch (type)
     {
         case GPParameterType.Date:
             GPDate date = param as GPDate;
             if (date != null && date.Value != null)
                 return date.Value.ToString();
             return null;
         case GPParameterType.LinearUnit:
             GPLinearUnit lu = param as GPLinearUnit;
             if (lu != null)
                 return string.Format("{0} {1}", lu.Distance, lu.Unit.ToString().Replace("esri", ""));
             return null;
         case GPParameterType.Boolean:
         case GPParameterType.Double:
         case GPParameterType.Long:
         case GPParameterType.String:
         case GPParameterType.FeatureLayer:
         case GPParameterType.RecordSet:
         case GPParameterType.DataFile:
             return ParameterToString(type, param, CultureHelper.GetCurrentCulture());
         case GPParameterType.RasterData:
         case GPParameterType.RasterDataLayer:
             GPRasterData ras = param as GPRasterData;
             if (ras != null)
                 return ras.Url;
             return null;
     }
     return string.Empty;
 }
 internal virtual void FromJsonDictionary(IDictionary<string, object> dictionary, string paramName)
 {
     if (dictionary.ContainsKey("displayText"))
         DisplayText = dictionary["displayText"] as string;
     if (dictionary.ContainsKey("value") && dictionary["value"] is string)
         Value = new GPString(paramName, dictionary["value"] as string);
 }
Beispiel #3
0
        /// <summary>
        /// Gets the parameters.
        /// </summary>
        /// <param name="parameters">The parameters.</param>
        /// <returns>
        /// Returns an instance of <see cref="T:System.Collections.Generic.Dictionary`2"/>.
        /// </returns>
        private IDictionary <string, string> GetParameters(List <GPParameter> parameters)
        {
            IDictionary <string, string> inputs = new Dictionary <string, string>();

            try
            {
                this.Parameters
                .Where(x => x.Direction == esriDirection.esriGPParameterDirectionInput)
                .ForEach(p =>
                {
                    GPParameter param = parameters.FirstOrDefault(x => x.Name == p.Name);
                    inputs.Add(p.Name, param != null ? param.ToJson() : "");
                });
                if (this.OutSpatialReference != WKID.NotSpecified)
                {
                    inputs.Add("env:outSR", this.OutSpatialReference.ToString());
                }
                if (this.ProcessSpatialReference != WKID.NotSpecified)
                {
                    inputs.Add("env:processSR", this.ProcessSpatialReference.ToString());
                }
            }
            catch (Exception ex)
            {
                Throw.InvalidOperation("Failed to set input geoprocessing parameters.", x =>
                                       new InvalidOperationException(x.Message, ex));
            }
            return(inputs);
        }
 private void GeoprocessorTask_ExecuteCompleted(object sender, GPExecuteCompleteEventArgs args)
 {
     GPParameter gpParameter = args.Results.OutParameters[0];
     if (gpParameter is GPFeatureRecordSetLayer)
     {
         GPFeatureRecordSetLayer gpLayer = gpParameter as GPFeatureRecordSetLayer;
         ProfileImage.Source = new BitmapImage(new Uri(gpLayer.FeatureSet.Features[0].Attributes["profileURL"].ToString(), UriKind.Absolute));
         ProfileView.Visibility = Visibility.Visible;
     }
 }
 internal virtual void FromJsonDictionary(IDictionary <string, object> dictionary, string paramName)
 {
     if (dictionary.ContainsKey("displayText"))
     {
         DisplayText = dictionary["displayText"] as string;
     }
     if (dictionary.ContainsKey("value") && dictionary["value"] is string)
     {
         Value = new GPString(paramName, dictionary["value"] as string);
     }
 }
Beispiel #6
0
        public static string ParameterToDisplayString(GPParameterType type, GPParameter param)
        {
            if (param == null)
            {
                return(string.Empty);
            }
            switch (type)
            {
            case GPParameterType.Date:
                GPDate date = param as GPDate;
                if (date != null && date.Value != null)
                {
                    return(date.Value.ToString());
                }
                return(null);

            case GPParameterType.LinearUnit:
                GPLinearUnit lu = param as GPLinearUnit;
                if (lu != null)
                {
                    return(string.Format("{0} {1}", lu.Distance, lu.Unit.ToString().Replace("esri", "")));
                }
                return(null);

            case GPParameterType.Boolean:
            case GPParameterType.Double:
            case GPParameterType.Long:
            case GPParameterType.String:
            case GPParameterType.FeatureLayer:
            case GPParameterType.RecordSet:
            case GPParameterType.DataFile:
                return(ParameterToString(type, param, CultureHelper.GetCurrentCulture()));

            case GPParameterType.RasterData:
            case GPParameterType.RasterDataLayer:
                GPRasterData ras = param as GPRasterData;
                if (ras != null)
                {
                    return(ras.Url);
                }
                return(null);
            }
            return(string.Empty);
        }
 public static string ParameterToString(GPParameterType type, GPParameter param, CultureInfo culture)
 {
     if (param == null)
         return string.Empty;
     switch (type)
     {
         case GPParameterType.Boolean:
             GPBoolean boo = param as GPBoolean;
             if (boo != null)
                 return boo.Value.ToString();
             else
                 return string.Empty;
         case GPParameterType.Date:
             GPDate date = param as GPDate;
             if (date != null && date.Value != null)
                 return date.Value.Ticks.ToString();
             else
                 return string.Empty;
         case GPParameterType.Double:
             GPDouble dub = param as GPDouble;
             if (dub != null && !double.IsNaN(dub.Value))
                 return dub.Value.ToString(culture);
             else
                 return string.Empty;
         case GPParameterType.Long:
             GPLong lon = param as GPLong;
             if (lon != null)
                 return lon.Value.ToString();
             else
                 return string.Empty;
         case GPParameterType.String:
             GPString stir = param as GPString;
             if (stir != null && stir.Value != null)
                 return stir.Value;
             else
                 return string.Empty;
         case GPParameterType.FeatureLayer:
             GPFeatureRecordSetLayer feat = param as GPFeatureRecordSetLayer;
             if (feat != null && feat.Url != null)
                 return feat.Url;
             else
                 return string.Empty;
         case GPParameterType.RecordSet:
             GPRecordSet rsl = param as GPRecordSet;
             if (rsl != null && rsl.Url != null)
                 return rsl.Url;
             else
                 return string.Empty;
         case GPParameterType.DataFile:
             GPDataFile dat = param as GPDataFile;
             if (dat != null && dat.Url != null)
                 return dat.Url;
             else
                 return string.Empty;
     }
     return string.Empty;
 }
Beispiel #8
0
        public static string ParameterToString(GPParameterType type, GPParameter param, CultureInfo culture)
        {
            if (param == null)
            {
                return(string.Empty);
            }
            switch (type)
            {
            case GPParameterType.Boolean:
                GPBoolean boo = param as GPBoolean;
                if (boo != null)
                {
                    return(boo.Value.ToString());
                }
                else
                {
                    return(string.Empty);
                }

            case GPParameterType.Date:
                GPDate date = param as GPDate;
                if (date != null && date.Value != null)
                {
                    return(date.Value.Ticks.ToString());
                }
                else
                {
                    return(string.Empty);
                }

            case GPParameterType.Double:
                GPDouble dub = param as GPDouble;
                if (dub != null && !double.IsNaN(dub.Value))
                {
                    return(dub.Value.ToString(culture));
                }
                else
                {
                    return(string.Empty);
                }

            case GPParameterType.Long:
                GPLong lon = param as GPLong;
                if (lon != null)
                {
                    return(lon.Value.ToString());
                }
                else
                {
                    return(string.Empty);
                }

            case GPParameterType.String:
                GPString stir = param as GPString;
                if (stir != null && stir.Value != null)
                {
                    return(stir.Value);
                }
                else
                {
                    return(string.Empty);
                }

            case GPParameterType.FeatureLayer:
                GPFeatureRecordSetLayer feat = param as GPFeatureRecordSetLayer;
                if (feat != null && feat.Url != null)
                {
                    return(feat.Url);
                }
                else
                {
                    return(string.Empty);
                }

            case GPParameterType.RecordSet:
                GPRecordSet rsl = param as GPRecordSet;
                if (rsl != null && rsl.Url != null)
                {
                    return(rsl.Url);
                }
                else
                {
                    return(string.Empty);
                }

            case GPParameterType.DataFile:
                GPDataFile dat = param as GPDataFile;
                if (dat != null && dat.Url != null)
                {
                    return(dat.Url);
                }
                else
                {
                    return(string.Empty);
                }
            }
            return(string.Empty);
        }
        private void BuildUI()
        {
            if (ParamContainer == null || ParameterConfigs == null ||
                ParameterConfigs.Count < 1)
            {
                return;
            }
            if ((Results == null || Results.Count < 1) && (Errors == null || Errors.Count < 1))
            {
                return;
            }
            if (!inputLayerInfoAvailable())
            {
                return;
            }
            ParamContainer.Children.Clear();
            ParamContainer.ColumnDefinitions.Clear();
            ParamContainer.RowDefinitions.Clear();
            ParamContainer.ColumnDefinitions.Add(new ColumnDefinition()
            {
                Width = GridLength.Auto
            });
            ParamContainer.ColumnDefinitions.Add(new ColumnDefinition()); // { Width = new GridLength(0, GridUnitType.Star) });
            HasSimpleResults       = false;
            layerParamNameIDLookup = InputLayers != null ?
                                     new Dictionary <string, string>(InputLayers) : new Dictionary <string, string>();
            int pendingGPResultImageLayers = 0;

            #region Results
            if (Results != null && Results.Count > 0)
            {
                #region GP mapserver result
                MapServiceLayerParameterConfig mapServiceLayerParameterConfig = ParameterConfigs.FirstOrDefault(p => p.Type == GPParameterType.MapServiceLayer) as MapServiceLayerParameterConfig;
                if (mapServiceLayerParameterConfig != null && mapServiceLayerParameterConfig.SupportsJobResource)
                {
                    string t   = "/rest/services/";
                    string url = string.Format("{0}/{1}/MapServer/jobs/{2}", TaskUrl.Substring(0, TaskUrl.IndexOf(t, StringComparison.OrdinalIgnoreCase) + t.Length - 1), mapServiceLayerParameterConfig.Name, JobID);

                    ArcGISDynamicMapServiceLayer layer = new ArcGISDynamicMapServiceLayer
                    {
                        Url      = url,
                        ProxyURL = UseProxy ? ProxyUrl : null
                    };
                    layer.SetValue(ESRI.ArcGIS.Mapping.Core.LayerExtensions.ExcludeSerializationProperty, true);
                    addToMap(mapServiceLayerParameterConfig, layer);
                }
                #endregion

                #region display each result
                foreach (ParameterConfig config in ParameterConfigs)
                {
                    MapServiceLayerParameterConfig cfg;
                    if (config.Type == GPParameterType.MapServiceLayer && (cfg = config as MapServiceLayerParameterConfig) != null && !cfg.SupportsJobResource)
                    {
                        pendingGPResultImageLayers++;
                        Geoprocessor gp = new Geoprocessor(TaskUrl);
                        gp.OutputSpatialReference        = Map.SpatialReference.Clone();
                        gp.GetResultImageLayerCompleted += (s, e) =>
                        {
                            GPResultImageLayer gpImageLayer = e.GPResultImageLayer;
                            setLayerProps(cfg, gpImageLayer);
                            gpImageLayer.ProxyUrl = UseProxy ? ProxyUrl : null;
                            Map.Layers.Add(gpImageLayer);
                            layerParamNameIDLookup.Add(cfg.Name, gpImageLayer.ID);
                            pendingGPResultImageLayers--;
                            if (layerParamNameIDLookup.Count > 1 && pendingGPResultImageLayers == 0)
                            {
                                LayerOrderer.OrderLayers(Map, LayerOrder, layerParamNameIDLookup);
                            }
                        };
                        // Initialize proxy
                        gp.ProxyURL = UseProxy ? ProxyUrl : null;
                        gp.GetResultImageLayerAsync(JobID, cfg.Name);
                        continue;
                    }

                    GPParameter param = getParameter(config.Name);
                    if (param == null)
                    {
                        continue;
                    }
                    string value = ParameterBase.ParameterToDisplayString(config.Type, param);

                    switch (config.Type)
                    {
                    case GPParameterType.Boolean:
                    case GPParameterType.Double:
                    case GPParameterType.Long:
                    case GPParameterType.String:
                    case GPParameterType.Date:
                    case GPParameterType.LinearUnit:
                        if (value == null)
                        {
                            value = string.Empty;
                        }
                        addparamUI(config.Label, value, false);
                        break;

                    case GPParameterType.FeatureLayer:
                        addToMap(param as GPFeatureRecordSetLayer, config);
                        break;

                    case GPParameterType.RecordSet:
                        if (string.IsNullOrEmpty(value) && param is GPRecordSet)
                        {
                            GPRecordSet rs = param as GPRecordSet;
                            if (string.IsNullOrEmpty(rs.Url) && rs.FeatureSet != null)
                            {
                                value = ESRI.ArcGIS.Mapping.GP.Resources.Strings.OnlyUrlOutputIsSupportedForRecordsets;
                            }
                            else
                            {
                                value = string.Empty;
                            }
                            addparamUI(config.Label, value, false);
                        }
                        else
                        {
                            addparamUI(config.Label, value, true);
                        }
                        break;

                    case GPParameterType.DataFile:
                    case GPParameterType.RasterData:
                    case GPParameterType.RasterDataLayer:
                        if (value == null)
                        {
                            value = string.Empty;
                        }
                        addparamUI(config.Label, value, true);
                        break;
                    }
                }
                #endregion

                if (layerParamNameIDLookup.Count > 1 && pendingGPResultImageLayers == 0)
                {
                    LayerOrderer.OrderLayers(Map, LayerOrder, layerParamNameIDLookup);
                }
            }
            #endregion

            #region Errors
            if (Errors != null && Errors.Count > 0)
            {
                foreach (Exception error in Errors)
                {
                    addparamUI(ESRI.ArcGIS.Mapping.GP.Resources.Strings.LabelError + " ", error.Message, false);
                    HasSimpleResults = true;
                }
            }
            #endregion
        }
Beispiel #10
0
        /// <summary>
        /// マップビュータップ時の処理
        /// </summary>
        private async void mainMapView_MapViewTapped(object sender, Esri.ArcGISRuntime.Controls.MapViewInputEventArgs e)
        {
            //解析手順のメッセージを非表示
            analyzeTextBox.Visibility = System.Windows.Visibility.Collapsed;

            //プログレスバーを表示
            analyzeProgressBar.Visibility = System.Windows.Visibility.Visible;

            //マップビュータップ時のイベントハンドラを解除
            mainMapView.MapViewTapped -= mainMapView_MapViewTapped;

            //カーソルを矢印に変更
            mainMapView.Cursor = Cursors.Arrow;

            //クリックした位置からグラフィックを作成
            Graphic clickPoint = new Graphic(e.Location)
            {
                Symbol = layoutRoot.Resources["greenMarkerSymbol"] as SimpleMarkerSymbol,
                ZIndex = 2
            };

            //到達圏解析結果表示用のグラフィックスレイヤにクリック位置のグラフィックを追加
            serviceAreaResultLayer.Graphics.Add(clickPoint);

            try
            {
                //到達圏解析用パラメーターの作成
                GPInputParameter parameter = new GPInputParameter();
                parameter.GPParameters.Add(new GPFeatureRecordSetLayer("facilities", e.Location));  //解析の中心点
                parameter.GPParameters.Add(new GPString("break_values", "10"));                     //到達圏の範囲(10分)
                parameter.GPParameters.Add(new GPString("env:outSR", "102100"));                    //結果の空間参照(Web メルカトル)
                parameter.GPParameters.Add(new GPString("travel_mode", "Walking"));                 //"徒歩"で到達できる範囲を解析

                //到達圏の解析を開始
                GPJobInfo result = await serviceAreaGp.SubmitJobAsync(parameter);

                //到達圏の解析結果が"成功"、"失敗"、"時間切れ"、"キャンセル"のいずれかになるまで
                //2秒ごとに ArcGIS Online にステータスを確認
                while (result.JobStatus != GPJobStatus.Succeeded &&
                       result.JobStatus != GPJobStatus.Failed &&
                       result.JobStatus != GPJobStatus.TimedOut &&
                       result.JobStatus != GPJobStatus.Cancelled)
                {
                    result = await serviceAreaGp.CheckJobStatusAsync(result.JobID);

                    await Task.Delay(2000);
                }


                //到達圏解析の結果が成功した場合は結果を表示
                if (result.JobStatus == GPJobStatus.Succeeded)
                {
                    //到達圏解析の結果を取得
                    GPParameter resultData = await serviceAreaGp.GetResultDataAsync(result.JobID, "Service_Areas");

                    //到達圏解析結果レイヤのグラフィックを結果グラフィックとして取得
                    GPFeatureRecordSetLayer gpLayer = resultData as GPFeatureRecordSetLayer;
                    serviceAreaGraphic = gpLayer.FeatureSet.Features[0] as Graphic;

                    //グラフィックにシンボルを設定
                    serviceAreaGraphic.Symbol = layoutRoot.Resources["greenFillSymbol"] as SimpleFillSymbol;

                    //結果グラフィックが解析の中心点のグラフィックより下に表示されるように表示順序を設定
                    serviceAreaGraphic.ZIndex = 1;

                    //到達圏解析結果表示用のグラフィックスレイヤにグラフィックを追加
                    serviceAreaResultLayer.Graphics.Add(serviceAreaGraphic);
                }
            }
            //エラーが発生した場合の処理
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("到達圏解析:{0}", ex.Message));

                //到達圏解析の結果をクリア
                ClearAnalysisResult();
            }
            finally
            {
                //プログレスバーを非表示
                analyzeProgressBar.Visibility = System.Windows.Visibility.Collapsed;

                //到達圏解析ボタンを表示
                analyzePanel.Visibility = System.Windows.Visibility.Visible;
            }
        }