arcserver.rb 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +10 -0
  3. data/.travis.yml +12 -0
  4. data/Gemfile +7 -0
  5. data/Gemfile.lock +274 -0
  6. data/LICENSE +20 -20
  7. data/README.md +160 -0
  8. data/Rakefile +9 -62
  9. data/arcserver.rb.gemspec +35 -0
  10. data/lib/arcserver.rb +33 -7
  11. data/lib/arcserver/Identifiable.rb +10 -0
  12. data/lib/arcserver/Queryable.rb +10 -0
  13. data/lib/arcserver/feature_server.rb +19 -0
  14. data/lib/arcserver/geometry/geometry.rb +91 -0
  15. data/lib/arcserver/geometry_service.rb +18 -0
  16. data/lib/arcserver/gp_server.rb +20 -0
  17. data/lib/arcserver/graphics/feature.rb +23 -0
  18. data/lib/arcserver/graphics/feature_set.rb +26 -0
  19. data/lib/arcserver/map_server.rb +34 -40
  20. data/lib/arcserver/rest/feature_server.rb +30 -0
  21. data/lib/arcserver/rest/geometry_service.rb +54 -0
  22. data/lib/arcserver/rest/gp_server.rb +80 -0
  23. data/lib/arcserver/rest/identify.rb +66 -0
  24. data/lib/arcserver/rest/map_server.rb +230 -230
  25. data/lib/arcserver/rest/query.rb +68 -0
  26. data/lib/arcserver/url_helper.rb +31 -25
  27. data/lib/arcserver/util/legend_image.rb +0 -0
  28. data/lib/arcserver/version.rb +6 -6
  29. data/spec/custom_spec.rb +50 -0
  30. data/spec/factories/feature.rb +21 -0
  31. data/spec/feature_server_spec.rb +52 -0
  32. data/spec/feature_spec.rb +20 -0
  33. data/spec/geometry_service_spec.rb +31 -0
  34. data/spec/geometry_spec.rb +80 -0
  35. data/spec/gp_server_spec.rb +57 -0
  36. data/spec/identify_spec.rb +21 -0
  37. data/spec/query_spec.rb +38 -0
  38. data/spec/shared_context.rb +17 -0
  39. data/spec/spec_helper.rb +15 -0
  40. metadata +217 -158
  41. data/README.rdoc +0 -57
  42. data/lib/arcserver/soap/map_server.rb +0 -263
  43. data/test/functional/soap/map_server_test.rb +0 -193
  44. data/test/test_helper.rb +0 -25
  45. data/test/unit/map_server_test.rb +0 -61
  46. data/test/unit/url_helper_test.rb +0 -54
  47. data/test/unit/util/legend_image_test.rb +0 -69
@@ -0,0 +1,30 @@
1
+ module ArcServer
2
+ module REST
3
+ class FeatureServer
4
+
5
+ include HTTParty
6
+ format :json
7
+ # debug_output $stdout
8
+
9
+ # The REST url of a feature service
10
+ attr_reader :url
11
+
12
+ # @param [String] url the REST url of a map service
13
+ # @example
14
+ # ArcServer::MapServer.new("http://sampleserver3.arcgisonline.com/ArcGIS/rest/services/BloomfieldHillsMichigan/LandusePlanning/FeatureServer")
15
+ def initialize(url)
16
+ @url = url
17
+ end
18
+
19
+ def applyEdits(layer, adds=[], updates=[], deletes=[])
20
+ options = { body: { f: 'json', rollbackOnFailure: 'true' } }
21
+ options[:body].merge!( { adds: adds.to_json(only: [ :geometry, :attributes ]) } ) if adds.any?
22
+ options[:body].merge!( { updates: updates.to_json(only: [ :geometry, :attributes ] ) } ) if updates.any?
23
+ options[:body].merge!( { deletes: deletes } ) unless deletes.empty?
24
+ results = self.class.post("#{@url}/#{layer}/applyEdits", options)
25
+ results.with_indifferent_access
26
+ end
27
+
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ module ArcServer
4
+ module REST
5
+ class GeometryService
6
+
7
+ include HTTParty
8
+ format :json
9
+ # debug_output $stdout
10
+
11
+ # The REST url of a feature service
12
+ attr_reader :url
13
+
14
+ # @param [String] url the REST url of a map service
15
+ def initialize(url)
16
+ @url = url
17
+ end
18
+
19
+ def to_params(hash)
20
+ if hash[:geometries]
21
+ hash[:geometries] = hash[:geometries].to_json
22
+ end
23
+ hash
24
+ end
25
+
26
+ def project(attrs={})
27
+ params = {
28
+ f: 'json',
29
+ geometries: '',
30
+ inSR: '',
31
+ outSR: ''
32
+ }.merge(attrs)
33
+ response = self.class.get("#{url}/project", query: to_params(params))
34
+ response["geometries"].map { |g| ArcServer::Geometry::Geometry.create(g) }
35
+ end
36
+
37
+ def buffer(attrs={})
38
+ params = {
39
+ f: 'json',
40
+ geometries: '',
41
+ inSR: '',
42
+ outSR: '',
43
+ bufferSR: '',
44
+ distances: '',
45
+ unit: '',
46
+ unionResults: 'false'
47
+ }.merge(attrs)
48
+ response = self.class.get("#{url}/buffer", query: to_params(params))
49
+ response["geometries"].map { |g| ArcServer::Geometry::Geometry.create(g) }
50
+ end
51
+
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,80 @@
1
+ # encoding: utf-8
2
+
3
+ module ArcServer
4
+ module REST
5
+ class GPServer
6
+
7
+ include HTTParty
8
+ format :json
9
+ # debug_output $stdout
10
+
11
+ # The REST url of a map service
12
+ attr_reader :url
13
+
14
+ # @param [String] url the REST url of a map service
15
+ # @example
16
+ # ArcServer::GPServer.new("http://sampleserver2.arcgisonline.com/ArcGIS/rest/services/PublicSafety/EMModels/GPServer/ERGByChemical")
17
+ def initialize(url)
18
+ @url = url
19
+ end
20
+
21
+ def execute(params)
22
+ defaults = { f: 'json' }.merge(params)
23
+ self.class.get("#{url}/execute", query: defaults)['results']
24
+ end
25
+
26
+ def checkJobStatus
27
+ @status
28
+ end
29
+
30
+ def build_params(results, esri_job_id)
31
+
32
+ all_params = {}
33
+ results['results'].each do |r|
34
+ result_param = self.class.get("#{url}/jobs/#{esri_job_id}/#{r[1]['paramUrl']}", query: { f: 'json' }).with_indifferent_access
35
+ case result_param['dataType']
36
+ when 'GPFeatureRecordSetLayer'
37
+ all_params[result_param['paramName']] = Graphics::FeatureSet.new(result_param['value'])
38
+ else
39
+ all_params[result_param['paramName']] = result_param['value']
40
+ end
41
+ end
42
+ all_params.with_indifferent_access
43
+ end
44
+
45
+ def submitJob(params)
46
+
47
+ defaults = { f: 'json' }.merge(params)
48
+ esri_job_id = self.class.get("#{url}/submitJob", query: defaults)['jobId']
49
+
50
+ s = Rufus::Scheduler.new
51
+ s.every '2s' do |job|
52
+
53
+ results = self.class.get("#{url}/jobs/#{esri_job_id}", query: { f: 'json' })
54
+ @status = results['jobStatus']
55
+
56
+ case @status
57
+ when 'esriJobSucceeded'
58
+ yield build_params(results, esri_job_id)
59
+ s.shutdown
60
+ when 'esriJobWaiting'
61
+ nil
62
+ when 'esriJobSubmitted'
63
+ nil
64
+ when 'esriJobExecuting'
65
+ nil
66
+ when 'esriJobCancelled'
67
+ nil
68
+ when 'esriJobFailed'
69
+ nil
70
+ when 'esriJobCancelling'
71
+ nil
72
+ end
73
+ end
74
+ s.join
75
+
76
+ end
77
+
78
+ end
79
+ end
80
+ end
@@ -0,0 +1,66 @@
1
+ # encoding: utf-8
2
+
3
+ module ArcServer
4
+ module REST
5
+ class Identify
6
+
7
+ include HTTParty
8
+ format :json
9
+ # debug_output $stdout
10
+
11
+ def initialize(attr={})
12
+ defaults = {
13
+ f: "json",
14
+ geometry: "",
15
+ geometryType: "esriGeometryEnvelope",
16
+ sr: "",
17
+ layerDefs: "",
18
+ time: "",
19
+ layerTimeOptions: "",
20
+ layers: "all",
21
+ tolerance: "2",
22
+ mapExtent: "",
23
+ imageDisplay: "",
24
+ returnGeometry: true,
25
+ maxAllowableOffset: ""
26
+ }.merge(attr)
27
+ defaults.each { |k,v| instance_variable_set("@#{k}",v) }
28
+ end
29
+
30
+ def params
31
+ hash = Hash[instance_variables.map { |name| [name.to_s[1..-1].to_sym, instance_variable_get(name)] } ]
32
+ if hash[:geometry]
33
+ hash[:geometryType] = hash[:geometry].geometryType
34
+ hash[:geometry] = hash[:geometry].to_json
35
+ end
36
+ hash[:mapExtent] = hash[:mapExtent].join(',') if hash[:mapExtent]
37
+ hash
38
+ end
39
+
40
+ def execute(url)
41
+ response = self.class.get("#{url}/identify", query: params)
42
+ response.with_indifferent_access[:results].map { |r| IdentifyResult.new(r) }
43
+ end
44
+
45
+ end
46
+
47
+ class IdentifyResult
48
+
49
+ attr_accessor :layerId, :layerName, :value, :displayFieldName, :feature
50
+
51
+ def initialize(attrs={})
52
+ @layerId = attrs[:layerId]
53
+ @layerName = attrs[:layerName]
54
+ @value = attrs[:value]
55
+ @displayFieldName = attrs[:displayFieldName]
56
+ if attrs[:geometry]
57
+ @geometryType = attrs[:geometryType]
58
+ @geometry = ArcServer::Geometry::Geometry.build(attrs[:geometry], @geometryType)
59
+ end
60
+ @feature = Graphics::Feature.new({ geometry: @geometry, attributes: attrs[:attributes] })
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
@@ -1,230 +1,230 @@
1
- # encoding: utf-8
2
-
3
- module ArcServer
4
- module REST
5
- # Map services offer access to map and layer content. Map services can either
6
- # be cached or dynamic. A map service that fulfills requests with pre-created
7
- # tiles from a cache instead of dynamically rendering part of the map is called
8
- # a cached map service. A dynamic map service requires the server to render
9
- # the map each time a request comes in. Map services using a tile cache can
10
- # significantly improve performance while delivering maps, while dynamic map
11
- # services offer more flexibility. Map services should always be published as
12
- # pooled services.
13
- #
14
- # The REST API map service resource represents a map service. This resource
15
- # works only with the default data frame of your published map document. This
16
- # resource provides basic information about the map, including the layers that
17
- # it contains, whether the map is cached or not, its spatial reference, initial
18
- # and full extents, map units, and copyright text. It also provides some metadata
19
- # associated with the service such as its service description, its author, and
20
- # keywords. If the map is cached, then additional information about its tiling
21
- # scheme such as the origin of the cached tiles, the levels of detail, and tile
22
- # size is included. Note that multi-layer caches are only accessible in REST
23
- # via export, and these requests are treated as a dynamic map service. Tile
24
- # access is not supported in REST for multi-layer caches.
25
- #
26
- # The map service resource supports several operations:
27
- #
28
- # * Export map - Used to export a map image from a dynamic map service. The
29
- # resulting map can be used for display and be in a different projection from
30
- # the original data source. When generating a map image, map services are
31
- # not able to change feature rendering for an existing layer, add a dynamic
32
- # layer, or change the layer draw order.
33
- #
34
- # * Identify - Returns information about features in one or more layers based
35
- # on where a user clicks on the map.
36
- #
37
- # * Find - Returns information about features in one or more fields in one or
38
- # more layers based on a key word.
39
- #
40
- # * Generate KML - Generates a KML document wrapped in a kmz file. The document
41
- # contains a network link to the KML service endpoint with specified properties
42
- # and parameters. This operation is valid on services that have not been restricted
43
- # by using a token service.
44
- #
45
- # * Query on a Layer - Returns a subset of features in a layer based on query
46
- # criteria.
47
- #
48
- # * Map services do not expose editing capabilities. They provide read-only
49
- # access to feature and attribute content.
50
- class MapServer
51
- # The REST url of a map service
52
- attr_reader :url
53
-
54
- # @param [String] url the REST url of a map service
55
- # @example
56
- # ArcServer::MapServer.new("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer")
57
- def initialize(url)
58
- @url = url
59
- end
60
-
61
- # The export operation is performed on a map service resource. The result
62
- # of this operation is a map image resource. This resource provides information
63
- # about the exported map image such as its URL, its width and height, extent
64
- # and scale.
65
- #
66
- # Apart from the usual response formats of html and json, users can also
67
- # request a format called image while performing this operation. When users
68
- # perform an export with the format of image, the server responds by directly
69
- # streaming the image bytes to the client. One must note that with this
70
- # approach you don't get any information associated with the exported map
71
- # other than the actual image.
72
- #
73
- # Note that the extent displayed in the exported map image may not exactly
74
- # match the extent sent in the bbox parameter when the aspect ratio of the
75
- # image size does not match the aspect ratio of the bbox. The aspect ratio
76
- # is the height divided by the width. In these cases the extent is re-sized
77
- # to prevent map images from appearing stretched. The exported map’s extent
78
- # is sent along with the json and html responses and may be used in client
79
- # side calculations. So it is important that the client-side code update its
80
- # extent based on the response.
81
- #
82
- # @param [Hash] params the query parameters to pass to the export operation
83
- #
84
- # @option params [String, Symbol] :f (:image) The response format. The default response
85
- # format is html. If the format is image, the image bytes are directly streamed
86
- # to the client.
87
- #
88
- # # Values: html | json | image | kmz | pjson (pretty json)
89
- # # Examples:
90
- # :f => :json
91
- # :f => 'kmz'
92
- #
93
- # @option params [required, String, Array] :bbox The extent (bounding box) of
94
- # the exported image. Unless the bboxSR parameter has been specified, the
95
- # bbox is assumed to be in the spatial reference of the map.
96
- #
97
- # # Syntax: <xmin>, <ymin>, <xmax>, <ymax>
98
- # # Examples:
99
- # :bbox => "-104,35.6,-94.32,41"
100
- # :bbox => [-104,35.6,-94.32,41]
101
- #
102
- # # Note: The bboxcoordinates should always use a period as the decimal separator
103
- # # even in countries where traditionally a comma is used.
104
- #
105
- # @option params [String, Array] :size ([400, 400]) The size (width * height) of the exported
106
- # image in pixels. If the size is not specified, an image with a default
107
- # size of 400 * 400 will be exported.
108
- #
109
- # # Syntax: <width>, <height>
110
- # # Examples:
111
- # :size => "600,550"
112
- # :size => [600,550]
113
- #
114
- # @option params [Integer] :dpi (96) The device resolution of the exported
115
- # image (dots per inch).
116
- #
117
- # # Example:
118
- # :dpi => 300
119
- #
120
- # @option params [Integer] :imageSR The well-known ID of the spatial reference
121
- # of the exported image. If the imageSR is not specified, the image will
122
- # be exported in the spatial reference of the map.
123
- #
124
- # # Example:
125
- # :imageSR => 4326
126
- #
127
- # @option params [Integer] :bboxSR The well-known ID of the spatial reference
128
- # of the bbox. If the bboxSR is not specified, the bbox is assumed to be
129
- # in the spatial reference of the map.
130
- #
131
- # # Example:
132
- # :bboxSR => 4326
133
- #
134
- # @option params [String, Symbol] :format (:png) The format of the exported
135
- # image.
136
- #
137
- # # Values: png | png8 | png24 | jpg | pdf | bmp | gif | svg | png32
138
- # # Examples:
139
- # :format => :png32
140
- # :format => 'jpg'
141
- #
142
- # # Note: Support for the png32 format was added at 9.3.1. This format is only
143
- # # available for map services whose supportedImageFormatTypes property includes PNG32
144
- #
145
- # @option params [String] :layerDefs Allows you to filter the features of
146
- # individual layers in the exported map by specifying definition expressions
147
- # for those layers.
148
- #
149
- # # Syntax: layerId1:layerDef1;layerId2:layerDef2
150
- # # (where layerId1, layerId2 are the layer ids returned by the map service resource)
151
- # # Example:
152
- # :layersDefs => "0:POP2000 > 1000000;5:AREA > 100000"
153
- # :layersDefs => { 0 => "POP2000 > 1000000", 1 => "AREA > 100000" }
154
- #
155
- # @option params [String, Hash<Symbol, Array>] layers Determines which layers appear on the exported
156
- # map. There are four ways to specify which layers are shown:
157
- #
158
- # * show: Only the layers specified in this list will be exported.
159
- # * hide: All layers except those specified in this list will be exported.
160
- # * include: In addition to the layers exported by default, the layers specified in this list will be exported.
161
- # * exclude: The layers exported by default excluding those specified in this list will be exported.
162
- #
163
- # # Syntax: [show | hide | include | exclude]:layerId1,layerId2
164
- # # where layerId1, layerId2are the layer ids returned by the map service resource
165
- # # Examples:
166
- # :layers => "show:2,4,7"
167
- # :layers => { :show => [2,4,7] }
168
- #
169
- # @option params [true, false] transparent (false) If true, the image will be exported
170
- # with the background color of the map set as its transparent color. The default
171
- # is false. Only the png and gif formats support transparency. Internet
172
- # Explorer 6 does not display transparency correctly for png24 image formats.
173
- #
174
- # @example
175
- # # create a map service
176
- # map_service = MapServer.new("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer")
177
- #
178
- # # Export a map
179
- # map_service.export(:bbox => "-127.8,15.4,-63.5,60.5")
180
- #
181
- # # Export a map and change imageSR to 102004 (USA_Contiguous_Lambert_Conformal_Conic projection)
182
- # map_service.export(:bbox => "-127.8,15.4,-63.5,60.5", :imageSR => 102004, :f => "html")
183
- #
184
- # # Export a map, change imageSR to 102004 (USA_Contiguous_Lambert_Conformal_Conic projection),
185
- # # set image size to a width and height of 800x600, format to gif, and transparent to true.
186
- # map_service.export(:bbox => "-115.8,30.4,-85.5,50.5", :size => "800,600", :imageSR => 102004, :format => "gif", :transparent => false, :f => "html")
187
- #
188
- # # Export the same map as above but change the output format to pretty json (f=pjson).
189
- # map_service.export(:bbox => "-115.8,30.4,-85.5,50.5", :size => "800,600", :imageSR => 102004, :format => "gif", :transparent => false, :f => "pjson")
190
- #
191
- # @example
192
- # JSON Response Syntax:
193
- # {
194
- # "href" : "<href>",
195
- # "width" : <width>,
196
- # "height" : <height>,
197
- # "extent" : {<envelope>},
198
- # "scale" : <scale>
199
- # }
200
- #
201
- # JSON Response Example:
202
- # {
203
- # "href" : "http://atlantic/arcgisoutput/_ags_map42ef5eae899942a9b564138e184a55c9.png",
204
- # "width" : 400,
205
- # "height" : 400,
206
- # "extent" : {
207
- # "xmin" : -109.55,
208
- # "ymin" : 25.76,
209
- # "xmax" : -86.39,
210
- # "ymax" : 49.94,
211
- # "spatialReference" : { "wkid" : 4326 }
212
- # },
213
- # "scale" : 2.53E7
214
- # }
215
- #
216
- # @return [HTTParty::Response] the HTTP response
217
- def export(params = {})
218
- params = {
219
- :bbox => params[:bbox],
220
- :f => params[:f] || :image,
221
- :format => params[:format] || :png24,
222
- :transparent => params[:transparent] || true,
223
- :size => params[:size],
224
- :dpi => params[:dpi]
225
- }
226
- HTTParty.get("#{url}/export", :query => params)
227
- end
228
- end
229
- end
230
- end
1
+ # encoding: utf-8
2
+
3
+ module ArcServer
4
+ module REST
5
+ # Map services offer access to map and layer content. Map services can either
6
+ # be cached or dynamic. A map service that fulfills requests with pre-created
7
+ # tiles from a cache instead of dynamically rendering part of the map is called
8
+ # a cached map service. A dynamic map service requires the server to render
9
+ # the map each time a request comes in. Map services using a tile cache can
10
+ # significantly improve performance while delivering maps, while dynamic map
11
+ # services offer more flexibility. Map services should always be published as
12
+ # pooled services.
13
+ #
14
+ # The REST API map service resource represents a map service. This resource
15
+ # works only with the default data frame of your published map document. This
16
+ # resource provides basic information about the map, including the layers that
17
+ # it contains, whether the map is cached or not, its spatial reference, initial
18
+ # and full extents, map units, and copyright text. It also provides some metadata
19
+ # associated with the service such as its service description, its author, and
20
+ # keywords. If the map is cached, then additional information about its tiling
21
+ # scheme such as the origin of the cached tiles, the levels of detail, and tile
22
+ # size is included. Note that multi-layer caches are only accessible in REST
23
+ # via export, and these requests are treated as a dynamic map service. Tile
24
+ # access is not supported in REST for multi-layer caches.
25
+ #
26
+ # The map service resource supports several operations:
27
+ #
28
+ # * Export map - Used to export a map image from a dynamic map service. The
29
+ # resulting map can be used for display and be in a different projection from
30
+ # the original data source. When generating a map image, map services are
31
+ # not able to change feature rendering for an existing layer, add a dynamic
32
+ # layer, or change the layer draw order.
33
+ #
34
+ # * Identify - Returns information about features in one or more layers based
35
+ # on where a user clicks on the map.
36
+ #
37
+ # * Find - Returns information about features in one or more fields in one or
38
+ # more layers based on a key word.
39
+ #
40
+ # * Generate KML - Generates a KML document wrapped in a kmz file. The document
41
+ # contains a network link to the KML service endpoint with specified properties
42
+ # and parameters. This operation is valid on services that have not been restricted
43
+ # by using a token service.
44
+ #
45
+ # * Query on a Layer - Returns a subset of features in a layer based on query
46
+ # criteria.
47
+ #
48
+ # * Map services do not expose editing capabilities. They provide read-only
49
+ # access to feature and attribute content.
50
+ class MapServer
51
+ # The REST url of a map service
52
+ attr_reader :url
53
+
54
+ # @param [String] url the REST url of a map service
55
+ # @example
56
+ # ArcServer::MapServer.new("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer")
57
+ def initialize(url)
58
+ @url = url
59
+ end
60
+
61
+ # The export operation is performed on a map service resource. The result
62
+ # of this operation is a map image resource. This resource provides information
63
+ # about the exported map image such as its URL, its width and height, extent
64
+ # and scale.
65
+ #
66
+ # Apart from the usual response formats of html and json, users can also
67
+ # request a format called image while performing this operation. When users
68
+ # perform an export with the format of image, the server responds by directly
69
+ # streaming the image bytes to the client. One must note that with this
70
+ # approach you don't get any information associated with the exported map
71
+ # other than the actual image.
72
+ #
73
+ # Note that the extent displayed in the exported map image may not exactly
74
+ # match the extent sent in the bbox parameter when the aspect ratio of the
75
+ # image size does not match the aspect ratio of the bbox. The aspect ratio
76
+ # is the height divided by the width. In these cases the extent is re-sized
77
+ # to prevent map images from appearing stretched. The exported map’s extent
78
+ # is sent along with the json and html responses and may be used in client
79
+ # side calculations. So it is important that the client-side code update its
80
+ # extent based on the response.
81
+ #
82
+ # @param [Hash] params the query parameters to pass to the export operation
83
+ #
84
+ # @option params [String, Symbol] :f (:image) The response format. The default response
85
+ # format is html. If the format is image, the image bytes are directly streamed
86
+ # to the client.
87
+ #
88
+ # # Values: html | json | image | kmz | pjson (pretty json)
89
+ # # Examples:
90
+ # :f => :json
91
+ # :f => 'kmz'
92
+ #
93
+ # @option params [required, String, Array] :bbox The extent (bounding box) of
94
+ # the exported image. Unless the bboxSR parameter has been specified, the
95
+ # bbox is assumed to be in the spatial reference of the map.
96
+ #
97
+ # # Syntax: <xmin>, <ymin>, <xmax>, <ymax>
98
+ # # Examples:
99
+ # :bbox => "-104,35.6,-94.32,41"
100
+ # :bbox => [-104,35.6,-94.32,41]
101
+ #
102
+ # # Note: The bboxcoordinates should always use a period as the decimal separator
103
+ # # even in countries where traditionally a comma is used.
104
+ #
105
+ # @option params [String, Array] :size ([400, 400]) The size (width * height) of the exported
106
+ # image in pixels. If the size is not specified, an image with a default
107
+ # size of 400 * 400 will be exported.
108
+ #
109
+ # # Syntax: <width>, <height>
110
+ # # Examples:
111
+ # :size => "600,550"
112
+ # :size => [600,550]
113
+ #
114
+ # @option params [Integer] :dpi (96) The device resolution of the exported
115
+ # image (dots per inch).
116
+ #
117
+ # # Example:
118
+ # :dpi => 300
119
+ #
120
+ # @option params [Integer] :imageSR The well-known ID of the spatial reference
121
+ # of the exported image. If the imageSR is not specified, the image will
122
+ # be exported in the spatial reference of the map.
123
+ #
124
+ # # Example:
125
+ # :imageSR => 4326
126
+ #
127
+ # @option params [Integer] :bboxSR The well-known ID of the spatial reference
128
+ # of the bbox. If the bboxSR is not specified, the bbox is assumed to be
129
+ # in the spatial reference of the map.
130
+ #
131
+ # # Example:
132
+ # :bboxSR => 4326
133
+ #
134
+ # @option params [String, Symbol] :format (:png) The format of the exported
135
+ # image.
136
+ #
137
+ # # Values: png | png8 | png24 | jpg | pdf | bmp | gif | svg | png32
138
+ # # Examples:
139
+ # :format => :png32
140
+ # :format => 'jpg'
141
+ #
142
+ # # Note: Support for the png32 format was added at 9.3.1. This format is only
143
+ # # available for map services whose supportedImageFormatTypes property includes PNG32
144
+ #
145
+ # @option params [String] :layerDefs Allows you to filter the features of
146
+ # individual layers in the exported map by specifying definition expressions
147
+ # for those layers.
148
+ #
149
+ # # Syntax: layerId1:layerDef1;layerId2:layerDef2
150
+ # # (where layerId1, layerId2 are the layer ids returned by the map service resource)
151
+ # # Example:
152
+ # :layersDefs => "0:POP2000 > 1000000;5:AREA > 100000"
153
+ # :layersDefs => { 0 => "POP2000 > 1000000", 1 => "AREA > 100000" }
154
+ #
155
+ # @option params [String, Hash<Symbol, Array>] layers Determines which layers appear on the exported
156
+ # map. There are four ways to specify which layers are shown:
157
+ #
158
+ # * show: Only the layers specified in this list will be exported.
159
+ # * hide: All layers except those specified in this list will be exported.
160
+ # * include: In addition to the layers exported by default, the layers specified in this list will be exported.
161
+ # * exclude: The layers exported by default excluding those specified in this list will be exported.
162
+ #
163
+ # # Syntax: [show | hide | include | exclude]:layerId1,layerId2
164
+ # # where layerId1, layerId2are the layer ids returned by the map service resource
165
+ # # Examples:
166
+ # :layers => "show:2,4,7"
167
+ # :layers => { :show => [2,4,7] }
168
+ #
169
+ # @option params [true, false] transparent (false) If true, the image will be exported
170
+ # with the background color of the map set as its transparent color. The default
171
+ # is false. Only the png and gif formats support transparency. Internet
172
+ # Explorer 6 does not display transparency correctly for png24 image formats.
173
+ #
174
+ # @example
175
+ # # create a map service
176
+ # map_service = MapServer.new("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer")
177
+ #
178
+ # # Export a map
179
+ # map_service.export(:bbox => "-127.8,15.4,-63.5,60.5")
180
+ #
181
+ # # Export a map and change imageSR to 102004 (USA_Contiguous_Lambert_Conformal_Conic projection)
182
+ # map_service.export(:bbox => "-127.8,15.4,-63.5,60.5", :imageSR => 102004, :f => "html")
183
+ #
184
+ # # Export a map, change imageSR to 102004 (USA_Contiguous_Lambert_Conformal_Conic projection),
185
+ # # set image size to a width and height of 800x600, format to gif, and transparent to true.
186
+ # map_service.export(:bbox => "-115.8,30.4,-85.5,50.5", :size => "800,600", :imageSR => 102004, :format => "gif", :transparent => false, :f => "html")
187
+ #
188
+ # # Export the same map as above but change the output format to pretty json (f=pjson).
189
+ # map_service.export(:bbox => "-115.8,30.4,-85.5,50.5", :size => "800,600", :imageSR => 102004, :format => "gif", :transparent => false, :f => "pjson")
190
+ #
191
+ # @example
192
+ # JSON Response Syntax:
193
+ # {
194
+ # "href" : "<href>",
195
+ # "width" : <width>,
196
+ # "height" : <height>,
197
+ # "extent" : {<envelope>},
198
+ # "scale" : <scale>
199
+ # }
200
+ #
201
+ # JSON Response Example:
202
+ # {
203
+ # "href" : "http://atlantic/arcgisoutput/_ags_map42ef5eae899942a9b564138e184a55c9.png",
204
+ # "width" : 400,
205
+ # "height" : 400,
206
+ # "extent" : {
207
+ # "xmin" : -109.55,
208
+ # "ymin" : 25.76,
209
+ # "xmax" : -86.39,
210
+ # "ymax" : 49.94,
211
+ # "spatialReference" : { "wkid" : 4326 }
212
+ # },
213
+ # "scale" : 2.53E7
214
+ # }
215
+ #
216
+ # @return [HTTParty::Response] the HTTP response
217
+ def export(params = {})
218
+ params = {
219
+ :bbox => params[:bbox],
220
+ :f => params[:f] || :image,
221
+ :format => params[:format] || :png24,
222
+ :transparent => params[:transparent] || true,
223
+ :size => params[:size],
224
+ :dpi => params[:dpi]
225
+ }
226
+ HTTParty.get("#{url}/export", :query => params)
227
+ end
228
+ end
229
+ end
230
+ end