1

シェープファイルをアップロードしてマップに表示できる機能を Silverlight ArcGIS アプリケーションに追加しようとしています。シェープファイルをアップロードするたびに、正しく表示されますが、テキサスにあるはずの形状がサハラに描かれているなど、間違った場所に表示されます。

問題は、マップが各シェープファイルとは異なる座標系を使用していることだと確信していますが、シェープファイルの座標を正常に変換できるリソースを見つけることができませんでした。WebMercator.FromGeographicは一部のシェープファイルで機能しますが、他のシェープファイルではアプリケーションがクラッシュします。

GeometryService を使用してみましたが、形状の SpatialReferences を変更しようとしましたが、どちらも目立った効果はありませんでした。

FromGeographic で機能しなかったファイルの PRJ は次のようになります。

PROJCS["ベーシック アルバース WGS84",GEOGCS["D_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137.0,298.257223563]],PRIMEM["グリニッジ",0.0],UNIT["度",0.0174532923]19943 ,PROJECTION["アルバース"],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["原点の緯度",23.0],UNIT["米国フィート",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);
4

1 に答える 1