public async Task <ArcGISAreaLengthResponse> CalculateAreasAndLengths(string token, string sr,
                                                                              EsriGeometryCalcType calculationType, EsriAreaUnit areaUnit, PolygonGeometry geometry, string lengthUnit = "")
        {
            string queryUrl      = $"{getRestServiceEndpoint()}/areasAndLengths";
            var    areaUnitParam = new ArcGISCalculateAreasAndLengthAreaParam(areaUnit);

            PolygonGeometry[] polygonPayload = { geometry };

            var encodedContent = new ArcGISEncodedContent
            {
                { "f", responseFormat },
                { "token", token },
                { "sr", sr },
                { "lengthUnit", lengthUnit },
                { "calculationType", calculationType.ToString() },
                { "areaUnit", JsonConvert.SerializeObject(areaUnitParam).TrimJsonRequest() },
                { "polygons", JsonConvert.SerializeObject(polygonPayload).TrimJsonRequest() }
            };

            var resp = await ArcGISHttpClient.PostAsync(queryUrl, encodedContent.ToStringUrlEncodedContent());

            var respStr = await resp.Content.ReadAsStringAsync();

            if (resp.StatusCode != HttpStatusCode.OK)
            {
                throw new ArcGISInvalidResponseException($"Unsuccessfull. \n" +
                                                         $"Response Code: {resp.StatusCode}\n" +
                                                         $"Response: {respStr}" +
                                                         $"Query String: {queryUrl}");
            }

            var model = JsonConvert.DeserializeObject <ArcGISCalculateAreasAndLengthsResponse>(respStr);

            if (model.areas.Count > 1 || model.lengths.Count > 1)
            {
                throw new ArcGISUnexpectedResponseException("Returned response count greater than 1 or equal to 0");
            }

            return(new ArcGISAreaLengthResponse(model.areas.FirstOrDefault(), model.lengths.FirstOrDefault()));
        }
示例#2
0
 public ArcGISCalculateAreasAndLengthAreaParam(EsriAreaUnit areaUnit)
 {
     this.areaUnit = areaUnit.ToString();
 }