SharpMapはまだ維持されていますが、Nugetパッケージは維持されていません。また、パッケージ(2014年)は、現在のナゲットバージョンのすべての依存関係(GeoAPI、ProjNetなど)と互換性がありません。 私がお勧めすることは次のとおりです。
- は
- (アセンブリのほとんどは、W/Oすべての問題、特にメイン1、SharpMapをコンパイル)githubから独自SharpMapアセンブリを構築し、SharpMap nugetを使用していない参照することをアセンブリ(およびその1つだけ)
- 最新のバージョンの依存関係アセンブリは、必要なときに手動で1つずつ参照してください。ここで
最新SharpMapに適応し、あなたのWinFormsコードは、GeoAPIとProjNetです:
public partial class Form1 : Form
{
public Form1()
{
// just add a PictureBox on the Winform.
InitializeComponent();
DrawMap();
}
private void DrawMap()
{
Session.Instance.SetCoordinateSystemServices(
new CoordinateSystemServices(
new CoordinateSystemFactory(),
new CoordinateTransformationFactory(),
SpatialReference.GetAllReferenceSystems()));
var map = new Map(pictureBox1.Size);
map.BackColor = Color.White;
var file = new ShapeFile(@"D:\Downloads\FRA_adm\FRA_adm1.shp", true);
var layer = new VectorLayer("France", file);
map.Layers.Add(layer);
map.ZoomToExtents();
pictureBox1.Image = map.GetMap();
}
}
これは、この表示されます。
見ての通り、マップがおかしいの、もしあなたがフランスの輪郭を知っていれば:-)。
layer.CoordinateTransformation = Wgs84ToGoogle;
...
// Wgs84 to Google Mercator Coordinate Transformation
// this code comes from SharpMap\Examples\WinFormSamples\LayerTools.cs
private ICoordinateTransformation _wgs84ToGoogle;
public ICoordinateTransformation Wgs84ToGoogle
{
get
{
if (_wgs84ToGoogle == null)
{
var csFac = new CoordinateSystemFactory();
var ctFac = new CoordinateTransformationFactory();
var wgs84 = csFac.CreateGeographicCoordinateSystem(
"WGS 84", AngularUnit.Degrees, HorizontalDatum.WGS84, PrimeMeridian.Greenwich,
new AxisInfo("north", AxisOrientationEnum.North), new AxisInfo("east", AxisOrientationEnum.East));
var parameters = new List<ProjectionParameter>();
parameters.Add(new ProjectionParameter("semi_major", 6378137.0));
parameters.Add(new ProjectionParameter("semi_minor", 6378137.0));
parameters.Add(new ProjectionParameter("latitude_of_origin", 0.0));
parameters.Add(new ProjectionParameter("central_meridian", 0.0));
parameters.Add(new ProjectionParameter("scale_factor", 1.0));
parameters.Add(new ProjectionParameter("false_easting", 0.0));
parameters.Add(new ProjectionParameter("false_northing", 0.0));
var projection = csFac.CreateProjection("Google Mercator", "mercator_1sp", parameters);
var epsg900913 = csFac.CreateProjectedCoordinateSystem(
"Google Mercator", wgs84, projection, LinearUnit.Metre, new AxisInfo("East", AxisOrientationEnum.East),
new AxisInfo("North", AxisOrientationEnum.North));
((CoordinateSystem)epsg900913).DefaultEnvelope = new[] { -20037508.342789, -20037508.342789, 20037508.342789, 20037508.342789 };
_wgs84ToGoogle = ctFac.CreateFromCoordinateSystems(wgs84, epsg900913);
}
return _wgs84ToGoogle;
}
}
そして、あなたが今、これを取得します:あなたが正しい投影したい場合は、レイヤーにこのコードを追加する必要が
SharpMapは少し肥大化したかもしれないが、まだそれ貴重なコードを提供し、サンプルが機能します。ドキュメントは見つけにくいので、使用するとソースを掘り下げる必要があります。
また、SharpMapが使用するGDI +は、サーバー側でMicrosoftによって正式にサポートされていないことを知りたいと思います。それがうまくいかないことを意味するわけではありません、自分で自分自身で試してみる必要があります。
@OndrejSvejdarライブラリ関連ではありません。たぶん、誰かが私のSharpMapコードが動作していない理由を知っているだろう – Robert