POST
|
You don't need to copy the geometry, it's immutable. GraphicsOverlays can be re-used, and you can remove/add graphics from them.
... View more
03-10-2017
09:43 AM
|
0
|
0
|
634
|
POST
|
1. AGSSketchEditor has a "style" property which has a "feedbackLineSymbol" property. You can set that to whatever line symbol you want. It defaults to a dashed symbol. 2. You can save the resulting geometry, which will be a Polygon or Polyline as JSON. They support AGSJSONSerializable. From there you can store it in user defaults or however you want. And then re-hydrate the geometry from JSON later.
... View more
03-09-2017
11:10 AM
|
2
|
2
|
634
|
POST
|
Yes - you can use the AGSSketchEditor with the creation mode of AGSSketchCreationModeFreehandPolyline or AGSSketchCreationModeFreehandPolygon. Here is a sample that is using vertex editing. But change the creation mode to one of the above (ie .freehandPolyline) and you can sketch lines on the map. arcgis-runtime-samples-ios/SketchViewController.swift at master · Esri/arcgis-runtime-samples-ios · GitHub
... View more
03-08-2017
06:48 PM
|
2
|
4
|
634
|
POST
|
Make sure you hold a reference to the AGSGeodatabase object, even after you create the layers. If it gets dealloc'd then it will try to clean up itself and you could end up with some undefined behavior.
... View more
03-06-2017
08:54 AM
|
1
|
0
|
491
|
POST
|
I just tested it and it sure is a bug. I will submit an issue.
... View more
02-27-2017
06:48 PM
|
1
|
0
|
461
|
POST
|
I have not seen this and I'm surprised at this behavior. Are you sure that there isn't somehow a second mapView being displayed? Maybe one was added during viewDidAppear?
... View more
02-27-2017
02:14 PM
|
0
|
2
|
461
|
POST
|
No, it is not in v100. Looks like it might make it into an update in the future, probably not the next one.
... View more
02-21-2017
01:44 PM
|
0
|
0
|
761
|
POST
|
This is in the iOS forum. It would be best to ask this in the Android SDK forum to get an answer from the Android team. That being said, I will forward this question to some Android team members that I know so hopefully you will get some kind of response.
... View more
02-15-2017
07:14 PM
|
0
|
1
|
611
|
POST
|
XCode compresses PNG files and makes them un-readable by our png library. In your target build settings - try setting "Compress PNG Files" to "NO". Then run your project again and it should work.
... View more
02-15-2017
07:13 PM
|
0
|
3
|
1167
|
POST
|
The user defaults doesn't take just any object. You have a few options. One option is that you can put the JSON Dictionary representation of the view point in the user defaults using the toJSON method. This is what I think you should do. Then when you pull it out of the user defaults, use the fromJSON. AGSViewpoint is AGSJSONSerializable and has the to/fromJSON methods.
... View more
01-30-2017
06:10 PM
|
0
|
0
|
892
|
POST
|
When you go to open the second map with the tpk, you just need to use the same viewpoint you currently have. You just ask the mapView for the currentViewpoint, then when you open the second map you set the initial viewpoint of it to that previous viewpoint. // get current viewpoint
let vp = mapView.currentViewpoint(with: .centerAndScale)
// if you want to see the coordinates of it, you do that like so
print("viewpoint scale: \(vp?.targetScale)")
print("viewpoint center: \(vp?.targetGeometry as! AGSPoint)")
let map2 = AGSMap()
// add tpk layers, etc here
// ...
// ...
//
// when you open the second map set the initial viewpoint to the
// viewpoint that you saved
map2.initialViewpoint = vp
// open second map
mapView.map = map2
... View more
01-25-2017
11:40 AM
|
2
|
2
|
892
|
POST
|
This is an issue that I can log and we can look into. The good news is that in the meantime you can try this workaround below. This kicks off a request manually, telling the request to save the data to disk (instead of memory) and also to use the portal's credentials. You already have a portal and portal item, so you don't need those 2 lines. The rest should get you going. func fetchData(){
portal = AGSPortal.arcGISOnline(withLoginRequired: true)
let pi = AGSPortalItem(portal: self.portal!, itemID: "c580e6bbaedc4c6e82b9c50fbe6b46fd")
// get url for fetching data endpoint
if let fetchDataURL = portal?.url?.appendingPathComponent("sharing/rest/content/items/\(pi.itemID)/data"){
// create an operation setting the remote resource as the portal (so that it will use the portal's credentials)
let op = AGSRequestOperation(remoteResource: portal, url: fetchDataURL, queryParameters: nil)
// set output file so that the data isn't stored in memory as it's downloaded
op.outputFileURL = FileManager.default.temporaryDirectory.appendingPathComponent("myData.dat")
// set completion handler
op.registerListener(self){ result, error in
if let error = error{
// download of data failed
print("error occurred: \(error.localizedDescription)")
}
else if let outputFile = result as? URL{
// download is complete and file is saved to disk
print("download complete: \(outputFile)")
}
}
// add the operation to the shared queue so that it can start
AGSOperationQueue.shared().addOperation(op)
}
}
... View more
01-23-2017
10:22 AM
|
3
|
1
|
461
|
POST
|
Brett, Nick Furness pointed out to me that you need to actually union the lines together first to get what you are looking for. Here is objective-c code to do what you need: @interface AGSPolyline (intersects)
-(NSArray<AGSPoint*>*)intersectionWithLine:(AGSPolyline*)line2;
@end
@implementation AGSPolyline (intersects)
-(NSArray<AGSPoint*>*)intersectionWithLine:(AGSPolyline*)line2{
NSMutableArray *points = [NSMutableArray array];
// first union the lines together
AGSPolyline *lineUnion = (AGSPolyline*)[AGSGeometryEngine unionOfGeometry1:self geometry2:line2];
// now get the intersecting line of union'ed line and self
AGSPolyline *line3 = (AGSPolyline*)[AGSGeometryEngine intersectionOfGeometry1:self geometry2:lineUnion];
double tolerance = 1e-10;
for (AGSPart *part in line3.parts){
for (AGSPoint *point in part.points){
double distance = [AGSGeometryEngine distanceBetweenGeometry1:point geometry2:line2];
// if the point is on the passed-in line then add it to the return value
if (distance < tolerance){
[points addObject:point];
}
}
}
return [points copy];
}
@end
-(void)testLineIntersection{
AGSPolyline *lineAB = [AGSPolyline polylineWithPoints:@[AGSPointMakeWGS84(0, 0), AGSPointMakeWGS84(10, 10)]];
AGSPolyline *lineCD = [AGSPolyline polylineWithPoints:@[AGSPointMakeWGS84(0, 10), AGSPointMakeWGS84(10, 0)]];
NSArray *pointsE = [lineAB intersectionWithLine:lineCD];
NSLog(@"intersection points: %@", pointsE);
}
Thanks to Nick Furness for pointing this out. He also provided the swift code, which I converted to objective-c.
... View more
01-04-2017
03:13 PM
|
3
|
3
|
994
|
POST
|
Actually - you should get back a line when intersecting 2 lines. My first answer above is incorrect, I will remove it for clarity. Code should look something like this: -(void)lineIntersection{
AGSPolyline *lineAB = [AGSPolyline polylineWithPoints:@[AGSPointMakeWGS84(0, 0), AGSPointMakeWGS84(10, 10)]];
AGSPolyline *lineCD = [AGSPolyline polylineWithPoints:@[AGSPointMakeWGS84(0, 10), AGSPointMakeWGS84(10, 0), AGSPointMakeWGS84(5, 10), AGSPointMakeWGS84(0, 0), AGSPointMakeWGS84(10, 10)]];
AGSPolyline *lineE = (AGSPolyline*)[AGSGeometryEngine intersectionOfGeometry1:lineAB geometry2:lineCD];
NSLog(@"lineE: %@", lineE);
}
... View more
01-04-2017
09:22 AM
|
2
|
2
|
994
|
POST
|
It is fixed now in version 100.0.0, which was recently released in November.
... View more
01-03-2017
09:29 AM
|
0
|
2
|
1226
|
Title | Kudos | Posted |
---|---|---|
1 | 12-04-2018 09:10 AM | |
1 | 07-08-2021 07:45 AM | |
1 | 06-14-2021 08:03 AM | |
1 | 06-09-2021 08:41 AM | |
1 | 11-22-2016 02:08 PM |
Online Status |
Offline
|
Date Last Visited |
10-21-2021
08:05 AM
|