3.4 Open online map

This commit is contained in:
PeterZhong 2024-10-12 10:28:59 +08:00
parent cc948d9ce6
commit cb87a4a08d
3 changed files with 93 additions and 2 deletions

View File

@ -15,8 +15,12 @@
<MenuItem x:Name="Menu_File" Header="文件">
<MenuItem x:Name="Menu_OpenShp" Header="打开Shp" Click="Menu_OpenShp_Click"/>
<MenuItem x:Name="Menu_OpenGeodatabase" Header="打开Geodatabase" Click="Menu_OpenGeodatabase_Click"/>
<MenuItem x:Name="Menu_OpenOnlineMap" Header="打开在线地图" Click="Menu_OpenOnlineMap_OnClick"></MenuItem>
</MenuItem>
<MenuItem x:Name="Menu_View" Header="视图">
<MenuItem x:Name="Menu_Zoom_in" Header="放大" Click="Menu_Zoom_in_OnClick"></MenuItem>
<MenuItem x:Name="Menu_Zoom_out" Header="缩小" Click="Menu_Zoom_out_OnClick"></MenuItem>
</MenuItem>
<MenuItem x:Name="Menu_View" Header="视图"/>
</Menu>
<esri:MapView x:Name="MainMapView" Map="{Binding Map, Source={StaticResource MapViewModel}}" Margin="0,19,0,0" ViewpointChanged="MainMapView_OnViewpointChanged"/>
<Border BorderBrush="#FF8B1D76" BorderThickness="2,2,2,2" HorizontalAlignment="Right" Height="180" Width="202" VerticalAlignment="Top" IsEnabled="False">

View File

@ -16,7 +16,9 @@ using System.Windows.Navigation;
using System.Windows.Shapes;
using Esri.ArcGISRuntime.Geometry;
using Esri.ArcGISRuntime.Symbology;
using Esri.ArcGISRuntime.UI;
using Color = System.Drawing.Color;
using Polygon = Esri.ArcGISRuntime.Geometry.Polygon;
namespace GisDevelop_Exp
{
@ -26,6 +28,10 @@ namespace GisDevelop_Exp
public partial class MainWindow : Window
{
private FeatureLayer _featureLayer;
private string _statesUrl =
"https://services.arcgis.com/jIL9msH9OI208GCb/arcgis/rest/services/USA_Daytime_Population_2016/FeatureServer/0";
private ServiceFeatureTable _featureTable;
public MainWindow()
{
InitializeComponent();
@ -106,5 +112,87 @@ namespace GisDevelop_Exp
graphicOverlay.Graphics.Add(envGraphic);
EagleMapView.GraphicsOverlays.Add(graphicOverlay);
}
private double GetDistance(MapPoint p1, MapPoint p2)
{
double dx = p2.X - p1.X;
double dy = p2.Y - p1.Y;
return Math.Sqrt(dx * dx + dy * dy);
}
private double GetAngle(MapPoint p1, MapPoint p2)
{
double dx = p2.X - p1.X;
double dy = p2.Y - p1.Y;
return Math.Atan2(dy, dx) * 180 / Math.PI;
}
private void Menu_Zoom_in_OnClick(object sender, RoutedEventArgs e)
{
try
{
Viewpoint initViewpoint = MainMapView.GetCurrentViewpoint(ViewpointType.CenterAndScale);
MainMapView.SetViewpointScaleAsync(initViewpoint.TargetScale / 2.0);
}
catch (Exception exception)
{
Console.WriteLine(exception);
throw;
}
}
private void Menu_Zoom_out_OnClick(object sender, RoutedEventArgs e)
{
try
{
Viewpoint initViewpoint = MainMapView.GetCurrentViewpoint(ViewpointType.CenterAndScale);
MainMapView.SetViewpointScaleAsync(initViewpoint.TargetScale * 2.0);
}
catch (Exception exception)
{
Console.WriteLine(exception);
throw;
}
}
private void Menu_OpenOnlineMap_OnClick(object sender, RoutedEventArgs e)
{
OpenOnlineData();
}
private async void OpenOnlineData()
{
Map pMap = new Map();
pMap.Basemap=new Basemap(BasemapStyle.ArcGISTopographicBase);
_featureTable = new ServiceFeatureTable(new Uri(_statesUrl));
_featureLayer = new FeatureLayer(_featureTable);
_featureLayer.MaxScale = 1.0;
await _featureLayer.LoadAsync();
Viewpoint pVP = new Viewpoint(_featureLayer.FullExtent);
pMap.InitialViewpoint = pVP;
SimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, Color.Blue, 5.0);
SimpleLineSymbol pLineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, Color.Red, 5.0);
SimpleFillSymbol pFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Solid, Color.Pink, pLineSymbol);
SimpleRenderer pRenderer = new SimpleRenderer();
if (_featureLayer.FeatureTable.GeometryType == GeometryType.Polygon)
{
pRenderer.Symbol = pFillSymbol;
}else if (_featureLayer.FeatureTable.GeometryType == GeometryType.Point)
{
pRenderer.Symbol = pMarkerSymbol;
}else if (_featureLayer.FeatureTable.GeometryType == GeometryType.Polyline)
{
pRenderer.Symbol = pLineSymbol;
}
else
{
pRenderer.Symbol = pFillSymbol;
}
_featureLayer.Renderer = pRenderer;
pMap.OperationalLayers.Add(_featureLayer);
MainMapView.Map = pMap;
MainMapView.SelectionProperties.Color = Color.Cyan;
}
}
}

View File

@ -26,7 +26,6 @@ namespace GisDevelop_Exp
_map = new Map(SpatialReferences.WebMercator)
{
InitialViewpoint = new Viewpoint(new Envelope(-180, -85, 180, 85, SpatialReferences.Wgs84)),
#warning To use ArcGIS location services (including basemaps) specify your API Key access token or require the user to sign in using a valid ArcGIS account.
Basemap = new Basemap(BasemapStyle.ArcGISTopographic)
};
}