⑴ 百度地图lbs 怎么通过java自定义麻点图
“麻点图”实现原理:
1、将麻点做在同一张图片上,然后利用自定义图层接口,将麻点图贴在地图底图上;
2、然后利用热区接口,使鼠标放在热点上,有文字显示。
3、可以自己加上信息窗口等覆盖物,让热区hotspot看起来像标注marker一样。
⑵ 怎样在java中调用百度地图的API
网络地图Web服务API为开发者提供http接口,即开发者通过http形式发起检索请求,获取返回json或xml格式的检索数据。
api官网说明链接:
http://developer..com/map/webservice.htm
1、可用接口列举:
获取相关地址提示 place suggestion
http://api.map..com/place/v2/suggestion?query=水杉®ion=成都&output=json&ak=
2、获取坐标 geocoding
http://api.map..com/geocoder?address=锦江区菱安路299号&output=json&key=
http://api.map..com/place/v2/search?ak=&output=json&query=蓝光coco金沙&page_size=10&page_num=0&scope=1®ion=成都
{
"status":0,
"message":"ok",
"total":2,
"results":[
{
"name":"蓝光COCO金沙",
"location":{
"lat":30.687544,
"lng":103.996691
},
"address":"西三环外金沙西源大道(IT大道旁)",
"uid":"223992992c5ee7e0841541df"
},
{
"name":"蓝光COCO金沙2期",
"location":{
"lat":30.681123,
"lng":103.991123
},
"address":"青羊区金沙IT大道旁",
"uid":"b7bb5abb1cd4982213293580"
}
]
}
3、设施导航
http://api.map..com/place/v2/search?ak=&output=json&query=图书馆&page_size=20&page_num=0&scope=2®ion=成都
4、java测试类:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
public class LocationUtil {
private static final String BAIDU_APP_KEY = "";
/**
* 返回输入地址的经纬度坐标 key lng(经度),lat(纬度)
*/
public static Map<String, String> getLatitude(String address) {
try {
// 将地址转换成utf-8的16进制
address = URLEncoder.encode(address, "UTF-8");
// 如果有代理,要设置代理,没代理可注释
// System.setProperty("http.proxyHost","192.168.172.23");
// System.setProperty("http.proxyPort","3209");
URL resjson = new URL("http://api.map..com/geocoder?address="
+ address + "&output=json&key=" + BAIDU_APP_KEY);
BufferedReader in = new BufferedReader(new InputStreamReader(
resjson.openStream()));
String res;
StringBuilder sb = new StringBuilder("");
while ((res = in.readLine()) != null) {
sb.append(res.trim());
}
in.close();
String str = sb.toString();
System.out.println("return json:" + str);
if(str!=null&&!str.equals("")){
Map<String, String> map = null;
int lngStart = str.indexOf("lng\":");
int lngEnd = str.indexOf(",\"lat");
int latEnd = str.indexOf("},\"precise");
if (lngStart > 0 && lngEnd > 0 && latEnd > 0) {
String lng = str.substring(lngStart + 5, lngEnd);
String lat = str.substring(lngEnd + 7, latEnd);
map = new HashMap<String, String>();
map.put("lng", lng);
map.put("lat", lat);
return map;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String args[]) {
Map<String, String> map = LocationUtil.getLatitude("成都 高新西区西区大道1398号");
if (null != map) {
System.out.println(map.get("lng"));
System.out.println(map.get("lat"));
}
}
}
⑶ 怎样用java调用百度地图的JavaScript API
这种地图类的api都是基于前端的 简单的就是说 你在前端用javascript实例化一个地图 可以通过自定义服务器请求获取你需要的数据 然后把数据返回给api api就会自动帮你处理数据 产生新的视图
⑷ 如何使用java和百度地图api 得到两点之间的路程(驾车行驶距离)
获取到两点的经纬度,再调用网络地图的api计算。我记得,有一个计算距离的api.
<scripttype="text/javascript">
//网络地图API功能
varmap=newBMap.Map("allmap");
map.centerAndZoom("重庆",12);//初始化地图,设置城市和地图级别。
varpointA=newBMap.Point(106.486654,29.490295);//创建点坐标A--大渡口区
varpointB=newBMap.Point(106.581515,29.615467);//创建点坐标B--江北区
alert('从大渡口区到江北区的距离是:'+(map.getDistance(pointA,pointB)).toFixed(2)+'米。');//获取两点距离,保留小数点后两位
varpolyline=newBMap.Polyline([pointA,pointB],{strokeColor:"blue",strokeWeight:6,strokeOpacity:0.5});//定义折线
map.addOverlay(polyline);//添加折线到地图上
</script>
⑸ java开发 怎么把图层放到百度地图上
如果要在网络地图上实现一张自己自定义的地图,就需要使用网络地图自定义图层接口。实现效果如下:
但是网络地图中关于自定义图层的介绍甚少,便以此博文以记录,方便同行了解和使用。
网络地图官方文档中,关于自定义图层的介绍是这样的:
=========华丽丽的分隔线===========
自定义图层
地图坐标系
在使用自定义图层前,您需要了解网络地图的地图坐标系,网络地图坐标系涉及:
经纬度球面坐标系统
墨卡托平面坐标系统
图块编号系统
经纬度是一种利用三维空间的球面来定义地球上的空间的球面坐标系,它能够标示地球上任何一个位置。通过伦敦格林尼治天文台原址的经线为0度经线,从0度经线向东、向西各分180度。赤道为0度纬线,赤道以北的纬线称为北纬、以南的称为南纬。在网络地图中,东经和北纬用正数表示,西经和南纬用负数表示。例如北京的位置大约是北纬39.9度,东经116.4度,那么用数值标示就是经度116.6,纬度39.9。
在网络地图中,习惯经度在前,纬度在后,例如:
var point = new BMap.Point(116.404, 39.915); // 创建点坐标,经度在前,纬度在后
由于网络地图是显示在平面上的,因此在地图内部系统中需要将球面坐标转换为平面坐标,这个转换过程称为投影。网络地图使用的是墨卡托投影。墨卡托平面坐标如下图所示,平面坐标与经纬度坐标系的原点是重合的。
网络地图在每一个级别将整个地图划分成若干个图块,通过编号系统将整个图块整合在一起以便显示完整的地图。当地图被拖动或者级别发生变化时,地图API将会根据平面坐标计算出当前视野内所需显示的图块的编号。网络地图图块编号规则如下图所示:
从平面坐标原点开始的右上方向的图块编号为0,0,以此类推。在最低的缩放级别(级别 1)中,整个地球由 4 张图块组成。随着级别的增长,地图所使用的图块个数也随之增多。
定义取图规则
通过TileLayer类开发者可以实现自定义图层。其中,TileLayer实例的getTilesUrl方法需要实现,用来告诉API取图规则。getTilesUrl方法的参数包括tileCoord和zoom,其中tileCoord为图块的编号信息,zoom为图块的级别,每当地图需要显示特定级别的特定位置的图块时就会自动调用此方法,并提供这两个参数。使用者需要告知API特定编号和级别所对应的图块的地址,这样API就能正常显示自定义的图层了。
添加和移除自定义图层
以下代码在每个图块的所有缩放级别上显示一个简单的透明叠加层,使用浮动红色小水滴表示图块的轮廓。
var map = new BMap.Map("l-map"); // 创建地图实例
var point = new BMap.Point(116.404, 39.915); // 创建点坐标
map.centerAndZoom(point,15); // 初始化地图,设置中心点坐标和地图级别
var tilelayer = new BMap.TileLayer(); // 创建地图层实例
tilelayer.getTilesUrl=function(){ // 设置图块路径
return "layer.gif";
};
map.addTileLayer(tilelayer); // 将图层添加到地图上
=========华丽丽的分隔线============
这里讲得让人一知半解,最主要的是,文档中并没有说明如何实现getTilesUrl方法,以及如何实现将一张自己的地图分隔成符合网络地图要求的图块。
现在记录一下我解决这个问题的过程。
首先,我先下载网络地图瓦格图片切图工具:https://github.com/jiazheng/BaiMapTileCutter
其次,找到自己的地图,导入其中进行切片,参考Sup_Heaven转的博文:http://blog.csdn.net/sup_heaven/article/details/8461586
最后将图片放入项目资源文件中,实现getTitlesUrl方法即可。
这里需要补充一下的同,Sup_Heaven转的博文中,并没有详细说明中心点和瓦格图片之间的关系,只告诉我们其然却不知其所以然。借助度娘了解。网络地图的所有瓦格图片都是256px*256px的正方形图片,其图片的位置由经纬度和放大倍数zoom决定,所以在使用工具TileCutter时,设置对的级别范围和中心点,否则会导致切出的图片与实际需要不符。如果大家在使用过程有疑问的,欢迎留言交流
⑹ 百度地图api java怎么用
一、申请密钥
1、先用eclipse创建一个Android工程
2、在网络api官网上申请一个密钥,链接:http://lbsyun..com/apiconsole/key
bubuko.com,布布扣
二、工程配置
1、将mapapi_vX_X_X.jar拷贝到工程libs目录下,将libBaiMapSDK_vX_X_X.so拷贝到libs\armeabi
目录下,拷贝完成后,如下所示:
注:liblocSDK3.so和locSDK_3.1.jar为网络定位SDK所使用资源,开发者可根据实际需求自行添加。
bubuko.com,布布扣
2、右键工程属性,在Libraries中选择“Add External JARs”,选择mapapi_vX_X_X.jar,确定返回
配置好以上步骤,即可使用网络地图了
三、显示网络地图
1、在android配置清单文件中AndroidManifest.xml添加开发密钥和所需权限
<application> <meta-data android:name="com..lbsapi.API_KEY" android:value="开发者 key" /> </application>
所需权限
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
2、在xml布局中添加地图控件
<com..mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
?3、在应用程序创建时初始化,SDK引用的全局变量Context
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
SDKInitializer.initialize(getApplicationContext());
System.out.println("SDKInitializer一初始化");
}
}
设置自定义的application为默认应用
<application
android:name="com.bao.ah.MyApplication"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
//SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}
4、网络地图应和Activity生命周期绑定
public class MainActivity extends Activity {
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
//SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protected void onResume() {
super.onResume();
//在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
⑺ java使用百度地图,进行点定位,点位置不正确
用的是网络地图api2.0吧,2.0有这个问题,不知道为什么
可以这样写,页面一加载,就重新定义坐标
⑻ 百度地图有没有接口计算两点之间的路线距离
我想通过Java调用网络地图的接口来计算两点之间的路线距离,不过没看到有这个接口。
虽然jdk1.6里面能调用js方法,但是网络地图需要密钥,所以难搞了。:'(