我正在尝试向 Silverlight ArcGIS 应用程序添加功能,该应用程序允许将 shapefile 上传并显示在地图上。每当我上传 shapefile 时,它都会正确显示,但在错误的位置,例如应该在德克萨斯州绘制的形状在撒哈拉沙漠中绘制。
我很确定问题在于我们的地图使用的坐标系与每个 shapefile 不同,但我无法找到任何可以成功转换 shapefile 坐标的资源。WebMercator.FromGeographic适用于某些 shapefile,但会导致应用程序在其他文件中崩溃。
我尝试使用 GeometryService 并尝试更改形状的 SpatialReferences,但都没有任何明显的效果。
不适用于 FromGeographic 的文件的 PRJ 如下所示:
PROJCS["Basic Albers WGS84",GEOGCS["D_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.013453292519]9 ,PROJECTION["Albers"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-96.0],PARAMETER["Standard_Parallel_1",45.5],PARAMETER["Standard_Parallel_2" ,29.5],PARAMETER["Latitude_Of_Origin",23.0],UNIT["Foot_US",0.3048006096012192]]
我该从哪里着手解决这个问题?
编辑:
以下是如何创建多边形图形的代码:
ESRI.ArcGIS.Client.Geometry.Polygon geo = new ESRI.ArcGIS.Client.Geometry.Polygon();
ObservableCollection<ESRI.ArcGIS.Client.Geometry.PointCollection> paths = new ObservableCollection<ESRI.ArcGIS.Client.Geometry.PointCollection>();
ESRI.ArcGIS.Client.Geometry.PointCollection pcol = new ESRI.ArcGIS.Client.Geometry.PointCollection();
foreach (System.Windows.Point p in this.points)
{
MapPoint mp = new MapPoint();
mp.X = p.X;
mp.Y = p.Y;
pcol.Add(mp);
}
paths.Add(pcol);
geo.Rings = paths;
// Random WKID to test with.
geo.SpatialReference = new ESRI.ArcGIS.Client.Geometry.SpatialReference(3174);
ESRI.ArcGIS.Client.Graphic gr = new ESRI.ArcGIS.Client.Graphic()
{
Geometry = geo,
Symbol = window.Get(symbolPolygon) as ESRI.ArcGIS.Client.Symbols.Symbol,
};
return gr;
GeometryService 的使用方式如下:
GraphicsLayer graphicsLayer = new GraphicsLayer();
foreach (ShapefileRecord r in sh.Records)
{
Graphic g = r.ToGraphic(this);
graphicsLayer.Graphics.Add(g);
}
geoServ.ProjectAsync(graphicsLayer.Graphics.ToList(), new ESRI.ArcGIS.Client.Geometry.SpatialReference(102100));
Map.Layers.Add(graphicsLayer);