arcserver.rb 0.1.3 → 0.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.rdoc +52 -2
- data/Rakefile +10 -0
- data/lib/arcserver/map_server.rb +2 -2
- data/lib/arcserver/rest/map_server.rb +214 -9
- data/lib/arcserver/soap/map_server.rb +173 -1
- data/lib/arcserver/version.rb +1 -1
- data/test/functional/soap/map_server_test.rb +1 -1
- data/test/unit/map_server_test.rb +1 -1
- data/test/unit/url_helper_test.rb +1 -1
- data/test/unit/util/legend_image_test.rb +1 -1
- metadata +7 -7
data/README.rdoc
CHANGED
@@ -1,7 +1,57 @@
|
|
1
1
|
= arcserver.rb
|
2
2
|
|
3
|
-
|
3
|
+
arcserver.rb is a unified interface for interacting with ESRI Arcserver (9.3+)
|
4
|
+
SOAP and REST APIs from Ruby. Extra utility methods are also provided for
|
5
|
+
generating legend images.
|
6
|
+
|
7
|
+
== Installation
|
8
|
+
|
9
|
+
[sudo] gem install arcserver.rb
|
10
|
+
|
11
|
+
<em>Optional: (some of the utility methods require RMagick)</em>
|
12
|
+
[sudo] gem install rmagick
|
13
|
+
|
14
|
+
== Quick Example
|
15
|
+
|
16
|
+
require 'arcserver'
|
17
|
+
|
18
|
+
# connect to a map server instance using either its REST or SOAP url
|
19
|
+
map_server = ArcServer::MapServer.new('http://sampleserver1.arcgisonline.com/ArcGIS/services/Portland/ESRI_LandBase_WebMercator/MapServer')
|
20
|
+
|
21
|
+
# get the default map name using the SOAP API
|
22
|
+
puts map_server.get_default_map_name
|
23
|
+
|
24
|
+
# get legend information using the SOAP API
|
25
|
+
puts map_server.get_legend_info
|
26
|
+
|
27
|
+
# export an image using the REST
|
28
|
+
puts map_server.export
|
29
|
+
|
30
|
+
== Contributors
|
31
|
+
|
32
|
+
The following people have contributed their time and effort to arcserver.rb:
|
33
|
+
|
34
|
+
* Colin Casey
|
35
|
+
* Glenn Goodrich
|
36
|
+
|
37
|
+
== Contribute
|
38
|
+
|
39
|
+
If you'd like to hack on arcserver.rb, start by forking my repo on GitHub:
|
40
|
+
|
41
|
+
http://github.com/colincasey/arcserver.rb
|
42
|
+
|
43
|
+
To get all of the dependencies, install the gem first. The best way to get your changes merged back into core is as follows:
|
44
|
+
|
45
|
+
1. Clone your fork
|
46
|
+
2. Create a thoughtfully named topic branch to contain your change
|
47
|
+
3. Hack away
|
48
|
+
4. Add tests and make sure everything still passes by running rake
|
49
|
+
5. If you are adding new functionality, document it in the README
|
50
|
+
6. Do not change the version number, I will do that on my end
|
51
|
+
7. If necessary, rebase your commits into logical chunks, without errors
|
52
|
+
8. Push the branch up to GitHub
|
53
|
+
9. Send me (colincasey[http://github.com/colincasey]) a pull request for your branch
|
4
54
|
|
5
55
|
== Copyright
|
6
56
|
|
7
|
-
Copyright (c)
|
57
|
+
Copyright (c) 2010 Colin Casey. See LICENSE for details.
|
data/Rakefile
CHANGED
@@ -33,6 +33,16 @@ Rake::RDocTask.new do |rdoc|
|
|
33
33
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
34
34
|
end
|
35
35
|
|
36
|
+
|
37
|
+
begin
|
38
|
+
require 'yard'
|
39
|
+
YARD::Rake::YardocTask.new do |t|
|
40
|
+
t.files = ['lib/**/*.rb']
|
41
|
+
end
|
42
|
+
rescue LoadError
|
43
|
+
|
44
|
+
end
|
45
|
+
|
36
46
|
desc "Build arcserver.rb gem"
|
37
47
|
task :build do
|
38
48
|
system "gem build arcserver.rb.gemspec"
|
data/lib/arcserver/map_server.rb
CHANGED
@@ -25,14 +25,14 @@ module ArcServer
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# Utility method for generating a legend image
|
28
|
-
# (requires optional dependency, RMagick [>= 2.
|
28
|
+
# (requires optional dependency, RMagick [>= 2.12.0], to be installed)
|
29
29
|
#
|
30
30
|
# @return [Magick::Image] the legend as an RMagick Image object
|
31
31
|
def get_legend_image
|
32
32
|
begin
|
33
33
|
require 'RMagick' unless Object.const_defined?("Magick")
|
34
34
|
rescue LoadError
|
35
|
-
raise ArcServerError, "#{self.class}#get_legend_image needs an optional dependency 'RMagick [>= 2.
|
35
|
+
raise ArcServerError, "#{self.class}#get_legend_image needs an optional dependency 'RMagick [>= 2.12.0]' to be installed - try `gem install rmagick`"
|
36
36
|
end
|
37
37
|
Util::LegendImage.new(self).get_image
|
38
38
|
end
|
@@ -2,23 +2,228 @@
|
|
2
2
|
|
3
3
|
module ArcServer
|
4
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.
|
5
50
|
class MapServer
|
51
|
+
# The REST url of a map service
|
6
52
|
attr_reader :url
|
7
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")
|
8
57
|
def initialize(url)
|
9
58
|
@url = url
|
10
59
|
end
|
11
60
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
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]
|
20
225
|
}
|
21
|
-
HTTParty.get("#{url}/export", :query =>
|
226
|
+
HTTParty.get("#{url}/export", :query => params)
|
22
227
|
end
|
23
228
|
end
|
24
229
|
end
|
@@ -2,7 +2,147 @@
|
|
2
2
|
|
3
3
|
module ArcServer
|
4
4
|
module SOAP
|
5
|
+
# Map services offer access to map and attribute content. Map services can either be cached
|
6
|
+
# or dynamic. A map service that fulfills requests with pre-created tiles from a cache instead
|
7
|
+
# of dynamically rendering part of the map is called a cached map service. A dynamic map
|
8
|
+
# service requires the server to render the map each time a request comes in. Map services
|
9
|
+
# using a tile cache can significantly improve performance while delivering maps, while dynamic
|
10
|
+
# map services offer more flexibility.
|
11
|
+
#
|
12
|
+
# Map services offer the following capabilities:
|
13
|
+
# * Generate map images for a specified geographic area
|
14
|
+
# * Change the description of the map
|
15
|
+
# * Control the output map image
|
16
|
+
# * Get map legend information
|
17
|
+
# * Query map features using attributes or spatial filters
|
18
|
+
# * Get information regarding the cache
|
19
|
+
# * Get a scale bar
|
20
|
+
#
|
21
|
+
# WSDL syntax:
|
22
|
+
# http://<Web Server Hostname>/<ArcGIS Instance>/services/<ServiceName>/MapServer?wsdl
|
23
|
+
#
|
24
|
+
# =Working with map services
|
25
|
+
#
|
26
|
+
# ==Get information about the map and its layers
|
27
|
+
#
|
28
|
+
# To access information about a map and its layers use GetServerInfo. GetServerInfo returns MapServerInfo
|
29
|
+
# and MapLayerInfo. MapServerInfo contains read-only information describing the default state of a map
|
30
|
+
# service, such as the name of the map, the background color or the spatial extent of the map. Read-only
|
31
|
+
# layer properties, such as the layer’s name, the layer’s attributes and whether or not the layer has
|
32
|
+
# labels associated with it, can be retrieved from MapLayerInfo.
|
33
|
+
#
|
34
|
+
# If you wish to make changes to the map or to map layers you will need to use MapDescription or
|
35
|
+
# LayerDescription. Use MapDescription to access map settings that can be changed such as geographic
|
36
|
+
# extent and spatial reference. MapDescription provides access to information on individual layers within
|
37
|
+
# the map. LayerDescription provides the ability to change the visibility of a layer, to toggle the visibility
|
38
|
+
# of existing labels belonging to the layer and to assign a expression in order to display a specified
|
39
|
+
# subset of features.
|
40
|
+
#
|
41
|
+
# == Exporting a map image
|
42
|
+
#
|
43
|
+
# To export a map image from a dynamic map service use ExportMapImage. An ImageDescription contains an ImageType
|
44
|
+
# and an ImageDisplay. Specifying the image format, such as JPG or PNG, is done using ImageType. Use ImageDisplay to
|
45
|
+
# specify the height and width of the image. You can also specify a transparent color using ImageDisplay. The server
|
46
|
+
# will restrict the maximum size an image can be. Use GetServiceConfigurationInfo to view the maximum height and width.
|
47
|
+
# GetServiceConfigurationInfo contains a set of name-value pairs for properties set for the MapServer Service
|
48
|
+
# Configuration Restrictions.
|
49
|
+
#
|
50
|
+
# ==Information about legend elements
|
51
|
+
#
|
52
|
+
# You can retrieve legend elements including the symbol image, labels, descriptions and headings. A common use would
|
53
|
+
# be to populate a table of contents. To retrieve legend information, use GetLegendInfo and MapServerLegendInfo
|
54
|
+
# to retrieve specific information for a particular layer.
|
55
|
+
#
|
56
|
+
# ==Querying the map
|
57
|
+
#
|
58
|
+
# Map services offer a number of methods to perform query operations on the map. These include:
|
59
|
+
# * Find
|
60
|
+
# * Identify
|
61
|
+
# * QueryHyperlinks
|
62
|
+
# * QueryFeatureCount
|
63
|
+
# * QueryFeatureData
|
64
|
+
# * QueryFeatureIDs
|
65
|
+
# * QueryFeatureCount2
|
66
|
+
# * QueryFeatureData2
|
67
|
+
# * QueryFeatureIDs2
|
68
|
+
#
|
69
|
+
# Find returns an array of MapServerFindResults based on a search string. Use MapServerFindResult to access properties
|
70
|
+
# of found features, such as the found value, the layer ID, the field name, the geometry of the found feature and a
|
71
|
+
# set of name-value pairs for the field names and values of the found features.
|
72
|
+
#
|
73
|
+
# Identify returns an array of MapServerIdentifyResults based on search shape. Use MapServerIdentifyResult to access
|
74
|
+
# properties of identified features. These include: layer ID, name, a set of name-value pairs for the field names and values
|
75
|
+
# of the identified object, and the geometry of the identified.
|
76
|
+
#
|
77
|
+
# QueryFeatureCount and QueryFeatureCount2 both return the number of features that match a query. The difference between
|
78
|
+
# the two operations is QueryFeatureCount requires a LayerID as one of the parameters, while QueryFeatureCount2 requires
|
79
|
+
# a LayerDescription instead. By passing in a LayerDescription you can query against a specific sub set of the layer by
|
80
|
+
# apply a definition expression.
|
81
|
+
#
|
82
|
+
# QueryFeatureID and QueryFeatureID2 both return an FIDSet. This is the set of feature IDs that match the query criteria.
|
83
|
+
# The difference between the two operations is QueryFeatureCount requires a LayerID as one of the parameters, while
|
84
|
+
# QueryFeatureCount2 requires a LayerDescription instead. By passing in a LayerDescription you can query against a specific
|
85
|
+
# subset of the layer by apply a definition expression.
|
86
|
+
#
|
87
|
+
# QueryFeatureData and QueryFeatureData2 differ not only in the required parameters, but also in what is returned.
|
88
|
+
# QueryFeatureData returns a RecordSet base on a specific query and includes a LayerID in the method parameters.
|
89
|
+
# QueryFeatureData2 returns a QueryResult. A QueryResult includes the URL of the generated query result in the requested
|
90
|
+
# format. The result format can be specified by using QueryResultOptions. The query result can be formatted into a RecordSet
|
91
|
+
# or KMZ format (either as a URL to the kmz file or a Mime object). Another property includes GeoTransformation. This is
|
92
|
+
# used to specify any needed geographic transformation on the results.
|
93
|
+
#
|
94
|
+
# The server will restrict the maximum number of records that can be sent. Use GetServiceConfigurationInfo the maximum records
|
95
|
+
# that can be returned in a query for this particular map service. GetServiceConfigurationInfo contains a set of name-value
|
96
|
+
# pairs for properties set for the MapServer Service Configuration Restrictions. This restriction does not affect
|
97
|
+
# QueryFeatureCount, QueryFeatureIds, QueryFeatureCount2 or QueryFeatureIds2.
|
98
|
+
#
|
99
|
+
# =Working with cached vs. dynamic map services
|
100
|
+
#
|
101
|
+
# ArcGIS Server map services provide access to two types of visible map content: dynamic and cached. Dynamic maps
|
102
|
+
# are generated on-the-fly per a user request. Layer visibility, graphics, and other variables can be modified before
|
103
|
+
# the dynamic map is generated. Unfortunately, as the amount of content and complexity in the map increases, so
|
104
|
+
# does the amount of time it takes to generate the map. Alternatively, cached maps consist of pre-generated map
|
105
|
+
# tiles available for immediate access. Since the cost of generating the maps has already been paid, the performance
|
106
|
+
# penalty associated with map generation is not a factor. Working with a map cache requires knowledge of cache
|
107
|
+
# properties, such a location and structure, so that you are able to retrieve the appropriate cached image. In
|
108
|
+
# general, a map cache is stored in a nested set of directories which contain image tiles for map extents at specific
|
109
|
+
# scale levels, or levels of detail. The author of the map service determines these levels. The cached tiles are
|
110
|
+
# usually accessible via a public virtual directory or an ArcGIS Server map service tile handler.
|
111
|
+
#
|
112
|
+
# ==Information about a map cache
|
113
|
+
#
|
114
|
+
# Use IsFixedScaleMap to determine if a map service is cached. The term fixed scale map service and cached map service are
|
115
|
+
# used synonymously. GetCacheDescriptionInfo returns information on a cached map service in one call including its
|
116
|
+
# cache type, its tiling scheme (TileCacheInfo), image information (TileImageInfo) and control information (TileControlInfo).
|
117
|
+
#
|
118
|
+
# TileCacheInfo contains information on the tiling scheme for the cache. The tiling scheme includes the tiling origin,
|
119
|
+
# spatial reference, tile size in pixels and information on the Levels of Detail (LOD) at which the service is cached.
|
120
|
+
# LODInfos enumerate a LODInfo object which describes a scale and resolution. Using the tiling scheme information in
|
121
|
+
# TileCacheInfo the client can calculate the tiles that cover any rectangular extent in map space and then retrieve
|
122
|
+
# tiles either directly from the virtual directory, or from the tile handler or by making GetMapTile or GetLayerTile
|
123
|
+
# requests against the map service.
|
124
|
+
#
|
125
|
+
# GetMapTile gets the specified tile from a map service that has a single fused cache. GetLayerTile gets the specified
|
126
|
+
# tile for a defined layer from a map service that has a multi-layer cache.
|
127
|
+
#
|
128
|
+
# GetTileImageInfo returns information describing the image format for the cached tiles. TileImageInfo has two main
|
129
|
+
# properties Format and Compression quality. Format can have values (PNG8, PNG24, PNG32 and JPEG). If the selected format
|
130
|
+
# is JPEG, then the compression quality can have a value from 0 to 100. The value of format must be used in constructing
|
131
|
+
# the URL to the tile.
|
132
|
+
#
|
133
|
+
# GetCacheControlInfo returns cache control information that allows clients to discover information such as if client
|
134
|
+
# caching is allowed.
|
135
|
+
#
|
136
|
+
# =Limitations
|
137
|
+
#
|
138
|
+
# When generating a map image, map services are not able to perform the following tasks:
|
139
|
+
# * Change feature render for an existing layer.
|
140
|
+
# * Add a dynamic layer
|
141
|
+
# * Change layer draw order
|
142
|
+
#
|
143
|
+
# Map services do not expose editing capabilities. They merely provide read-only access to feature and attribute content.
|
5
144
|
class MapServer < Handsoap::Service
|
145
|
+
protected
|
6
146
|
on_create_document do |doc|
|
7
147
|
doc.alias "env", "http://schemas.xmlsoap.org/soap/envelope/"
|
8
148
|
doc.alias "ns", "http://www.esri.com/schemas/ArcGIS/9.3"
|
@@ -12,16 +152,48 @@ module ArcServer
|
|
12
152
|
self.class.endpoint(:uri => @soap_url, :version => 1)
|
13
153
|
end
|
14
154
|
|
155
|
+
public
|
15
156
|
def initialize(soap_url, protocol_version=2)
|
16
157
|
@soap_url = soap_url
|
17
158
|
end
|
18
159
|
|
160
|
+
# Get the name of the active map (data frame) in a map service.
|
161
|
+
# @return [String] A string representing name of the active map in the map service.
|
19
162
|
def get_default_map_name
|
20
163
|
response = invoke("ns:GetDefaultMapName")
|
21
164
|
node = response.document.xpath('//tns:GetDefaultMapNameResponse/Result', ns).first
|
22
165
|
parse_default_map_name_result(node)
|
23
166
|
end
|
24
167
|
|
168
|
+
# Returns legend information, such as layer name, group heading, classification labels and symbol swatches,
|
169
|
+
# for layers in a map.
|
170
|
+
#
|
171
|
+
# A map service does not have the ability to generate a single legend image will all legend content. Instead,
|
172
|
+
# the GetLegendInfo() method provides access to legend content which can be used to construct a single consolidated
|
173
|
+
# legend.
|
174
|
+
#
|
175
|
+
# Each MapServerLegendInfo object contains one or more MapServerLegendGroup objects. Each MapServerLegendGroup object
|
176
|
+
# contains one or more MapServerLegendClass objects. The relationship between value objects and legend content is
|
177
|
+
# illustrated in the following diagram. Note that each MapServerLegendClass contains a classification label and symbol
|
178
|
+
# swatch.
|
179
|
+
#
|
180
|
+
# @param [Hash] args the arguments to send in the SOAP request
|
181
|
+
#
|
182
|
+
# @option args [String] :map_name (get_default_map_name()) the name of the map (data frame) that will
|
183
|
+
# be used to generate legend info
|
184
|
+
#
|
185
|
+
# @option args [Array<Integer>] :layer_ids (nil) An array of layer ids for which legend information will
|
186
|
+
# be returned. If empty or null, all layers will be included.
|
187
|
+
#
|
188
|
+
# @option args [LegendPatch] :legend_patch (nil) A MapServerLegendPatch used to define symbol swatch properties
|
189
|
+
# for legend classifications. If empty or null, the default patch properties defined in the map will be used.
|
190
|
+
#
|
191
|
+
# @option args [String] :image_type ("esriImageReturnMimeData") An ImageType defines the image type and method for
|
192
|
+
# returning the image content for the symbol swatches. Supported image types are 'bmp', 'jpg', 'tif', 'png'/'png8',
|
193
|
+
# 'png24', 'emf', 'ps', 'pdf', 'ai', 'gif', and 'svg'/'svgz'. Image content can be returned as a URL or as a
|
194
|
+
# MIME data stream.
|
195
|
+
#
|
196
|
+
# @return [Hash] the SOAP response decoded into a Hash
|
25
197
|
def get_legend_info(args = {})
|
26
198
|
image_return_type = args[:image_return_url] ? "esriImageReturnURL" : "esriImageReturnMimeData"
|
27
199
|
response = invoke("ns:GetLegendInfo") do |message|
|
@@ -37,7 +209,7 @@ module ArcServer
|
|
37
209
|
|
38
210
|
private
|
39
211
|
def ns
|
40
|
-
{ 'tns'
|
212
|
+
{ 'tns' => 'http://www.esri.com/schemas/ArcGIS/9.3' }
|
41
213
|
end
|
42
214
|
|
43
215
|
# helpers
|
data/lib/arcserver/version.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Colin Casey
|
@@ -117,12 +117,12 @@ dependencies:
|
|
117
117
|
- !ruby/object:Gem::Version
|
118
118
|
segments:
|
119
119
|
- 2
|
120
|
-
-
|
121
|
-
-
|
122
|
-
version: 2.
|
120
|
+
- 12
|
121
|
+
- 0
|
122
|
+
version: 2.12.0
|
123
123
|
type: :development
|
124
124
|
version_requirements: *id007
|
125
|
-
description:
|
125
|
+
description: A library for accessing ESRI ArcServer REST and SOAP APIs from a unified interface
|
126
126
|
email:
|
127
127
|
- casey.colin@gmail.com
|
128
128
|
executables: []
|
@@ -179,7 +179,7 @@ rubyforge_project:
|
|
179
179
|
rubygems_version: 1.3.7
|
180
180
|
signing_key:
|
181
181
|
specification_version: 3
|
182
|
-
summary:
|
182
|
+
summary: A library for accessing ESRI ArcServer REST and SOAP APIs from a unified interface
|
183
183
|
test_files:
|
184
184
|
- test/functional/soap/map_server_test.rb
|
185
185
|
- test/test_helper.rb
|