9

シェープファイルのコンテンツを使用して、緯度/経度で「XAML Map Control」にポリラインを描画したいと考えています。

私は2種類のシェープファイルを持っています:

  • .dbf、.prj、qpj、.shx、および明らかに .shp ファイルを含むもの。
  • .shp ファイルのみの 1 つ

さまざまなライブラリ (Net Topology Suite、現在は DotSpatial) を使用して両方のタイプのファイルを読み取ると、次のような座標 (DotSpatial.Topology.Coordinate) のリストが取得されます。

X   456874.625438354
Y   5145767.7929015327  
  • 緯度/経度形式に変換するにはどうすればよいですか?
  • 現在のフォーマットは何ですか?
  • .shp ファイルに付随するファイルは役に立ちますか?
4

1 に答える 1

10

DotSpatial を使用して緯度経度に再投影できます。シェープファイルを読み込んでいて、.prj ファイルがそこにあるので投影がわかる場合、必要なことは次のとおりです。

        Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp");
        sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);

ただし、.prj ファイルが見つからない場合は、最初に次のように射影を定義する必要があります。

        Shapefile sf = Shapefile.OpenFile("C:\myshapefile.shp");
        sf.Projection = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
        sf.Reproject(DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984);

しかし、たとえばシェープファイルがなく、ある投影から別の投影に一連の座標を再投影したいだけの場合は、再投影ユーティリティを直接使用できます。

        // interleaved x and y values, so like x1, y1, x2, y2 etc.
        double[] xy = new double[]{456874.625438354,5145767.7929015327};
        // z values if any.  Typically this is just 0.
        double[] z = new double[]{0};
        // Source projection information.
        ProjectionInfo source = DotSpatial.Projections.KnownCoordinateSystems.Projected.UtmWgs1984.WGS1984UTMZone32N;
        // Destination projection information.
        ProjectionInfo dest = DotSpatial.Projections.KnownCoordinateSystems.Geographic.World.WGS1984;
        // Call the projection utility.
        DotSpatial.Projections.Reproject.ReprojectPoints(xy, z, source, dest, 0, 1);

この最後のメソッドは、そのような配列を使用して、データ モジュールを直接参照しなくても射影モジュールが機能できるようにします。

于 2014-11-14T00:56:52.880 に答える