POST
|
Hi Gonzalo, The `GraphicsOverlays` collection also has methods to manage the order of the `GraphicsOverlays` it contains (Add, Insert, Move, Remove, etc.). Within a `GraphicsOverlay`, you can also set a z-index property on individual graphics. A larger z-index means the graphic is higher in the draw order (for graphics in the same overlay). bottomGraphic.ZIndex = 0;
topGraphic.ZIndex = 1; Note: Graphics overlays *always* draw on top of layers in the map. Thad
... View more
07-26-2019
10:34 AM
|
2
|
0
|
1324
|
POST
|
Hi Kirk, I remember running into a similar issue when I tried implementing this via MVVM. Unfortunately, it was about 5 years ago, and I can't find how (or if!) I worked around it. From Google, I see that people have fixed similar binding issues (same error message at least) by using a proxy (such as a resource or hidden control) to provide the data context. For example: https://stackoverflow.com/questions/7660967/wpf-error-cannot-find-governing-frameworkelement-for-target-element I see that Antti has an example of using popups that looks pretty good. He only binds to the text shown in the popup and the geometry for the anchor. He's showing info for a clicked feature, so he sets the binding context in the geoview_tapped event. https://community.esri.com/thread/190047-popups-in-arcgis-runtime-sdk-for-net#comment-666876 You might also want to check out callouts. Maybe they'll work better for what you need to do: https://github.com/Esri/arcgis-runtime-samples-dotnet/tree/master/src/WPF/ArcGISRuntime.WPF.Viewer/Samples/MapView/ShowCallout I hope that helps, Thad
... View more
07-25-2019
11:26 AM
|
1
|
0
|
1508
|
POST
|
Hi! You can't set the properties of the callout shown using GeoView.ShowCalloutAt. You can, however, create a Callout object, set its display properties, and add it to the map view. Here's an example: // Create a Callout (FrameworkElement), set its content and appearance.
Callout customCallout = new Callout
{
Background = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.CornflowerBlue),
BorderBrush = new System.Windows.Media.SolidColorBrush(System.Windows.Media.Colors.PaleVioletRed),
BorderThickness = new System.Windows.Thickness(5,5,5,3),
Content = "Custom content goes here"
};
// Set the callout location on the display using an attached property on GeoView.
GeoView.SetViewOverlayAnchor(customCallout, mapLocation);
// Add the callout to the map view overlay collection.
MyMapView.Overlays.Items.Add(customCallout); I hope that helps! -Thad
... View more
05-16-2019
11:06 AM
|
1
|
1
|
1579
|
POST
|
We have a sample for v10.2 - https://developers.arcgis.com/net/10-2/sample-code/SwipeMap/ I haven't tried it with v100.x.
... View more
03-29-2019
10:23 AM
|
0
|
2
|
1193
|
POST
|
Hey Murray. I tested your code and saw the same thing. I tried using the following (San Diego) route service, and it worked as expected: Route (NAServer) I think the problem might be with authenticating for the service ("Route_World" is a premium service that you must sign in for). I tried using world routing service in this sample: https://github.com/Esri/arcgis-runtime-samples-dotnet/tree/master/src/WPF/ArcGISRuntime.WPF.Viewer/Samples/Network%20Analysis/FindRoute and after authenticating with my ArcGIS Online account, the route was solved successfully. I'm not sure what may have changed to cause your code to fail. A couple of guesses: perhaps you had authentication "baked in" to your app and those credentials are no longer valid or perhaps your app was originally using a different (openly available) route service. If you need to add authentication to your app, this sample may help (sorry, C# only): https://github.com/Esri/arcgis-runtime-samples-dotnet/tree/10.2.7/src/Desktop/ArcGISRuntimeSamplesDesktop/Samples/Security/OAuthAuthorization
... View more
03-25-2019
12:29 PM
|
0
|
3
|
1732
|
POST
|
My guess would be that something has changed with the service/data that you're using for the route task (or the inputs). If you share a bit of the offending code, I can give it a test on my end.
... View more
03-19-2019
09:24 AM
|
0
|
5
|
1732
|
BLOG
|
Hi Kirk, I'm glad you found it useful! I agree, generating a proxy class from a schema would be the way to go! Unfortunately, there's not a JSON schema available that defines the entire web map specification. The Esri.ArcGISRuntime.Mapping.Map class, of course, essentially serves as a proxy for the web map, allowing you to read and write JSON maps. For use cases like the one described in this blog, however, it's basically a manual process as far as I know. Thad
... View more
03-14-2019
03:50 PM
|
0
|
0
|
1041
|
POST
|
I think you'll have to copy each graphic and add it to the other graphics overlay. Here's how I did it: private void CopyGraphicsButton_Click(object sender, RoutedEventArgs e)
{
GraphicsOverlay go1 = MapView1.GraphicsOverlays.FirstOrDefault();
GraphicsOverlay go2 = MapView2.GraphicsOverlays.FirstOrDefault();
foreach(Graphic g in go1.Graphics)
{
Graphic newGraphic = CopyGraphic(g);
go2.Graphics.Add(newGraphic);
}
}
private Graphic CopyGraphic(Graphic inGraphic)
{
Graphic copyGraphic = new Graphic(inGraphic.Geometry, inGraphic.Attributes, inGraphic.Symbol);
return copyGraphic;
} I hope that helps! Thad
... View more
03-14-2019
01:59 PM
|
1
|
0
|
1394
|
POST
|
Please see the code example in your other question: https://community.esri.com/thread/229025-create-points-at-equal-distance-along-a-polyline#comment-833323 I think this will do the trick.
... View more
02-21-2019
10:24 AM
|
2
|
0
|
1575
|
POST
|
The problem is that your line is measured in degrees of longitude/latitude and the value you're passing in is for meters. The code is reading the distance of "1000.0" as 1000 degrees rather than 1 KM. Try projecting the line to a projected coordinate system for your area (looks like South Africa?). Be sure you know the units for the projected line, it might be feet instead of meters! Here's an updated example that projects the line before processing, and also "unprojects" the result points back to Lat/Long (warning: this code hasn't been tested much 😞 double distance = 0.0;
Polyline projectedLine = (Polyline)GeometryEngine.Project(_originalPolyline, new SpatialReference(102472));
double lineLength = GeometryEngine.LengthGeodetic(projectedLine);
List<MapPoint> pointsOnLine = new List<MapPoint>();
SimpleMarkerSymbol sym = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.X, Color.Yellow, 16);
GraphicsOverlay go = MyMapView.GraphicsOverlays.First();
while (true)
{
distance += 1000.0;
if(distance > lineLength) { break; }
MapPoint pt = GeometryEngine.CreatePointAlong(projectedLine, distance);
MapPoint latLongPoint = (MapPoint)GeometryEngine.Project(pt, SpatialReferences.Wgs84);
pointsOnLine.Add(latLongPoint);
Graphic g = new Graphic(latLongPoint, sym);
go.Graphics.Add(g);
} (Also, check out the "ConvertTo" and "ConvertFrom" methods on the LinearUnits to convert between a variety of units. Works for angles and areas too: Esri.ArcGISRuntime.Geometry.LinearUnits.Kilometers.ConvertFrom(otherUnit, val))
... View more
02-21-2019
10:22 AM
|
3
|
1
|
2125
|
POST
|
Linking to my reply in another thread to show another way to achieve this: https://community.esri.com/message/832713-re-create-points-at-equal-distance-along-a-polyline?commentID=832713#comment-8…
... View more
02-19-2019
03:54 PM
|
0
|
0
|
1179
|
POST
|
Give the code below a try. It increments the distance to create a point along the line. When it reaches the end of the line it stops. It assumes the line is measured in meters, so uses 2000 to represent 2 km along the line. double distance = 0.0;
double lineLength = GeometryEngine.LengthGeodetic(_originalPolyline);
List<MapPoint> pointsOnLine = new List<MapPoint>();
SimpleMarkerSymbol sym = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.X, Color.Yellow, 16);
GraphicsOverlay go = MyMapView.GraphicsOverlays.First();
while (true)
{
distance += 2000.0;
if(distance > lineLength) { break; }
MapPoint pt = GeometryEngine.CreatePointAlong(_originalPolyline, distance);
pointsOnLine.Add(pt);
Graphic g = new Graphic(pt, sym);
go.Graphics.Add(g);
} HTH! Thad
... View more
02-19-2019
03:42 PM
|
0
|
3
|
2125
|
POST
|
Hey Veera - To create points at a specified interval along a polyline: - Start with `GeometryEngine.Densify(inputLine, distance)` to create segments at the desired distance. - Read the output polyline segments (`Parts`) and get the points that define them. Something like this: // Use GeometryEngine.Densify to get a new Polyline split at the interval provided.
// Note: the distance is assumed to be the same units as the input Polyline!
Polyline splitPolyline = (Polyline)GeometryEngine.Densify(originalPolyline, 2000);
// Create a Multipoint object from the points that make up the segments.
Multipoint splitMultipoint = new Multipoint(splitPolyline.Parts.SelectMany(m => m.Points));
// If you need to access individual points, you can get a collection from the Multipoint.
ReadOnlyPointCollection splitPoints = splitMultipoint.Points; There's a sample that illustrates using `Densify` here: Densify and generalize—ArcGIS Runtime SDK for .NET Samples | ArcGIS for Developers Hope that helps!
... View more
02-15-2019
12:51 PM
|
1
|
2
|
1179
|
POST
|
FWIW - A (perhaps) more straightforward workaround is to concatenate all the values you wish to use into a new field and then use the new field for the unique values. This is not ideal, of course, if you have new features and/or edits coming in that require you to keep the field updated. Some details on implementing this technique are described here: Error: Error 00085: Layer uses an unsupported renderer (Feature Service)
... View more
02-15-2019
12:28 PM
|
0
|
0
|
1818
|
POST
|
Arcade expressions are indeed only supported for use in label or rotation expressions. Other label properties (like minimum scale) cannot interpret Arcade. As ArcGIS Pro enables more labeling properties to use expressions, ArcGIS Runtime will add support as well.
... View more
02-14-2019
10:11 AM
|
1
|
3
|
1489
|
Title | Kudos | Posted |
---|---|---|
1 | 03-14-2019 01:59 PM | |
1 | 10-17-2023 12:39 PM | |
1 | 10-30-2023 11:55 AM | |
1 | 10-28-2023 12:47 PM | |
2 | 10-28-2023 11:56 AM |
Online Status |
Offline
|
Date Last Visited |
Friday
|