在开始开发之前,需要先准备一下操作系统环境及程序
Microsoft Windows 8 x64 (必须安装win8 64位操作系统) |
Windows Phone 8开发SDK |
Visual Studio 2012 IDE |
申请一个wp8的开发者账号 |
启动VS2012,新建一个C#的Windows Phone 应用程序
工程创建完毕后,在工具箱空白处点击鼠标右键,选“选择项…”。并选取SDK目录下的eHotGIS.dll
eHotGIS For Windows Phone 8 运行时需要动态链接文件:eHotGISRT.dll、eMyGIS.dll。因此要在VS2012里面做好设置,使其能正确部署到设备中。把上述文件添加到工程中,然后设置文件的属性。
将工具箱上的eMyMapWnd控件拖动到窗体上即可进行下一步的开发
在MainPage.xaml文件中,给上一步添加的空间起一个名字。例如叫“HotMap1”
<eHotGIS:eMyMapWnd x:Name="HotMap1" HorizontalAlignment="Left" Height="300" Margin="4,10,0,0" VerticalAlignment="Top" Width="460" Grid.ColumnSpan="1"/>
用户无需编写任何代码 就可以通过两个手指操作地图窗口完成地图放大、缩小的操作1 打开地图
StorageFolder localFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
int ret = HotMap1.Open(localFolder.Path + @"\130406002007.map");
switch (ret)
{
case 0:
//地图文件打开失败
break;
case 1:
eMyMapWnd.Redraw();
eMyMapWnd.Repaint();
break;
case -2:
//没有发现hotkey.lic文件
break;
case -3:
//找到hotkey.lic文件并且合法,但是文件没有本机密钥信息
break;
case -4:
//找到hotkey.lic文件但是文件不合法
break;
}
2 关闭地图HotMap1.Close();
3 返回值Open函数返回值及其含义:
返回值 | 含义 |
-4 | 找到hotkey.lic文件但是文件不合法 |
-3 | 找到hotkey.lic文件并且合法,但是文件没有本机密钥信息 |
-2 | 没有发现hotkey.lic文件 |
-1 | 保留未使用。 |
0 | 地图文件打开失败。 |
1 | 成功。 |
HotMap1.ZoomByRatio(1.1);
HotMap1.Redraw();
HotMap1.Repaint();
// 放大工具
HotMap1.Action = eMyMapWnd.ToolType.ZoomIn;
5. 缩小HotMap1.ZoomByRatio(1/1.1);
HotMap1.Redraw();
HotMap1.Repaint();
// 缩小工具
HotMap1.Action = eMyMapWnd.ToolType.ZoomOut;
6. 补偿漫游
HotMap1.Action = eMyMapWnd.ToolType.Pan2;
7. 平滑漫游HotMap1.Action = eMyMapWnd.ToolType.Pan;
// x轴方向漫游10个像素
HotMap1.Pan(10,0);
HotMap1.Redraw();
HotMap1.Repaint();
8. 旋转地图可以0-360°旋转,如图7所示。
HotMap1.GetMap().DrawParam.SetRotateAngle(HotMap1.GetMap().DrawParam.GetRotateAngle() + 30);
HotMap1.Redraw();
HotMap1.Repaint();
9. 全图显示HotMap1.ViewEntire();
HotMap1.Redraw();
HotMap1.Repaint();
10. 屏幕坐标转换成地理坐标eMyPoint2D mapPoint = HotMap1.GetMap().DrawParam.DevToMap(100, 100);
11. 地理坐标转换成屏幕坐标eMyPoint2D mapPoint = new eMyPoint2D(120.464226, 36.095176);
eMyPoint devPoint = HotMap1.GetMap().DrawParam.MapToDev(mapPoint);
12. 中心点定位
HotMap1.GetMap().DrawParam.SetCenter(120.464226, 36.095176);
HotMap1.Redraw();
HotMap1.Repaint();
13. 中心点和视野定位HotMap1.GetMap().DrawParam.ZoomTo(120.464226, 36.095176, 0.0002);
HotMap1.Redraw();
HotMap1.Repaint();
14. 长度
HotMap1.Action = eMyMapWnd.ToolType.MeasureLen;
15. 面积HotMap1.Action = eMyMapWnd.ToolType.MeasureArea;
16. OnMeasureLenTracking 事件测量过程中国,触发OnMeasureLenTracking事件。参数dCurrentLength是当前测量累加值。
void HotMap1_OnMeasureLenTracking(double dCurrentLength)
{
}
17. OnMeasureLenTracked 事件测量结束后,触发OnMeasureLenTracked事件。参数dTotalLength就是测量结果。
void HotMap1_OnMeasureLenTracked(double dTotalLength)
{
}
18. OnMeasureAreaTracking 事件测量过程中国,触发OnMeasureAreaTracking事件。参数dCurrenArea是当前测量面积累加值。
void HotMap1_OnMeasureAreaTracking(double dCurrentArea)
{
}
19. OnMeasureAreaTracked 事件测量结束后,触发OnMeasureAreaTracked事件。参数dTotalArea就是测量结果。
void HotMap1_OnMeasureAreaTracked(double dTotalArea)
{
}
20. OnGeometrySelected 事件选取几何对象后,会触发OnGeometrySelected事件。用户可以在OnGeometrySelected事件里面编写代码来获取选取几何对象的属性信息。
void HotMap1_OnGeometrySelected(int count)
{
for (int i=0;i<count;i++)
{
eMyResultSet rs = HotMap1.GetMap().Selection().GetAt(i);
rs.Reset();
while (rs.HasNext())
{
int id = rs.GetID();
string s = rs.GetString(0);
eMyGeometry geometry = rs.GetGeometry();
}
}
}
21. 点选HotMap1.Action = eMyMapWnd.ToolType.PointSel;
22. 矩形选HotMap1.Action = eMyMapWnd.ToolType.RectSel;
23. 多边形选HotMap1.Action = eMyMapWnd.ToolType.PolygonSel;
24. 圆形选HotMap1.Action = eMyMapWnd.ToolType.CircleSel;
25. 添加点
eMyGeometry geom = new eMyGeometry(1, 1);
geom.SetPointAt(0, new eMyPoint2D(120.464226, 36.095176));
eMyStyle style = new eMyStyle();
style.BmpIndex = 2;
eMyTrackingLayer trackingLayer = HotMap1.GetMap().TrackingLayer();
trackingLayer.AddEvent(geom, eMyGeometry.GeoType.Point, style, "point", 0);
trackingLayer.Visible = true;
HotMap1.Repaint();
26. 添加线eMyGeometry geom = new eMyGeometry(3, 1);
geom.SetPointAt(0, new eMyPoint2D(120.464226, 36.095176));
geom.SetPointAt(1, new eMyPoint2D(120.460029, 36.0968));
geom.SetPointAt(2, new eMyPoint2D(120.459392, 36.09294));
eMyStyle style = new eMyStyle();
eMyTrackingLayer trackingLayer = HotMap1.GetMap().TrackingLayer();
trackingLayer.AddEvent(geom, eMyGeometry.GeoType.Line, style, "line", 0);
trackingLayer.Visible = true;
HotMap1.Repaint();
27. 添加面eMyGeometry geom = new eMyGeometry(4,1);
geom.SetPointAt(0, new eMyPoint2D(120.464226, 36.095176));
geom.SetPointAt(1, new eMyPoint2D(120.460029, 36.0968));
geom.SetPointAt(2, new eMyPoint2D(120.459392, 36.09294));
geom.SetPointAt(3, new eMyPoint2D(120.464226, 36.095176));
eMyStyle style = new eMyStyle();
eMyTrackingLayer trackingLayer = HotMap1.GetMap().TrackingLayer();
trackingLayer.AddEvent(geom, eMyGeometry.GeoType.Polygon, style, "a", 0);
trackingLayer.Visible = true;
HotMap1.Repaint();
28. 清空eMyTrackingLayer trackingLayer = HotMap1.GetMap().TrackingLayer();
trackingLayer.ClearEvents();
HotMap1.Repaint();
29. 可见性eMyTrackingLayer trackingLayer = HotMap1.GetMap().TrackingLayer();
trackingLayer.Visible = true;
30. 点查询
eMyPoint2D pt = new eMyPoint2D(120.464226, 36.095176);
eMyResultSet rs = HotMap1.GetMap().GetLayerAt(0).QueryByPoint(pt, 8);
rs.Reset();
String s;
while (rs.HasNext())
{
s = rs.GetString(0);
}
31. 矩形查询eMyRect2D bound = new eMyRect2D(120.4607,36.0950,36.1024,120.4704);
eMyResultSet rs = HotMap1.GetMap().GetLayerAt(0).QueryWithBounds(bound);
rs.Reset();
String s;
while (rs.HasNext())
{
s = rs.GetString(0);
}
32. 多边形查询eMyPoint2D pt1 = new eMyPoint2D(120.452521,36.087101);
eMyPoint2D pt2 = new eMyPoint2D(120.460293,36.097568);
eMyPoint2D pt3 = new eMyPoint2D(120.476052,36.093521);
eMyGeometry geom = new eMyGeometry(4, 1);
geom.SetPointAt(0, pt1);
geom.SetPointAt(1, pt2);
geom.SetPointAt(2, pt3);
geom.SetPointAt(3, pt1);
eMyResultSet rs = HotMap1.GetMap().GetLayerAt(0).QueryByPolygon(geom);
rs.Reset();
String s = "";
while (rs.HasNext())
{
s += rs.GetString(0) + "|";
}
MessageBox.Show(s);
33. SQL 查询// 在index=0的图层中查询字段名称为“酒店”的记录,并且高亮显示出来
eMyQueryDefn query = new eMyQueryDefn();
//query.WhereClause = "名称 like '%店%'";
query.WhereClause = "名称 like '%酒店%'";
eMyResultSet rs = HotMap1.GetMap().GetLayerAt(0).Query(query);
string s = "";
rs.Reset();
while (rs.HasNext())
{
s = rs.GetString(0);
MessageBox.Show(s);
}
HotMap1.GetMap().Selection().Clear();
// 设置高亮风格
eMyStyle style = new eMyStyle();
style.BmpIndex = 15;
style.BmpOffsetX = style.BmpOffsetY = 8;
rs.GetLayer().HighlightStyle = style;
HotMap1.GetMap().Selection().Add(rs);
34. 可见性
HotMap1.GetMap().GetLayerAt(0).Visible = true;
35. 可选性HotMap1.GetMap().GetLayerAt(0).Selectable = true;
36. 新建装饰图层文件
StorageFolder localFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
HotMap1.GetMap().NewCosmeticLayerFile(localFolder.Path + @"\cos.map");
37. 加载装饰图层文件HotMap1.GetMap().AddCosmeticLayer(localFolder.Path + @"\cos.map");
38. 添加点eMyCosmeticLayer cl = HotMap1.GetMap().AddCosmeticLayer(localFolder.Path + @"\cos.map");
if (cl != null)
{
int stmt = cl.Add();
eMyGeometry geom = new eMyGeometry(1, 1);
eMyPoint2D geoPt = new eMyPoint2D(120.46, 36.0972);
geom.SetPointAt(0, geoPt);
eMyStyle style = new eMyStyle();
style.BmpIndex = 97;
style.BmpOffsetX = 8;
style.BmpOffsetY = 8;
cl.Set(stmt, geom, 1, "point", "我是点");
cl.Update(stmt);
}
HotMap1.Redraw();
HotMap1.Repaint();
39. 添加线eMyCosmeticLayer cl = HotMap1.GetMap().AddCosmeticLayer(localFolder.Path + @"\cos.map");
if (cl != null)
{
int stmt = cl.Add();
eMyGeometry geom = new eMyGeometry(3, 1);
eMyPoint2D geoPoint = new eMyPoint2D(120.4531, 36.0930);
geom.SetPointAt(0, geoPoint);
geoPoint = new eMyPoint2D(120.4664, 36.0901);
geom.SetPointAt(1, geoPoint);
geoPoint = new eMyPoint2D(120.4641, 36.0999);
geom.SetPointAt(2, geoPoint);
eMyStyle style = new eMyStyle();
style.BmpIndex = 97;
style.BmpOffsetX = 8;
style.BmpOffsetY = 8;
cl.Set(stmt, geom, 3, "line", "我是线");
cl.Update(stmt);
}
HotMap1.Redraw();
HotMap1.Repaint();
40. 添加面eMyCosmeticLayer cl = HotMap1.GetMap().AddCosmeticLayer(localFolder.Path + @"\cos.map");
if (cl != null)
{
int stmt = cl.Add();
eMyGeometry geom = new eMyGeometry(4, 1);
eMyPoint2D geoPoint = new eMyPoint2D(120.4531, 36.0930);
geom.SetPointAt(0, geoPoint);
geoPoint = new eMyPoint2D(120.4664, 36.0901);
geom.SetPointAt(1, geoPoint);
geoPoint = new eMyPoint2D(120.4641, 36.0999);
geom.SetPointAt(2, geoPoint);
geoPoint = new eMyPoint2D(120.4531, 36.0930);
geom.SetPointAt(3, geoPoint);
eMyStyle style = new eMyStyle();
cl.Set(stmt, geom, 5, "polygon", "我是面");
cl.Update(stmt);
}
HotMap1.Redraw();
HotMap1.Repaint();
41. 删除eMyCosmeticLayer cl = HotMap1.GetMap().AddCosmeticLayer(localFolder.Path + @"\cos.map");
if (cl != null)
{
cl.Remove("p");
cl.RemoveAll();
}
42. 可见性StorageFolder localFolder = Windows.ApplicationModel.Package.Current.InstalledLocation;
eMyCosmeticLayer cl = HotMap1.GetMap().AddCosmeticLayer(localFolder.Path + @"\cos.map");
if (cl != null)
{
cl.Visible = true;
}
43. 添加字段// 添加字段
eMyCosmeticField fld = new eMyCosmeticField("label", "TEXT");
eMyCosmeticField fld2 = new eMyCosmeticField("mobile", "NUMERIC");
eMyCosmeticLayer cl = HotMap1.GetMap().GetCosmeticLayerAt(0);
if (cl != null)
{
cl.AddCustomFields(fld);
cl.AddCustomFields(fld2);
HotMap1.Redraw();
HotMap1.Repaint();
}
44. 修改字段值// 修改字段值
eMyCosmeticLayer cl = HotMap1.GetMap().GetCosmeticLayerAt(0);
if (cl != null)
{
int stmt = cl.Edit(1);
if (stmt != 0)
{
cl.Set(stmt, "字段1", "HOTGIS",6);
cl.Set(stmt, "NewField", "87654321",8);
bool b = cl.Update(stmt);
}
}
45. SQL 查询// SQL查询
eMyCosmeticLayer cl = HotMap1.GetMap().GetCosmeticLayerAt(0);
if (cl != null)
{
eMyQueryDefn queryDefn = new eMyQueryDefn();
queryDefn.WhereClause = "label like '%美国%'";
eMyResultSet rs;
rs = cl.Query(queryDefn);
while (rs.HasNext())
{
String label = rs.GetString("label");
int mobile = rs.GetInteger("mobile");
}
}
46. 查询类型个数eCosmeticLayer cl = eMap1.CosmeticLayer;
int pc = cl.GetCount(LayerType.Point);
int lc = cl.GetCount(LayerType.Line);
int ac = cl.GetCount(LayerType.Polygon);
MessageBox.Show("点对象个数:" + pc.ToString() + "\r\n线对象个数:" + lc.ToString() + "\r\n面对象个数:" + ac.ToString());
47. 范围查询eMyRect2D bounds = HotMap1.GetMap().GetGeoBounds();
eMyResultSet rs;
eMyCosmeticLayer cl = HotMap1.GetMap().GetCosmeticLayerAt(0);
if (cl != null)
{
rs = cl.QueryByRect(bounds);
while (rs.HasNext())
{
eMyGeometry geom = rs.GetGeometry();
}
}
48. OnMapDrawBefore 事件
地图绘制之前触发该事件。
49. OnMapDrawAfter 事件地图绘制之后触发该事件。
void HotMap1_OnMapDrawAfter()
{
RectangleGeometry rg = new RectangleGeometry();
eMyPoint pt = eMyMapWnd.GetMap().MapToDev(new eMyPoint2D(120.459693, 36.092634));
rg.Rect = new Rect(pt.X, pt.Y,16, 16);
Path path = new Path();
path.Fill = new SolidColorBrush(Colors.Orange);
path.Data = rg;
eMyMapWnd.Children.Add(path);
}
可以通过在OnAfterMapDraw事件中编写代码来在地图控件上绘制。如图11所示。
50. OnMapMouseDown按下地图触发该事件。
void eMyMapWnd_OnMapMouseDown(double x, double y)
{
}
51. OnMapMouseUp从地图窗口放开触摸点触发该事件。
void eMyMapWnd_OnMapMouseUp(double x, double y)
{
}
52. OnMapMouseMove在地图上触摸并且改变触摸位置时发生该事件。
void eMyMapWnd_OnMapMouseMove(double x, double y)
{
}
53. OnMapDoubleTap在地图上双击时触发该事件。
void eMyMapWnd_OnMapDoubleTap(double x, double y)
{
}
54. OnMapZoomChanged地图比例改变时触发该事件。
void eMyMapWnd_OnMapZoomChanged(double factor)
{
}
55. OnMapLoaded地图初始化完毕,触发该事件。
void eMyMapWnd_OnMapLoaded(double factor)
{
}
未完待续。。。。。。。