日期:2014-05-17  浏览次数:20936 次

vs2005下地图的实现
想实现这样的功能,在vs下的窗体内显示百度或谷歌地图,给定经纬度,能在地图上标记。或者能打开浏览器,在浏览器中显示地图并标记所给位置。
哪位高手能教一下具体的步骤或者给个小例子,感激不尽
------最佳解决方案--------------------
我写过一个下载google地图的程序,可以提供源代码。里边你可以看到所有最基本的概念。

使用什么webgis api,你可能就被它限制住了。例如对于自己应用而言,你可能需要自己有一个服务器自己提供企业业务管理、专题地图、遥感卫星等应用方面基本的GIS服务(而不需要花几十万块钱去买那些根本不能直接提供你的最终功能的所谓GIS产品)。这时候你就需要自己完全(100%)拥有的一个地图服务的c/s软件。
------其他解决方案--------------------
去找他们的API吧,桌面比较难动起来,网页比较简单,js代码即可。
------其他解决方案--------------------
去google地图API或百度,里面都有代码的
------其他解决方案--------------------
需要请下载,周一删掉!
------其他解决方案--------------------
简单说,google栅格地图在第0级是一个256x256的png图片,然后没扩到一级则扩大一倍,也就是说第1级是四个256x256的图片,第2级是16个,第三级是64个......经纬度跟投影变换后的x、y坐标的转换关系是
        public static Point ToPixels(this LatLng cord, int nZoom)
        {
            var x = (cord.Longitude + 180) * (256L << nZoom) / 360;
            double siny = Math.Sin(cord.Latitude * Math.PI / 180);
            double y = Math.Log((1 + siny) / (1 - siny));
            y = (128 << nZoom) * (1 - y / (2 * Math.PI));
            return new Point((int)x, (int)y);
        }

        public static LatLng ToLatLng(this Point pixel, int nZoom)
        {
            var x = pixel.X * 360 / (256L << nZoom) - 180;
            double y = 2 * Math.PI * (1 - pixel.Y / (128 << nZoom));
            double z = Math.Pow(Math.E, y);
            double siny = (z - 1) / (z + 1);
            y = Math.Asin(siny) * 180 / Math.PI;
            return new LatLng { Longitude = x, Latitude = y };
        }

那么已知一个经纬度,通过换算出x、y坐标,再分别整除256,你就知道应该取得那一个编号的瓦片(png图片)文件了。

当用户在画面上查看某个经纬度的地图时,你只需要把刚刚适合屏幕大小的那些瓦片平铺在(画在)屏幕上就行了,根本不显示的瓦片文件不需要去访问。
------其他解决方案--------------------
mark之
------其他解决方案--------------------
看了一下,网页中用地图基本会了,但是我的程序是在vs2005平台下开发的,这样我的vs上程序是不是要和网页进行通信,比如我点了一个按钮,那么vs中就要向网页中传递一个经纬度信息,而网页再接到信息后再在上面显示出来。是这么个流程吗,如果是的话,怎么实现vs和网页间的通信或者参数传递呢,vs上我用的是c#
------其他解决方案--------------------
该回复于2012-12-08 17:00:21被管理员删除
------其他解决方案--------------------