About the Locate coordinates Sample
[C#]
LocateCoordinates.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.esriSystem;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.DefenseSolutions;
namespace LocateCoordinates
{
public partial class LocateCoordinates : Form
{
public LocateCoordinates()
{
InitializeComponent();
// Add the world continents layer to the map for reference
MapControl1.AddLayerFromFile(GetSdkDataPath() + @"World\Continents.lyr");
}
private void MapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
{
// clears existing point
MapControl1.Refresh();
}
private void MapControl1_OnMouseUp(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseUpEvent e)
{
ConvertCoords(e.mapX, e.mapY);
DrawPoint(e.mapX, e.mapY);
}
private void DrawPoint(double mapX, double mapY)
{
try
{
ESRI.ArcGIS.Display.IMarkerSymbol pSymbol;
ESRI.ArcGIS.Display.IRgbColor pRGB;
ESRI.ArcGIS.Geometry.IPoint pPoint;
// Create a point geometry for the markersymbol
pPoint = new ESRI.ArcGIS.Geometry.Point();
pPoint.X = (double) mapX;
pPoint.Y = (double) mapY;
// Create a color for the markersymbol
pRGB = new ESRI.ArcGIS.Display.RgbColor();
pRGB.Red = 0;
pRGB.Blue = 0;
pRGB.Green = 0;
// Create the markersymbol
pSymbol = new ESRI.ArcGIS.Display.SimpleMarkerSymbol();
pSymbol.Color = pRGB;
pSymbol.Size = 10;
object objSymbol = (object)pSymbol;
// Add the markersymbol to the map at the clicked location
MapControl1.DrawShape((ESRI.ArcGIS.Geometry.IGeometry) pPoint,ref objSymbol);
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message,"ERROR");
}
return;
}
private void ConvertCoords(double mapX, double mapY)
{
try
{
ESRI.ArcGIS.DefenseSolutions.ICoordinateTool pCoordTool;
ESRI.ArcGIS.Geometry.IPoint vValue;
int iFormat;
object vFromDatum;
object vToDatum;
ESRI.ArcGIS.Geometry.IPoint pWGSPoint;
ESRI.ArcGIS.Geometry.IPoint pOutPoint;
string sDMS = "";
string sUTM = "";
string sMGRS = "";
// Set the parameters to be used in the conversion.
// The parameters are as follows:
// vValue: The input coordinates
// iFormat: The format of the input coordinates, where 1 = IPoint (decimal degrees)
// 2 = DMS
// 3 = UTM
// 4 = MGRS
// vFromDatum: The datum of the input coordinates
// vToDatum: The datum of the output coordinates
// pWGSPoint: The output point with x/y coordinates in WGS1984 datum
// pOutPoint: The output point with x/y coordinates in the output datum
// sDMS: The output DMS coordinates
// sUTM: The output UTM coordinates
// sMGRS: The output MGRS coordinates
vValue = new ESRI.ArcGIS.Geometry.Point();
vValue.PutCoords(mapX, mapY);
iFormat = 1;
vFromDatum = 0; // => "WGS 1984 (WGS84)"
vToDatum = 0; // => "WGS 1984 (WGS84)"
pWGSPoint = new ESRI.ArcGIS.Geometry.Point();
pOutPoint = new ESRI.ArcGIS.Geometry.Point();
pCoordTool = new ESRI.ArcGIS.DefenseSolutions.CoordinateToolClass();
pCoordTool.ConvertLocation(vValue, iFormat, vFromDatum, vToDatum,
ref pWGSPoint, ref pOutPoint,ref sDMS,ref sUTM,ref sMGRS);
// Populate the coordinate text boxes with the coordinates calculated
// by the ConvertLocation method.
txtX.Text = pOutPoint.X.ToString();
txtY.Text = pOutPoint.Y.ToString();
txtDMS.Text = sDMS;
txtUTM.Text = sUTM;
txtMGRS.Text = sMGRS;
}
catch (Exception e)
{
System.Windows.Forms.MessageBox.Show(e.Message,"ERROR");
}
return;
}
private string GetSdkDataPath()
{
//get the ArcGIS path from the registry
Microsoft.Win32.RegistryKey key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\ESRI\ArcGIS_SXS_SDK");
string path = Convert.ToString(key.GetValue("InstallDir"));
//set the of the logo
string str = System.IO.Path.Combine(path, @"Samples\data\");
if (!System.IO.Directory.Exists(str))
{
MessageBox.Show("Path :" + str + " does not exist!");
return string.Empty;
}
return str;
}
}
}
[Visual Basic .NET]
LocateCoordinates.vb
Public Class LocateCoordinates
Private m_pAOInitialize As ESRI.ArcGIS.esriSystem.IAoInitialize
Public Sub New()
ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engine)
' This call is required by the Windows Form Designer.
InitializeComponent()
'Get License for controls
m_pAOInitialize = New ESRI.ArcGIS.esriSystem.AoInitialize
Dim status As ESRI.ArcGIS.esriSystem.esriLicenseStatus
status = m_pAOInitialize.IsProductCodeAvailable(ESRI.ArcGIS.esriSystem.esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB)
If (status <> ESRI.ArcGIS.esriSystem.esriLicenseStatus.esriLicenseAvailable) Then
MsgBox("ERROR: license not available." & vbCrLf & status)
Me.Finalize()
Else
status = m_pAOInitialize.Initialize(ESRI.ArcGIS.esriSystem.esriLicenseProductCode.esriLicenseProductCodeEngineGeoDB)
End If
'Add the world continents layer to the map for reference
MapControl1.AddLayerFromFile(GetSdkDataPath() + "World\Continents.lyr")
End Sub
Private Sub MapControl1_OnMouseDown(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent) Handles MapControl1.OnMouseDown
'clears existing point
MapControl1.Refresh()
End Sub
Private Sub MapControl1_OnMouseUp(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseUpEvent) Handles MapControl1.OnMouseUp
Call ConvertCoords(e.mapX, e.mapY)
Call DrawPoint(e.mapX, e.mapY)
End Sub
Private Sub DrawPoint(ByVal mapX, ByVal mapY)
On Error GoTo EH
Dim pSymbol As ESRI.ArcGIS.Display.IMarkerSymbol
Dim pRGB As ESRI.ArcGIS.Display.IRgbColor
Dim pPoint As ESRI.ArcGIS.Geometry.IPoint
'Create a point geometry for the markersymbol
pPoint = New ESRI.ArcGIS.Geometry.Point
pPoint.x = mapX
pPoint.y = mapY
'Create a color for the markersymbol
pRGB = New ESRI.ArcGIS.Display.RgbColor
With pRGB
.Red = 0
.Blue = 0
.Green = 0
End With
'Create the markersymbol
pSymbol = New ESRI.ArcGIS.Display.SimpleMarkerSymbol
With pSymbol
.Color = pRGB
.Size = 10
End With
'Add the markersymbol to the map at the clicked location
MapControl1.DrawShape(pPoint, pSymbol)
Exit Sub
EH:
MsgBox(Err.Number & " " & Err.Description, vbCritical, "Error")
End Sub
Private Sub ConvertCoords(ByVal mapX, ByVal mapY)
On Error GoTo EH
Dim pCoordTool As ESRI.ArcGIS.DefenseSolutions.ICoordinateTool
Dim vValue As ESRI.ArcGIS.Geometry.IPoint
Dim iFormat As Integer
Dim vFromDatum As Object
Dim vToDatum As Object
Dim pWGSPoint As ESRI.ArcGIS.Geometry.IPoint
Dim pOutPoint As ESRI.ArcGIS.Geometry.IPoint
Dim sDMS As String : sDMS = ""
Dim sUTM As String : sUTM = ""
Dim sMGRS As String : sMGRS = ""
'Set the parameters to be used in the conversion.
'The parameters are as follows:
'vValue: The input coordinates
'iFormat: The format of the input coordinates, where 1 = IPoint (decimal degrees)
' 2 = DMS
' 3 = UTM
' 4 = MGRS
'vFromDatum: The datum of the input coordinates
'vToDatum: The datum of the output coordinates
'pWGSPoint: The output point with x/y coordinates in WGS1984 datum
'pOutPoint: The output point with x/y coordinates in the output datum
'sDMS: The output DMS coordinates
'sUTM: The output UTM coordinates
'sMGRS: The output MGRS coordinates
vValue = New ESRI.ArcGIS.Geometry.Point
vValue.PutCoords(mapX, mapY)
iFormat = 1
vFromDatum = 0 ' => "WGS 1984 (WGS84)"
vToDatum = 0 ' => "WGS 1984 (WGS84)"
pWGSPoint = New ESRI.ArcGIS.Geometry.Point
pOutPoint = New ESRI.ArcGIS.Geometry.Point
pCoordTool = New ESRI.ArcGIS.DefenseSolutions.CoordinateTool
pCoordTool.ConvertLocation(vValue, iFormat, vFromDatum, vToDatum, _
pWGSPoint, pOutPoint, sDMS, sUTM, sMGRS)
'Populate the coordinate text boxes with the coordinates calculated
'by the ConvertLocation method.
txtX.Text = CStr(pOutPoint.x)
txtY.Text = CStr(pOutPoint.y)
txtDMS.Text = sDMS
txtUTM.Text = sUTM
txtMGRS.Text = sMGRS
Exit Sub
EH:
MsgBox(Err.Number & " " & Err.Description, vbCritical, "Error")
End Sub
Private Function GetSdkDataPath() As String
'get the ArcGIS path from the registry
Dim key As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\ESRI\ArcGIS_SXS_SDK")
Dim path As String = Convert.ToString(key.GetValue("InstallDir"))
'set the of the logo
Dim str As String = System.IO.Path.Combine(path, "Samples\data\")
If (Not System.IO.Directory.Exists(str)) Then
MessageBox.Show("Path :" & str & " does not exist!")
Return String.Empty
End If
Return str
End Function
End Class