如何用Google离线API调用离线地图
- 格式:docx
- 大小:1.23 MB
- 文档页数:8
开发人员指南地图基础知识1简介2Google 地图的“Hello, World”2加载Google 地图API2地图DOM 元素2GMap2 - 基本对象2初始化地图2加载地图3经度和纬度4地图属性5地图交互6信息窗口简介任何Google 地图API 应用程序中的基础元素都是“地图”本身。
本文档讨论GMap2基础对象的用法和地图操作的基础知识。
Google 地图的“Hello, World”开始学习Google 地图API 最简单的方式是看一个简单的示例。
下面的网页显示以北京的故宫博物院为中心的500x300 的地图。
<!DOCTYPE html "-//W3C//DTD XHTML 1.0 Strict//EN" "/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="/1999/xhtml"><head><meta http-equiv="content-type"content="text/html; charset=utf-8"/><title>Google Maps JavaScript API Example</title><scriptsrc="/maps?file=api&v=2&am p;key=abcdefg&sensor=true_or_false"type="text/javascript"></script><script type="text/javascript">function initialize(){if(GBrowserIsCompatible()){var map=new GMap2(document.getElementById("map_canvas"));map.setCenter(new GLatLng(39.9493,116.3975), 13);}}</script></head><body onload="initialize()"onunload="GUnload()"><div id="map_canvas"style="width:500px;height: 300px"></div></body></html>您可以查看此示例及下载、编辑和调试该示例,但必须将该文件中的密钥替换为您自己的Google 地图API 密钥。
如何采用离线的 Google Map API 加载离线谷歌地图的方法注:文档中所提到的“GoogleMapAPIV3.rar”附件,请到水经注软件论坛下载。
一、下载示例数据这里以《水经注万能地图下载器》为你说明如何下载谷歌卫星地图。
安装万能地图下载器以后,软件启动时会显示选择在线地图的对话框,请选择“卫星.谷歌”即会显示在线的谷歌卫星地图窗口,如下图所示。
由于只是为了作演示说明如何用 Google Map 离线 API 加载谷歌地图的方法,这里我们只需要框选中国范围,即点击工具栏上的“框选下载区域”,然后在视图中绘制选择范围,如下图所示。
下载即可,如下图所示。
点击“确定”按钮,开始下载卫星地图数据。
下载完成后导出瓦片数据,选择导出类型为“瓦片:Google Map”,保存路为“D:\Test”目录,如下图所示。
在对话框中点击“输出”按钮导出Google Map瓦片,如下图所示。
二、地图引擎部署第一步:将附件中的“GoogleMapAPIV3.rar”下载后解压到“D:\Test”目录。
第二步:将“D:\Test”目录中的“中国_GoogleMapTiles”重命名为“data”,如下图所示。
第三步:在浏览器中打开“D:\Test\GoogleMapAPIV3\Example_GoogleMapAPI.html”,如果操作无误,将会显示离线的卫星地图,如下图所示。
以上,即是如何用 Google Map 离线 API加载谷歌地图的方法,你可以根据实际需求对“D:\Test\GoogleMapAPIV3\Example_GoogleMapAPI.html”文件进行进一步开发。
注:文档中所提到的“GoogleMapAPIV3.rar”附件,请到水经注软件论坛下载。
下面是赠送的中秋节演讲辞,不需要的朋友可以下载后编辑删除!!!谢谢中秋佳节演讲词推荐中秋,怀一颗感恩之心》老师们,同学们:秋浓了,月圆了,又一个中秋要到了!本周日,农历的八月十五,我国的传统节日——中秋节。
如何在Cesium中加载谷歌离线影像数据
Cesium是一个用于显示三维地球和地图的开源js库。
它可以用来显示海量三维模型数据、影像数据、地形高程数据、矢量数据等等,本文将介绍利用91卫图助手下载谷歌卫星影像,利用Apache Web 服务器发布,并在Cesium中加载显示。
•91卫图助手下载器
1、启动91卫图助手,打开软件后,拉框选择范围,双击弹出下
载对话框
2、在下载对话框中我们选择要下载的级别,级别越高,清晰度越
高,文件越大,按自己需要选择即可
3、在下载对话框中,点击导出设置,选择导出方式为:导出TMS 瓦片,如下所示
4、点击确定后,开始下载,下载完成后的结果如下所示
5. 然后我们可以在Apache Web服务器中发布该服务
6、在Cesium中加载影像图层,代码如下:
7、在浏览器中打开Cesium,显示效果如下:
的全球数据,然后再下载高级别的局部范围的数据,然后拷贝到同一个文件夹下发布,这样显示效果更佳
2.本软件还支持导出Cesium地形数据,详见高程下载中如何在
Cesium中加载谷歌地形数据章节。
这是我自己写的一个google 最新的基于map api v2的地图导航功能,本人的机器是索尼爱立信 mt11i,系统为2.3.3亲测完全可用,google map api v2许可码请自己去谷歌申请,你过你的测试系统api版本11(android3.0)以上的话,注意两处map = ((SupportMapFragment) (this.getSupportFragmentManager().findFragmentById(R.id.map))).getMap();和布局文件中的support均可以省略support欢迎加群讨论技术方面的问题:杭州android开发讨论群(216045581)注意新建项目之前需要安装google play services然后导入通过上图方法导入sdk包下面的一个包:\adt-bundle-windows-x86\sdk\extras\google\google_play_services\libproje ct\google-play-services_libAndroidManifest.xml<?xml version="1.0"encoding="utf-8"?><manifest xmlns:android="/apk/res/android"package="com.example.v2_test"android:versionCode="1"android:versionName="1.0"><uses-sdkandroid:minSdkVersion="8"android:targetSdkVersion="17"/><permissionandroid:name="com.example.v2_test.permission.MAPS_RECEIVE"android:protectionLevel="signature"/><uses-permission android:name="android.permission.INTERNET"/> <uses-permissionandroid:name="com.example.v2_test.permission.MAPS_RECEIVE"/> <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permissionandroid:name="com.google.android.providers.gsf.permission.READ_GSERVICE S"/><uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permissionandroid:name="android.permission.ACCESS_MOCK_LOCATION"/><uses-featureandroid:glEsVersion="0x00020000"android:required="true"/><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme"><activityandroid:name="com.example.v2_test.MainActivity"android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="UNCHER" /></intent-filter></activity><meta-dataandroid:name="com.google.android.maps.v2.API_KEY"android:value="AIzaSyDmrnUUl_zWzgimKKeR5t3ZiinvouSWO8E"/> </application></manifest>布局文件<RelativeLayoutxmlns:android="/apk/res/android"xmlns:map="/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><fragmentandroid:id="@+id/map"android:layout_width="match_parent"android:layout_height="match_parent"class="com.google.android.gms.maps.SupportMapFragment"/> <ImageButtonandroid:id="@+id/local"android:background="@null"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="10dp"android:layout_alignParentRight="true"android:layout_marginRight="10dp"/></RelativeLayout>菜单弹出框布局文件<?xml version="1.0"encoding="utf-8"?><TableLayout xmlns:android="/apk/res/android"android:layout_width="fill_parent"android:layout_height="fill_parent"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="起始位置:"android:textColor="@android:color/white"android:textSize="18dp"></TextView><EditTextandroid:id="@+id/start"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18dp"android:text="我的位置"></EditText><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:textColor="@android:color/white"android:textSize="18dp"android:text="目的地:"></TextView><EditTextandroid:id="@+id/end"android:layout_width="wrap_content"android:layout_height="wrap_content"android:textSize="18dp"android:text=""></EditText></TableLayout>这个是activitypackage com.example.v2_test;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.client.ClientProtocolException; import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpGet;import org.apache.http.client.methods.HttpPost;import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap;import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.CameraPosition; import tLng;import com.google.android.gms.maps.model.Marker;import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.maps.model.Polyline;import com.google.android.gms.maps.model.PolylineOptions; import android.app.AlertDialog;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnClickListener; import android.graphics.Color;import android.location.Criteria;import android.location.Location;import android.location.LocationListener;import android.location.LocationManager;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.support.v4.app.FragmentActivity;import android.util.Log;import youtInflater;import android.view.Menu;import android.view.MenuItem;import android.view.View;import android.widget.EditText;import android.widget.ImageButton;public class MainActivity extends FragmentActivity {List<LatLng> list;Polyline polyline;private Location location;private CameraPosition cameraPosition;private GoogleMap map;String start = "";String end = "";double lat = 0.0;double lng = 0.0;double endlat = 0.0;double endlng = 0.0;LocationManager locationManager;ImageButton local;LocationListener llistener;Marker marker;private ProgressDialog progressdialog;private Handler mHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case 1:progressdialog.dismiss();if(polyline!=null){polyline.remove();map.clear();markMysition();}map.addMarker(new MarkerOptions().position(new LatLng(endlat, endlng)).title(MainActivity.this.getLocation(endlat, endlng)));LatLng last = null;for (int i = 0; i < list.size() - 1; i++) {LatLng src = list.get(i);LatLng dest = list.get(i + 1);last = dest;polyline = map.addPolyline(new PolylineOptions().add(new LatLng(titude, src.longitude),new LatLng(titude,dest.longitude)).width(4).color(Color.GREEN));}break;}};};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);local = (ImageButton) findViewById(R.id.local);local.setImageResource(R.drawable.ww);// 点击按钮视图回到我的位置local.setOnClickListener(new android.view.View.OnClickListener() {@Overridepublic void onClick(View v) {MainActivity.this.setCameraPosition();}});map = ((SupportMapFragment) (this.getSupportFragmentManager() .findFragmentById(R.id.map))).getMap();this.getPointLocation();MainActivity.this.setCameraPosition();}// 标记我的位置void markMysition() {marker=map.addMarker(new MarkerOptions().position(new LatLng(lat, lng)).title(this.getLocation(lat, lng)).snippet("我的位置"));}// 获取我的位置private void getPointLocation() {Criteria criteria = new Criteria();// ACCURACY_FINE 较高精确度criteria.setAccuracy(Criteria.ACCURACY_FINE);criteria.setAltitudeRequired(false);criteria.setBearingRequired(false);criteria.setCostAllowed(true);criteria.setPowerRequirement(Criteria.POWER_LOW);locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);String provider = locationManager.getBestProvider(criteria, true);Log.d("provider", provider);llistener = new LocationListener() {@Overridepublic void onLocationChanged(Location location) {/*if(marker!=null){marker.remove();}*/lat = location.getLatitude();lng = location.getLongitude();// MainActivity.this.markMysition();}@Overridepublic void onProviderDisabled(String provider) {Log.i("onProviderDisabled", "come in");}@Overridepublic void onProviderEnabled(String provider) {Log.i("onProviderEnabled", "come in");}@Overridepublic void onStatusChanged(String provider, int status,Bundle extras) {}};location = locationManager.getLastKnownLocation(locationManager.GPS_PROVIDER);locationManager.requestLocationUpdates(provider, 3000, (float) 10.0,llistener);updateLocation();MainActivity.this.markMysition();MainActivity.this.setCameraPosition();}// 位置更新private void updateLocation() {if (location != null) {lat = location.getLatitude();lng = location.getLongitude();}}// 将视图镜头定位在我的位置public void setCameraPosition() {// 获取视图镜头cameraPosition = new CameraPosition.Builder().target(new LatLng(lat, lng)) // Sets the center of the map to.zoom(17) // 缩放比例.bearing(0) // Sets the orientation of the camera to east.tilt(20) // Sets the tilt of the camera to 30 degrees.build(); // Creates a CameraPosition from the builder map.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosit ion));}// 菜单public boolean onCreateOptionsMenu(Menu menu) {menu.add(0, Menu.FIRST + 1, 1, "获取路线");menu.add(0, Menu.FIRST + 2, 2, "退出");return true;}// 菜单响应public boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()) {case Menu.FIRST + 1:// 定义输入框界面editpoint();break;case Menu.FIRST + 2:locationManager.removeUpdates(llistener);this.finish();}return true;}// 获取物理位置private String getLocation(double lat, double lng) {String address = "";String resultString = "";String urlString = String.format("/maps/api/geocode/json?latlng="+ lat + "," + lng + "&sensor=true&language=zh-CN");Log.i("URL", urlString);HttpClient client = new DefaultHttpClient();HttpGet get = new HttpGet(urlString);try {HttpResponse response = client.execute(get);HttpEntity entity = response.getEntity();BufferedReader buffReader = new BufferedReader(new InputStreamReader(entity.getContent()));StringBuffer strBuff = new StringBuffer();String result = null;while ((result = buffReader.readLine()) != null) {strBuff.append(result);}resultString = strBuff.toString();// 解析josn数据,获得物理地址if (resultString != null && resultString.length() > 0) {JSONObject jsonobject = new JSONObject(resultString);JSONArray jsonArray = newJSONArray(jsonobject.get("results").toString());resultString = "";for (int i = 0; i < jsonArray.length(); i++) {resultString = jsonArray.getJSONObject(i).getString("formatted_address");address += resultString;}}} catch (Exception e) {} finally {get.abort();client = null;}return address;}// 通过输入信息解析json获取路线private void getDirection(String start, String endposition) { String DresultString = "";String Durl ="/maps/api/directions/json?origin="+ lat + "," + lng + "&destination=" + endlat + "," + endlng+ "&sensor=true&mode=driving";HttpClient Dclient = new DefaultHttpClient();HttpGet Dget = new HttpGet(Durl);HttpResponse response;try {response = Dclient.execute(Dget);HttpEntity Dentity = response.getEntity();BufferedReader DbuffReader = new BufferedReader(new InputStreamReader(Dentity.getContent()));StringBuffer DstrBuff = new StringBuffer();String Dresult = null;while ((Dresult = DbuffReader.readLine()) != null) {DstrBuff.append(Dresult);}DresultString = DstrBuff.toString();} catch (Exception e) {}try {final JSONObject jsonObject = new JSONObject(DresultString);JSONArray routeArray = jsonObject.getJSONArray("routes");JSONObject routes = routeArray.getJSONObject(0);JSONObject overviewPolylines = routes.getJSONObject("overview_polyline");String encodedString = overviewPolylines.getString("points");Log.d("test: ", encodedString);list = decodePoly(encodedString);} catch (JSONException e) {e.printStackTrace();} catch (ArrayIndexOutOfBoundsException e) {System.err.println("Caught ArrayIndexOutOfBoundsException: "+ e.getMessage());}}// 填写起始地点以得到路线导航private void editpoint() {LayoutInflater factory = LayoutInflater.from(MainActivity.this);// 获得自定义对话框final View view = factory.inflate(yout.getdirections, null);AlertDialog navigate = new AlertDialog.Builder(MainActivity.this) .setIcon(android.R.drawable.ic_menu_edit).setTitle("获取路线").setView(view).setPositiveButton("确定", new OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();EditText st = (EditText)view.findViewById(R.id.start);EditText en = (EditText)view.findViewById(R.id.end);start = st.getText().toString();end = en.getText().toString();progressdialog =ProgressDialog.show(MainActivity.this,"正在获取路线", "请稍等……", true);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubgetlatlng(end);getDirection("我的位置", end);mHandler.sendEmptyMessage(0);mHandler.sendEmptyMessage(1);}}).start();}}).setNegativeButton("取消", null).create();navigate.show();}// 根据地理名称获得起始点和终点的经纬度private void getlatlng(String end) {StringBuilder stringBuilder = new StringBuilder();try {HttpPost httppost = new HttpPost("/maps/api/geocode/json?address="+ end + "&sensor=false");HttpClient client = new DefaultHttpClient();HttpResponse response;stringBuilder = new StringBuilder();response = client.execute(httppost);HttpEntity entity = response.getEntity();InputStream stream = entity.getContent();int b;while ((b = stream.read()) != -1) {stringBuilder.append((char) b);}} catch (ClientProtocolException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}JSONObject jsonObject = new JSONObject();try {jsonObject = new JSONObject(stringBuilder.toString());} catch (JSONException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {endlng = ((JSONArray)jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lng");endlat = ((JSONArray)jsonObject.get("results")).getJSONObject(0).getJSONObject("geometry").getJSONObject("location").getDouble("lat");} catch (Exception e) {e.printStackTrace();}}// 解析json文件里面的polyline下的poly得出导航上面路径的点private List<LatLng> decodePoly(String encoded) {List<LatLng> poly = new ArrayList<LatLng>();int index = 0, len = encoded.length();int lat = 0, lng = 0;while (index < len) {int b, shift = 0, result = 0;do {b = encoded.charAt(index++) - 63;result |= (b & 0x1f) << shift;shift += 5;} while (b >= 0x20);int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));lat += dlat;shift = 0;result = 0;do {b = encoded.charAt(index++) - 63;result |= (b & 0x1f) << shift;shift += 5;} while (b >= 0x20);int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));lng += dlng;LatLng p = new LatLng((lat / 1E5), lng / 1E5);poly.add(p);}return poly;}}。
水经注离线谷歌卫星地图加载服务中间件调用示例ForGoogle API1.说明水经注离线谷歌卫星地图加载服务中间件可利用离线地图的.dat文件在本地建立服务端,并生成影像、标签、高程等服务地址,可以在Goo gle API中直接调用该服务地址,并将请求到的服务资源显示在前端,当请求的地图资源不存在可通过网络直接下载缺失的地图,并储存在.dat文件中。
2.实现2.1准备GoogleMa pAPIV3下载GoogleMap APIV3.rar。
在其目录下新建一个ht ml文件“RiverM apSer verSa mpleFor Google API.html”,如下图。
利用记事本打开“RiverM apSer verSa mpleFor Google API.html”并进行编辑,具体内容如下。
<!DOCTYP E html><html><head><meta http-equiv="Conten t-Type" conten t="text/html; charse t=utf-8" /><title>RiverM apSer verSa mpleFor Google API</title><link href="mapfil es/css/defaul t.css" rel="styles heet" type="text/css" /><script type="text/javasc ript" src="mapapi.js"></script><script>functi on tlen(len, mystr){mystr= String(mystr);var num = len - mystr.length;for (var i = 0; i <= num; i++){mystr= "0" + mystr;}return mystr;};functi on CoordM apTyp e(tileSi ze) {this.tileSi ze = tileSi ze;}CoordM apTyp e.protot ype.getTil e = functi on(coord, zoom, ownerD ocume nt) { var div = ownerD ocume nt.create Eleme nt('DIV');var ymax = 1 << zoom;var y = coord.y;y = tlen(5,y);var x = tlen(5,coord.x);zoom = tlen(1,zoom+1);div.innerH TML = y + "," + x + "," + zoom;div.style.width= this.tileSi ze.width+ 'px';div.style.height = this.tileSi ze.height + 'px';div.style.fontSi ze = '10';div.style.border Style = 'solid';div.style.border Width = '1px';div.style.border Color = '#AAAAAA';return div;};functi on LocalM apTyp e() {}LocalM apTyp e.protot ype.tileSi ze = new google.maps.Size(256, 256);LocalM apTyp e.protot ype.maxZoo m = 20;LocalM apTyp e.protot ype.minZoo m = 0;LocalM apTyp e.proto = "本地";LocalM apTyp e.prototype.alt = "显示本地地图";LocalM apTyp e.protot ype.getTil e = functi on(coord, zoom, ownerD ocume nt) { var img = ownerD ocume nt.create Eleme nt("img");img.style.width= this.tileSi ze.width+ "px";img.style.height = this.tileSi ze.height + "px";var ymax = 1 << zoom;var y = coord.y;y = tlen(5,y);var x = tlen(5,coord.x);zoom = tlen(1,zoom+1);var strURL = "http://127.0.0.1:1002/getDef inedI mage?" + "x=" + x + "&y=" + y + "&z=" + zoom;img.src = strURL;return img;};var localM apTyp e = new LocalM apTyp e();functi on initia lize() {var myLatl ng = new googltLng(30, 103);var myOpti ons = {center: myLatl ng,zoom: 4,street ViewC ontro l: false,mapTyp eCont rolOp tions: {m apTyp eIds: ["local", google.maps.MapTyp eId.ROADMA P] }};var map = new google.maps.Map(docume nt.getEle mentB yId("map_ca nvas"), myOpti ons);map.mapTyp es.set('local', localM apTyp e);map.setMap TypeI d('local');map.overla yMapT ypes.insert At(0, new CoordM apTyp e(new google.maps.Size(256, 256)));}</script></head><body onLoad="initia lize()"><div id="map_ca nvas" style="width: 640px; height: 480px;"></div></body></html>其中【strURL=”http://localh ost:1002/getDef inedI mage ?”】表示请求的是影像、地图、地形、标签、影像+标签、影像+地图、影像+地形或Dem。
GoogleMapApi⾕歌地图接⼝整理⼀:基本知识:1. 使⽤⾕歌地图 API 的第⼀步就是要注册⼀个 API 密钥,需要注重⼀下两点:1.假如使⽤ API 的页⾯还没有发布,只是在本地调试,可以不⽤密钥,随便⽤个字符串代替就可以了。
2.API 密钥只对⽹站⽬录或者域有效。
对不同域的⽹页,需要⽤这些域分别注册不同的密钥2.页⾯引⽤javascript⽂件<script src="/maps?file=api&hl=zh-CN&v=2&key=abcdefg" type="text/javascript"></script>:也可以⽤,假如你需要在地图上显⽰⼤陆以外的具体地图,就⽤ 2.file=api 这个是请求API 的JS ⽂件⽤的,固定的格式。
3.hl=zh-CN这个是在设定地图上除了地图图⽚以外的诸如控件名称、版权声明、使⽤提⽰等所需要显⽰⽂本的语⾔版本时候⽤的,假如没有指定这个参数就使⽤ API 的默认值,对 来说,默认是中⽂简体 默认的是英⽂。
4. v=2这个是⽤来指定需要导⼊的 API 类库的版本号,可以有四种设定⽅式:v=2.s 稳定版本,更新最慢,但是最可靠;v=2 当前版本(只⽤主版本号),更新速度和可靠性介于 s 和 x 之间v=2.x 最新版本,更新最快,包括最新功能,可能没有当前版本可靠;v=2.76 指定具体版本。
不建议使⽤。
注:⽬前⾕歌地图 API的主版本号是2,当API升级时旧版本只能继续使⽤⼀个⽉,所以要及时更改主版本号,版本号改变会在Google Code和Maps API讨论组发布相关信息5.key=abcdefg这个是设定你注册的 API 密钥.⼆:核⼼类:google地图API主要包括:地图类(GMap2)、标记类(GMarker)、标记选项类(GMarkerOptions)、折线类(GPolyline)、经纬度(GLatLng)、命名空间(GEvent)、坐标类(GPoint)、控件的⼤⼩类GSize、 interface(GControl)、地图类型类(GMapType)、地图上⾯的图标类(GIcon)、窗体类(GInfoWindow)、窗体选项类 GInfoWindowOptions)、接⼝GOverlay、枚举GMapPane等等注:标记和折线都是地图的覆盖物1.GMap2:地图类,下⾯实例化⼀张地图:var map= new GMap2(container: DOM_Div,opts: Options);构造函数的参数如下:参数是否必要值类型定义container 是 DOM_Div DOM元素,是个Divopts 可选 Options 构造函数选项GMap2包含的⽅法:1.设置状态的⽅法:enableDragging():设置地图可以被拖动。
如何在内网离线发布全国谷歌高清卫星影像地图瓦片1.概述对于GIS行业从业者来讲,对于地图发布可能并不陌生。
其实所谓地图发布,就是指在互联网或局域网服务器中,通过IIS、Apache或ArcGIS Server等系统服务为地图瓦片分配唯一URL地址的过程。
地图发布后可以结合百度离线API或谷歌离线API等开源平台方便地部署百度离线地图、谷歌离线地图、三维离线地球并进行离线GIS系统开发等。
IIS发布从客户在水经注软件使用的反馈我们了解到,大家习惯于将谷歌卫星影像地图导出为ArcGIS Server 瓦片进行发布,然后用ArcGIS 客户端或其它GIS平台进行开发调用。
以上方式没有错,但从我们的项目开发经验来看,这种方式应用于范围较小的区域还是可以接受的,但如果范围大于一省,比如全国甚至全球,这种方式就很不适用了。
我们曾经为一个客户导出了一个省的瓦片,瓦片文件个数上亿张,几周也没能把文件拷贝完,安装部署极为不便。
ArcGIS Server 发布那么不将谷歌卫星影像导出为瓦片,还有其它更好的方法吗?答案当然是肯定的,正是因为我们有了上面所述痛点,后来才研发了《水经注地图发布服务中间件》产品。
该中间件可以直接离线发布全国谷歌卫星影像,不需要IIS、Apache或ArcGIS Server 服务支持,也不需要任何数据支持,效率远高于MBTile瓦片数据库,它可以快速地为你构建一个离线的谷歌地球服务器。
中间件界面这里,我们就对如何使用《水经注地图发布服务中间件》,并在内网离线离发布全国7.01TB谷歌高清影像进行详细说明。
2.全国谷歌高清卫星影像地图数据准备水经注现有全国谷歌高清卫星影像地图数据1-19级7.01TB,该数据用一个8T硬盘就能存储。
在地图发布之前,可以用《水经注万地图下载器》对其进行离线浏览,先检查全国卫星影像数据的覆盖范围、数据的完整性和影像的清晰度等。
具体方法请参阅:如何离线浏览全国7137GB海量谷歌卫星离线影像?https:///s/PSM7OSXLyRxVRqE-Nr-GqA全国卫星影像覆盖范围另外,还可以随时将指定区域的影像数据导出为大图、手机离线包或瓦片等,具体方法请参阅:如何从全国7.01TB海量谷歌卫星离线地图中导出北京市的卫星影像https:///s/4Ezv6SMdsv6CoAV-Ce4raA离线导出北京卫星影像如果你现在没有全国谷歌高清卫星影像地图数据,那么也可以用《水经注万能地图下载器》下载,具体方法请参阅:如何一次性下载全国谷歌卫星影像地图数据https:///s/_W-4_K5lNJ7tjS59X_I94w全国谷歌卫星影像数据文件3.全国谷歌高清卫星影像地图数据发布全国谷歌高清卫星影像地图数据准备好之后,需要下载安装水经注地图发布服务中间件。
如何发布谷歌离线地图一键离线地图发布(工具软件下载)使用教程百度离线地图发布教程手机离线地图发布——Oruxmaps制作发布高清卫星离线地图谷歌离线地图发布API解析说明:1. 当前版本支持谷歌电子/卫星地图瓦片、高德地图、阿里云地图、超图、腾讯地图等(只需下载该地图源的瓦片拷贝到指定目录即可);2. 效果预览演示地址:/google后台编辑体验地址:/google/login.html可随意在后台添加/修改标注,账号密码均为:admin(只下载了部分谷歌地图瓦片作为离线样本,某些地方无法显示视为正常,包含全国4-12级,部分成都13-16级)3. 我们可以提供离线发布源代码(价格:2000RMB),技术支持,助你一分钟快速开发部署离线地图服务器。
在BIGEMAP下载器中下载以上(后面有介绍如何下载瓦片)放在指定目录下就可以使用浏览器查看自己的离线地图啦,还可在后台随意添加图文、点、线、面、图文等标注,如下图:谷歌电子地图预览:谷歌卫星地图预览:高德地图预览可以在右上角添加多种地图,每一种地图加载相应目录的离线地图瓦片。
针对有离线发布需求的客户我们将提供离线发布压缩包文件下面介绍离线发布具体步骤:一、解压文件,安装xampp5.2.2集成包二、安装完成后在以下控制面板中,点击左边安装Apache和MySQL服务,再单击中间按钮,打开Apahce和MySQL成功为以下状态即为正常:三、打开计算机C盘,找到xampp文件夹并打开,把 C:\xampp\htdocs 目录下的两个文件删除,把“google离线地图源码.rar”放在该目录下并解压,把解压的文件全部放在此目录(C:\xampp\htdocs)下,如下图:四、浏览器首次访问以下地址:http://localhost/或http://127.0.0.1/ 会自动导入数据库五、浏览器再访问http://localhost/或http://127.0.0.1/即可访问默认的离线地图了,局域网内其他电脑输入本机内网IP地址也可以访问(注意关闭防火墙)六、登录离线地图后台管理访问地址:本机访问地址:http://localhost/login.html或http://127.0.0.1/login.html 局域网内其他主机:http://本机内网IP/login.html 账号信息:管理员账号:admin 密码:admin默认一般账号:test 密码:123后台管理界面:地图控制面板功能:点击可以隐藏右边控制面板七、离线地图瓦片下载打开Bigemap地图下载器(需要授权才可以下载瓦片),选择对应的地图源,用矩形框选择需要下载的区域,双击下载(注意:存储选项必须选择“瓦片谷歌”,格式选择“png”,级别勾上从低级到所需较高级别)建议:大区域下载低级别,越精确的小区域下载高级别例如(标注成都天府广场):最佳下载方式:中国地图:1-8级四川:9-10级成都:11-12级成都三环内:13-15级成都一环内:16-19级, 注意把中心坐标选择为成都市中心把下载的离线电子地图瓦片拷贝在C:\xampp\htdocs\电子地图瓦片目录中,如图:注意:卫星地图瓦片拷贝在C:\xampp\htdocs\卫星地图瓦片目录中,其他地图类似更多相关内容请参考【Google离线地图API解析】后台编辑演示地址:/google/login.html可随意在后台添加/修改标注账号密码均为:admin。
百度⾕歌离线地图解决⽅案(离线地图下载)离线地图解决⽅案,除了买地图数据,使⽤专业的ArcGIS来做外,也可以使⽤来做。
关于GMap的开发教程,可以看我以前的⽂章:使⽤了GMap⼀年了,也有了⼀些积累,开发了⼀个可以下载ArcGIS、百度、⾕歌、⾼德、腾讯SOSO、天地图、Here等地图的地图下载器。
百度和google地图加载显⽰如下:百度普通地图:百度混合地图:⾕歌普通地图:⾕歌混合地图:从⽬前的情况来看,百度的普通的地图数据是更新最快的,但是有些⼩地⽅没有卫星地图,⽽⾕歌⼏乎所有的地⽅都有卫星地图,但是⾕歌中国的地图更新太慢,⽐如说南京已经有3号线和10号线了,⾕歌地图上就没有。
只要地图能加载显⽰,就可以下载到本地,开发的地图下载器⽀持SQLite、MySQL、MsSQL、PostgreSQL等数据库保存,也可以以固定⽬录组织保存到本地磁盘上,⽀持ArcGIS的WMS切⽚服务的图源使⽤。
下载到本地磁盘的地图:⽀持的地图下载⽅式:(1)选择⼀个矩形区域下载。
(2)选择某个省、市进⾏下载。
下载到MySQL的地图数据:⾃⼰扩展的.Net地图控件主要功能:1)下载百度、⾕歌、⾼德、腾讯、Here、天地图的地图,按区域下载或是省市边界下载。
2)各类画图⼯具:矩形、圆形、多边形、线段、折线段。
可以作为电⼦围栏、地图圈选⼯具、地图画图⼯具使⽤。
3)各种图标:图⽚、图⽚+⽂字说明、gif动态图⽚、带旋转⾓度的箭头、闪动的报警图标4)类似百度地图的“测距”功能:两点之间的距离,或者根据某个距离在地图上展⽰线段或者多边形。
5)发布离线地图服务:这⾥的离线地图只是地图显⽰服务,将下载的离线地图数据作为Http服务发布在局域⽹内使⽤。
这样的离线地图客户端仍然可以使⽤,⽽Web端可以使⽤Openlayers或者是Leaflet等js库做。
更多关于离线web GIS⽅⾯的资料,请参考。
如下是⽤leaflet js做的简单的demo,⽤的是google的地图:6)GPX数据的读取与展⽰。
如何用Google离线API调用离线地图
这里以云南保山市为例,说明如何用谷歌离线API调用离线地图。
首先,点击视图左上方的地图类型按钮选择谷歌地图(如果没有该项请点击“更多”选项),然后在视图右上方选择云南省保山市显示行政区划,最后点击“下载”按钮显示“新建任务”对话框。
一般情况下,从新建任务时行政区划显示的级别开始,一直选择到第19级,但这里我们只以选择到第14有为例。
在“新建任务”对话框中点击“导出设置”显示参数设置对话框,在该对话框中选择瓦片类型为TMS瓦片,文件格式为PNG,坐标投影为WGS84 Web 墨卡托投影,背景色为透明。
分别点击“确定”按钮之后开始下载数据,在下载过程中可以即时查看下载结果。
下载完成后,会根据新建任务时的参数设置导出谷歌TMS瓦片。
将导出结果文件夹复制到谷歌离线API目录中。
启动一个WebGIS开发工具,这里以Visual Studio Code 开发工具为例。
点击“文件”菜单中的“打开文件夹”菜单。
相关文档请参阅:
如何下载安装WebGIS开发工具Visual Studio Code
浏览到百度离线API目录之后,点击“选择文件夹”按钮打开百度离线API 工程源码。
谷歌离线API源码工程加载完成之后,在map.js文件中将原离线地图文件夹“googleTMS”修改为当前离线地图文件夹,这里修改为“保山市谷歌地图TMS瓦片”并保存修改。
双击谷歌离线API源码中的map.html文件可打开显示离线地图。
用谷歌离线API源码成功加载云南省保山市离线地图之后,效果如下图所示。
相关内容请参阅:
Google离线API的在线地图调用示例。