eHotGIS For Windows phone 8 (WP8) SDK 二次开发入门

在开始开发之前,需要先准备一下操作系统环境及程序

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.dlleMyGIS.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

成功。

4.          放大

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)

    {

           

}

未完待续。。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

满天飞飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值