1
IPoint pPoint = new ESRI.ArcGIS.Geometry.PointClass();
pPoint.PutCoords(-92.96000, 44.9227); //This should be near Minneapolis
mapControl.CenterAt(pPoint); //mapControl is a AxMapControl

このコードを実行すると、ポイントは常にカンザスの近くになります。lat / longsを正しく機能するPointClassに変換するのを手伝ってくれる人はいますか?

VS2010 ArcEngine 10 C#を使用しています

4

2 に答える 2

3

これには、あなたが現在与えているものよりも多くのものがあります。緯度/経度ポイントとマップの両方に、特定の空間参照があります。それらが一致しない場合、ポイントが予期しない方法でプロットされる可能性があります。

表示しているポイントは、標準の緯度/経度ポイントです。おそらく Nad83 (北米) または WGS84 (世界) です。これらは、地理座標系を使用した空間参照です。投影座標系に点をプロットしようとしている可能性があります。

MapControl の空間参照を、プロットしようとしているポイントのタイプと一致させる必要があります。

あなたのマップの空間参照がわからないので、緯度/経度を MapControl の現在の空間参照に変換する例のみを示します。

ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass();

IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
ISpatialReference sr1 = gcs;

IPoint point = new PointClass() as IPoint;
point.PutCoords(-92.96000, 44.9227);

IGeometry geometryShape;
geometryShape = point;
geometryShape.SpatialReference = sr1;

geometryShape.Project(mapControl.SpatialReference);

mapControl.DrawShape(geometryShape);

これにより、ポイントが取得され、MapControls の現在の空間参照に投影され、ポイントがプロットされます。

幸運を。

于 2010-08-24T21:40:20.980 に答える
0

上記のポスターは役に立ちましたが、彼の解決策は私にとってはうまくいきませんでした。

mapControl.MapScale = mapControl.MapScale / 2; //for zooming
ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass(); //move up top later 
IGeographicCoordinateSystem gcs = srFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984); //World lat / long format
ISpatialReference sr1 = gcs;
IPoint point = new PointClass(); 
point.SpatialReference = gcs;
point.PutCoords(-92.96000, 44.9227);
point.Project(mapControl.SpatialReference);
mapControl.CenterAt(point);
于 2010-08-25T15:24:06.767 に答える