Google 离线地图_谷歌地图离线包下载手机版

Google 离线地图_谷歌地图离线包下载手机版google离线地图展示和渲染由于项目的需要,在线地图无法满足业务需要,于是要做离线地图。经过一段时间的调研,最后选择了谷歌离线地图原因是通过现成的工具便可完成。感谢前人栽的树,在此整理总结。以下内容和代码是调研时准备的,仅供参考使用。离线地图制作技术:googlemapapi准备:googlemapapiv3离线版,地图切图工具,Google_Maps_API

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

google离线地图展示和渲染

由于项目的需要,在线地图无法满足业务需要,于是要做离线地图。经过一段时间的调研,最后选择了谷歌离线地图

原因是通过现成的工具便可完成。感谢前人栽的树,在此整理总结。

以下内容和代码是调研时准备的,仅供参考使用。

离线地图制作
技术:google map api
准备:google map api v3 离线版,地图切图工具,Google_Maps_API_V3文档和Google_Maps_JavaScript_API_V3_自用版本文档

google地图瓦片下载工具:http://download.csdn.net/detail/qq_19558705/9389057

google演示代码:http://download.csdn.net/detail/qq_19558705/9389076

离线地图的加载:
打开加载离线地图页面offlineMap.html

加载本地地图的函数:

function LocalMapType() {}
      
    LocalMapType.prototype.tileSize = new google.maps.Size(256, 256);
    LocalMapType.prototype.maxZoom = 13;  // 地图显示最大级别
    LocalMapType.prototype.minZoom = 9;   // 地图显示最小级别
    LocalMapType.prototype.name = "本地"; // 本地按钮,就是离线地图
    LocalMapType.prototype.alt = "显示本地地图";  // 显示本地地图可能会出现不清晰的现象
    LocalMapType.prototype.getTile = function(coord, zoom, ownerDocument) {
    var img = ownerDocument.createElement("img");    
    img.style.width = this.tileSize.width + "px";
    img.style.height = this.tileSize.height + "px";
    
    // 访问本地图片的算法,不同的地图切图工具对应的算法不同
    var strURL = "gmap/tiles/" + zoom + "/" + coord.x + "/" + coord.y + ".png"; 
    img.src = strURL;
    return img;
    };
    
    var localMapType = new LocalMapType(); 


初始化地图函数:

function initialize() {
    // 以该经纬度为中心居中显示,注意google 一般先写纬度,在写经度
    var myLatlng = new google.maps.LatLng(30.51667,114.31667); 
    var myOptions = {
      center: myLatlng,
      zoom: 10,        // 初始化地图默认级别
      streetViewControl: false,     // 默认不显示全景图
      mapTypeControlOptions: {
        mapTypeIds: ["local", google.maps.MapTypeId.ROADMAP] // 地图类型为普通街道地图
        }
    };
    
    var map = new google.maps.Map(document.getElementById("map_canvas"),myOptions);
    map.mapTypes.set('local', localMapType);
    map.setMapTypeId('local');
    // 设置地图瓦片大小为256*256
    map.overlayMapTypes.insertAt(0, new CoordMapType(new google.maps.Size(256, 256)));


html代码:

<body οnlοad="initialize()">
    <div id="map_canvas" style="width: 80%; height: 630px;"></div>
</body>

好像只能在body中写οnlοad=”initialize()” 函数。笔者打算用sitemesh整合离线地图页面时出现了问题,就是因为该函数只能在body中写,在div或者其他标签中不生效。若有其他办法解决请赐教。

以上便可以加载离线地图
如果需要修改显示的离线地图,一般只需要修改一下内容即可
LocalMapType函数中的 LocalMapType.prototype.maxZoom,LocalMapType.prototype.minZoom, strURL,
initialize函数中的 myLatlng,zoom

离线地图源的制作:
打开GoogleMap切图工具文件->GoogleTileDownload->修改conf.properties文件
修改的内容:
zoom=2 : 地图显示的等级
leftTopLnglat=114, 31 : 地图左上角经纬度
rightBottomLnglat=115, 30 : 地图右下角经纬度
具体方法看google离线地图下载工具中的readme.txt文件。该工具生产的地图源图片的规律满足上面的strURL的加载算法

在离线的情况下渲染离线地图:
1.加载图片:

var image = 'icon/0.png'; // 存放图片的路径
    var myLatLng = new google.maps.LatLng(30.51667,114.31667); // 图片显示的地方
    var beachMarker = new google.maps.Marker({
    position: myLatLng,
    map: map,
    icon: image
});



2.画折线:

var flightPlanCoordinates = [
    new google.maps.LatLng(30.51667,114.31667),
    new google.maps.LatLng(30.50667,114.32667),
    new google.maps.LatLng(30.40667,114.30667)
    ];
    var flightPath = new google.maps.Polyline({
       path: flightPlanCoordinates,
       strokeColor: "#FF0000",
       strokeOpacity: 1.0,
       strokeWeight: 2
    });
     
    flightPath.setMap(map); // 如果想还原去掉折线用:flightMap.setMap(null)

3.画圆:

 var citymap = {};  
    citymap['chicago'] = {  
    center: new google.maps.LatLng(31.18439, 121.49454),  
    population: 284259 
    }; 
    citymap['newyork'] = {  
    center: new google.maps.LatLng(31.38439, 121.52454),  
    population: 814319 
    };
    var cityCircle;

    for (var city in citymap) {  
    var populationOptions = {  
      strokeColor: "#FF0000",  
      strokeOpacity: 0.8,  
      strokeWeight: 1,  
      fillColor: "#FF0000",  
      fillOpacity: 0.35,  
      map: map,  
      center: citymap[city].center,  
      radius: citymap[city].population / 1000  
    };  
    cityCircle = new google.maps.Circle(populationOptions);  
    }


4.画多边形:

// 如果是多边形,最后一个点不需要写成第一个点就可以自动连起来
     var triangleCoords = [  
     new google.maps.LatLng(30.51667,114.31667),
         new google.maps.LatLng(30.50667,114.42667),
         new google.maps.LatLng(30.40667,114.30667)
    ];  
      
    bermudaTriangle = new google.maps.Polygon({  
        paths: triangleCoords,  
        strokeColor: "#FF0000",  
        strokeOpacity: 0.8,  
        strokeWeight: 2,  
        fillColor: "#FF0000",  
        fillOpacity: 0.35  
    });  
      
    bermudaTriangle.setMap(map); 


以上便是我项目中用到的内容,仅供参考。若有不对的地方,或者更好的方法。请指出。转载请注明来源:http://blog.csdn.net/qq_19558705

个人主页:http://www.itit123.cn/ 更多干货等你来拿

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/191611.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 修改浏览器设置为cookie怎么弄_删除浏览器cookie

    修改浏览器设置为cookie怎么弄_删除浏览器cookie怎么设置cookie,怎么设置cookie以及删除cookie和cookie详解注意:expires使用GMT或UTC格式的时间,我这里没有指定路径(path)和域(domain),当没有指定路

    2022年8月4日
    4
  • vb中如何连接mysql_vb怎么连接数据库「建议收藏」

    vb怎么连接数据库[编辑]概述我们对数据库进行操作时,一方面要使用户可以在程序界面上对需要的数据进行访问;另一方面可以对数据库中的数据进行各种操作,最终的操作结果还要反馈给用户。一、Data控件1.设置数据控件的属性2.将Data控件连到一个特定的数据库和其中的一个表上3.在VB中建立一个标准的工程4.在窗体中添加控件(Data1就是一个Data控件)5.改变控件的一些属性6.对Data控件进行设…

    2022年4月16日
    59
  • c#语言_c# ref

    c#语言_c# refStringBuilder用于大量的字符串的修改的地方,比如要大量的连接字符串时,使用它能节省内存空间。StringBuildertestStr=newStringBuilder(“abcdef:ggg”);//testStr.AppendFormat($”{s}”);testStr.Append($”{s}”);intlen=testStr.Length;

    2022年10月21日
    4
  • leetcode-91解码方法(动态规划|记忆化搜索)[通俗易懂]

    leetcode-91解码方法(动态规划|记忆化搜索)[通俗易懂]一条包含字母 A-Z 的消息通过以下映射进行了 编码 :‘A’ -> 1‘B’ -> 2…‘Z’ -> 26要 解码 已编码的消息,所有数字必须基于上述映射的方法,反向映射回字母(可能有多种方法)。例如,“111” 可以将 “1” 中的每个 “1” 映射为 “A” ,从而得到 “AAA” ,或者可以将 “11” 和 “1”(分别为 “K” 和 “A” )映射为 “KA” 。注意,“06” 不能映射为 “F” ,因为 “6” 和 “06” 不同。给你一个只含数字的 非空 字符串

    2022年8月8日
    4
  • 微信网页分享(配合微信公众平台)[通俗易懂]

    微信网页分享(配合微信公众平台)[通俗易懂]JAVA前后端调用微信接口,实现页面分享功能(分享到朋友圈,分享给朋友)

    2022年8月20日
    5
  • ctf get post 传参 HackBar

    ctf get post 传参 HackBarget和post是http协议的两种基本请求方式GET-从指定的资源请求数据。POST-向指定的资源提交要被处理的数据https://www.w3school.com.cn/tags/html_ref_httpmethods.asp知乎上这篇更详细,关于get和post的区别https://www.zhihu.com/question/28586791web题中会遇到,比如…

    2022年5月20日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号