|
POST
|
Using local raster files requires a Standard level license. You are most likely using the free Lite license.
... View more
08-17-2022
06:59 AM
|
1
|
2
|
1475
|
|
POST
|
I see. Interesting. I'll do some digging and will let you know what I find out. In the meantime, does your server specify returnRoutes=true? My understanding (though I'm slightly guessing at this point) is than maneuver geometries come back compressed, but the overall route geometry should be a full Esri JSON geometry that you could pass to AGSPolyline.fromJSON.
... View more
08-12-2022
07:39 AM
|
0
|
0
|
3665
|
|
POST
|
🫣 Could you share your code that does that please? I'd like to understand why that's happening. Could be helpful in documenting things.
... View more
08-12-2022
07:37 AM
|
0
|
0
|
4569
|
|
POST
|
@coryeicher wrote: Well, there's one vector tile basemap that works in Unity, but it's underwhelming for most purposes.... Blank White Vector Basemap No vector tile layer works in the ArcGIS Maps SDK for Unity. If it shows up as blank white tiles in Unity, that's just a happy coincidence 🙂
... View more
08-12-2022
07:18 AM
|
0
|
2
|
4573
|
|
POST
|
The Layers documentation page in the ArcGIS Maps SDK for Unity documentation covers the layer types that are currently supported: In ArcGIS Maps SDK for Unity, basemap layers are currently limited to image tile layers. Image tile layers can use an online image tile service or a local image tile package as a data source. See Image tile layers below for more information. Specifically: Basemap layer types Data layers But in short, we currently support image tile layers as basemap and data layers, and 3D object scene layers and integrated mesh scene layers as data layers. All layer types can read from a service or a local package.
... View more
08-12-2022
07:15 AM
|
1
|
0
|
871
|
|
POST
|
Hi, The requirement is that you use image tiled layers. Unfortunately (as @SNauman mentioned) we weren't able to get support for vector tile layers in for this first release, but it's one of our top priorities. Until we add vector tile support… You can use a .tpkx or .tpk created in ArcGIS Pro. You can publish an image tile service from ArcGIS Pro. You could use a layer that's already published in ArcGIS Online. You can see a few examples published by Esri here (though because they're image tile layers, many of them are deprecated, so while you can dev/test with them, don't use them in production). You could even use ArcGIS Pro to create an image tile layer of a map that just has a vector tile layer: I haven't tried this workflow, but I believe that in theory you could create a custom style in the Vector Tile Style Editor, create a Map in ArcGIS Pro using that custom style, and use ArcGIS Pro to export that to an image tile layer (I think ArcGIS Pro just refers to them as "tile layers") either as a local tile (.tpkx/tpk) or as a hosted service in ArcGIS Online. That would also probably be OK for dev & test if you're using our published basemaps as the source data but you'd need to talk to us about using that in production. Those are all stopgap options until we add vector tile support to the Maps SDKs. At that point this will become much simpler.
... View more
08-11-2022
04:49 PM
|
0
|
5
|
4585
|
|
POST
|
Hi. Are you making REST requests yourself against the routing service? If you're using the Runtime SDK, simply use the AGSRouteTask. It will handle unpacking the response into Runtime geometry objects. See these links: https://developers.arcgis.com/ios/route-and-directions/#route-task https://developers.arcgis.com/ios/swift/sample-code/find-route/
... View more
08-11-2022
02:31 PM
|
0
|
2
|
3676
|
|
POST
|
You can use AGSRequestConfiguration to log some debug info to the console. Try something like this: let locatorTask = AGSLocatorTask(url: URL(string: "https://my-server/services/GeocodeServer/")!)
if let gc = AGSRequestConfiguration.global().copy() as? AGSRequestConfiguration {
gc.debugLogRequests = true
locatorTask.requestConfiguration = gc
} That should output the request for you. Please note that you should not log this debug info in a release version of your app. There is a performance hit to this logging and you should disable it in production and testing.
... View more
08-09-2022
09:16 AM
|
0
|
2
|
1571
|
|
POST
|
Look at the Parts collection on the PolylineBuilder. Each Part represents a sequence of joined MapPoints along the Polyline. For a simple Polyline with no breaks, there could well just be 1 Part. Each Part is comprised of a sequence of MapPoints, and Segments between them (Segments could be straight lines, cubic beziers, or elliptic arcs). You can Add (append), Remove, and Insert MapPoints (and Segments for that matter) on the Part. You can also update a point by calling SetPoint(). Everything you want to modify on a Polyline should be doable on PolylineBuilder (even if you need to dig in to the Parts). The key is the split between the immutable geometry, and the modifiable builder.
... View more
08-09-2022
08:36 AM
|
2
|
0
|
1774
|
|
POST
|
Hi. Thanks for following up in the Esri Community! Unfortunately there is a bug in Runtime that means that true curves in a GraphicsOverlay require that the graphics overlay rendering mode is set to static. The default mode is dynamic. This also impacts true curves in a feature layer backed by a mobile geodatabase, but that doesn't impact you here. One alternative you could consider if you must display the GraphicsOverlay in dynamic mode is to densify the curve geometry and use the densified geometry for your graphic. Hope this helps. I'll see how we can expose this information through the docs until we are able to fix it.
... View more
08-08-2022
12:15 PM
|
0
|
1
|
2790
|
|
POST
|
In short, performance. Based off lessons learnt in the previous generation Runtime SDKs, we decided that geometries should be immutable. This way we can be explicit about monitoring and reflecting updates. For example, if you re-use a point in two places, what does that mean if you modify it? If that point is part of a polygon or polyline, modifying it could change the valid or "simple" state of that polygon/polyline, which can have various repercussions on rendering paths. And of course there's a performance impact in monitoring and propagating that change. Instead, you use Geometry Builders. These are lightweight objects that can accept an existing geometry or start from a blank slate, allow manipulation and construction of a new geometry, and then output that new geometry. For example, to add a point to a polyline, you can create a PolylineBuilder from the polyline, add a point, then call ToGeometry() to get a modified polyline. To modify a MapPoint, create a MapPointBuilder from the MapPoint, modify the X/Y/Z/M properties as needed using the getters and setters, then call ToGeometry() to get an updated MapPoint. Depending on what you want to do, there are also methods on GeometryEngine that could come in handy.
... View more
08-08-2022
10:17 AM
|
2
|
2
|
1802
|
|
POST
|
A lot will depend on how your locator is configured (you might be able to configure it to accommodate the Unit Name as part of the address - I'm not familiar with creating locators). You could also use the geocodeWithSearchValues() override and specify individual address attributes you want to search on. You can see the list of attributes your locator supports by looking at the AGSLocatorTask.locatorInfo.searchAttributes array (the locator will need to be loaded before you can read this metadata).
... View more
08-01-2022
06:43 AM
|
0
|
0
|
1787
|
|
POST
|
Hi. Image tiled layers are designed for efficient display and don't have any backing information built in. A couple of thoughts… Do you have access to the source data as feature data to query against? Another option would be to export an image snapshot of the map view using exportImage(), and convert the lat/lon from an AGSPoint into a screen location using locationToScreen(), then read the pixel value of the image for the CGPoint you get back.
... View more
07-28-2022
11:54 AM
|
1
|
1
|
1400
|
|
POST
|
Hi. The identify calls available on AGSMapView are focused on interaction so revolve around tapping on the screen. To search using an arbitrary geometry, you will have to call Query on the feature tables that you're interested in. This assumes that the "symbol markers" you're referring to represent features in a feature layer. Take a look a this conceptual doc: hosted-feature-layers Also take a look at this sample, which references a feature table (in this case, an AGSServiceFeatureTable), sets up an AGSQueryParameters, and then calls queryFeatures using the parameters, which is returned a set of features. You would do the same, except that instead of setting a whereClause on the parameters, you would set the geometry to the geometry from the sketch editor, and spatialRelationship to .within. If the "symbol markers" are graphics in a graphics overlay, then you'll have to iterate over each graphic in the graphics overlay and for its geometry use the AGSGeometryEngine.geometry(graphicGeom, within: sketchGeom) to narrow it down. This code could help. It shows both GraphicsOverlay and Feature Layer approaches. I haven't actually run it, but it compiles 🙂 extension AGSGraphicsOverlay {
func getGraphics(within searchPolygon: AGSPolygon) -> [AGSGraphic] {
let graphicsWithinGeometry = (graphics as? [AGSGraphic])?.filter { graphic in
guard let graphicGeometry = graphic.geometry else { return false }
return AGSGeometryEngine.geometry(graphicGeometry, within: searchPolygon)
}
return graphicsWithinGeometry ?? []
}
}
extension Array where Element == AGSGraphicsOverlay {
func getGraphics(within searchPolygon: AGSPolygon) -> [AGSGraphicsOverlay: [AGSGraphic]] {
var results = [AGSGraphicsOverlay: [AGSGraphic]]()
for overlay in self {
results[overlay] = overlay.getGraphics(within: searchPolygon)
}
return results
}
}
extension AGSMap {
func queryFeatures(within searchPolygon: AGSPolygon, completion: @escaping ([AGSFeatureLayer: Result<AGSFeatureQueryResult, Error>]) -> Void) {
// Create a store for all the results coming back from each feature layer
var results = [AGSFeatureLayer: Result<AGSFeatureQueryResult, Error>]()
// Create a Dispatch Group to coordinate the async Query calls against all the feature layers.
let coordinator = DispatchGroup()
// Query each feature layer in parallel, collecting all the query results in the `results` variable.
for layer in operationalLayers.compactMap({ return $0 as? AGSFeatureLayer }) {
guard let table = layer.featureTable else { continue }
// Find all features in the feature layer that are within the search polygon
let params = AGSQueryParameters()
params.whereClause = "1=1"
params.spatialRelationship = .within
params.geometry = searchPolygon
coordinator.enter()
table.queryFeatures(with: params) { [layer] result, error in
defer { coordinator.leave() }
if let error = error {
results[layer] = Result.failure(error)
} else if let result = result {
results[layer] = Result.success(result)
} else {
assertionFailure("No result OR error - that shouldn't happen")
}
}
}
// Once all the queries have completed, execute this code…
coordinator.notify(queue: .main) {
completion(results)
}
}
} You could then call that with something like this… if let searchGeom = sketchEditor.geometry as? AGSPolygon {
map.queryFeatures(within: searchGeom) { results in
for (layer, queryResponse) in results {
print("Got result for \(layer.name)")
switch queryResponse {
case .success(let queryResult):
print("Found \(queryResult.featureEnumerator().allObjects.count) features")
case .failure(let error):
print("There was an error querying the layer: \(error.localizedDescription)")
}
}
}
if let results = (mapView.graphicsOverlays as? [AGSGraphicsOverlay])?.getGraphics(within: searchGeom) {
for (overlay, graphics) in results {
print("Found \(graphics.count) graphics in overlay \(overlay)")
}
}
} Again, I haven't had a chance to run this code, but it should give you an idea of how to do this.
... View more
07-27-2022
09:55 AM
|
1
|
1
|
1823
|
|
POST
|
Hey @Element808. Thanks for the kind words again! Are you asking about being able to read a web map or web scene? Right now we support accessing layers directly. Reading a web map/web scene is something that we'll get to in time but first we want to add support for a few more layer types. Then there's the question of integrating with Unreal Landscapes. For that, I'll have to defer to someone on the team who's more familiar with working with Unreal Engine. In the meantime, perhaps you can explain what features of Unreal Landscapes you need to use? It could be that the Maps SDK already supports what you need, albeit slightly differently. Nick.
... View more
07-21-2022
11:17 AM
|
1
|
0
|
8563
|
| Title | Kudos | Posted |
|---|---|---|
| 2 | 05-14-2026 07:07 AM | |
| 2 | 04-30-2026 10:59 AM | |
| 4 | 04-22-2026 08:07 AM | |
| 1 | 01-29-2026 09:39 AM | |
| 1 | 12-17-2025 10:12 AM |