2013-03-11 70 views
0

我是新来的Windows Phone 7开发人员。 我最近下载并试用了Arcgis示例地图,它在更改TiledMapserverlayer的URL后给我这个错误。空间参考

Invalid spatial reference. Spatial reference must match map's spatial reference. Clear the map layers collection prior to changing the spatial reference. 

的.xaml

  <esri:GraphicsLayer ID="MyGraphicsLayer"> 
       <esri:GraphicsLayer.Graphics> 
        <esri:Graphic Symbol="{StaticResource RedMarkerSymbol}"> 
         <esriGeometry:MapPoint X="11560518.5450925" Y="153495.271364825"> 


         </esriGeometry:MapPoint> 
        </esri:Graphic> 
       </esri:GraphicsLayer.Graphics> 
      </esri:GraphicsLayer> 

      <esri:ArcGISTiledMapServiceLayer ID="MyLayer" 
       Url="http://www.onemap.sg/ArcGIS/rest/services/basemap/MapServer" /> 
     </esri:Map> 

的.cs

public partial class Map : PhoneApplicationPage 
{ 
    GeoCoordinateWatcher _watcher; 
    Graphic _graphicLocation; 
    private static ESRI.ArcGIS.Client.Projection.WebMercator mercator = 
     new ESRI.ArcGIS.Client.Projection.WebMercator(); 
    bool initialLoad = true; 

    public Map() 
    { 
     InitializeComponent(); 

     _graphicLocation = (MyMap.Layers["MyGraphicsLayer"] as GraphicsLayer).Graphics[0]; 

     _watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.High); 
     _watcher.MovementThreshold = 20; 

     _watcher.StatusChanged += watcher_StatusChanged; 
     _watcher.PositionChanged += watcher_PositionChanged; 

     // Start data acquisition 
     _watcher.Start(); 
    } 

    void watcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs e) 
    { 
     switch (e.Status) 
     { 
      case GeoPositionStatus.Disabled: 
       // The location service is disabled or unsupported. 
       // Alert the user 
       StatusTextBlock.Text = "Location is unsupported on this device"; 
       break; 
      case GeoPositionStatus.Initializing: 
       // The location service is initializing. 
       // Disable the Start Location button 
       StatusTextBlock.Text = "Initializing location service"; 
       break; 
      case GeoPositionStatus.NoData: 
       // The location service is working, but it cannot get location data 
       // Alert the user and enable the Stop Location button 
       StatusTextBlock.Text = "Data unavailable"; 
       break; 
      case GeoPositionStatus.Ready: 
       // The location service is working and is receiving location data 
       // Show the current position and enable the Stop Location button 
       StatusTextBlock.Text = "Ready - retrieving data"; 
       break; 
     } 
    } 

    void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e) 
    { 
     _graphicLocation.Geometry = mercator.FromGeographic(new MapPoint(e.Position.Location.Longitude, e.Position.Location.Latitude)); 

     // Use horizontal accuracy (returned in meters) to zoom to the location 
     if (initialLoad) 
     { 
      Envelope rect = new Envelope(
       (_graphicLocation.Geometry as MapPoint).X - (e.Position.Location.HorizontalAccuracy/2), 
       (_graphicLocation.Geometry as MapPoint).Y - (e.Position.Location.HorizontalAccuracy/2), 
       (_graphicLocation.Geometry as MapPoint).X + (e.Position.Location.HorizontalAccuracy/2), 
       (_graphicLocation.Geometry as MapPoint).Y + (e.Position.Location.HorizontalAccuracy/2)); 

      MyMap.ZoomTo(rect.Expand(20)); 

      initialLoad = false; 
     } 
     else 
     { 
      MyMap.PanTo(_graphicLocation.Geometry); 
     } 
    } 

    private void PhoneApplicationPage_Unloaded(object sender, RoutedEventArgs e) 
    { 
     _watcher.Stop(); 
    }} 

我已经尝试了许多解决方案,例如在WKID增加,但它不工作。 我一直有这个错误很长。有人可以帮助! 谢谢

+0

您添加到地图的图形必须与地图具有相同的空间参考。如果您更改了网址,您是否更改为具有不同空间参考的地图?这可能导致了错误。一种可能的解决方案是将图形的坐标重新映射到地图的空间参考。 – progrmr 2013-03-11 17:31:50

回答

1

一般来说,你不应该混合SpatialReferences。调用Map.Pan,使用与Map的SRef不同的SRef将变化的Extent放大到未投影的几何体将导致引发异常。当GPS位置发生变化时,您正试图移动导致异常的差异SRef的Map。如果您首先投射GPS点,则不会出现该问题。为此使用GeometryService。顺便说一下,在他们的工具包中查看API的GpsLayer,因为它可以在上面手动保存大量的代码。另外设置一个ProjectionService,事情应该适合你。

欢呼:)

+0

谢谢,谢谢,谢谢! – Zen 2013-04-01 09:35:42