如何高德地图 自定义图层地图图层

& 百度地图之自定义绘制功能
百度地图之自定义绘制功能
我们可以在地图上绘制各种自定义的图形,包括点、折线、圆、多边形等等,尤其绘制点和折线非常实用,点可以用来标识所处的位置,折线可以用来描述走过的轨迹,结合前面GPS定位功能可以做出一些非常有意思的应用,下面应用百度Demo实现绘制的基本功能,代码如下:
Activity:
[java][/java] view plaincopy
package com.
import android.app.A
import android.os.B
import android.view.V
import android.view.View.OnClickL
import android.widget.B
import com.baidu.mapapi.map.G
import com.baidu.mapapi.map.G
import com.baidu.mapapi.map.GraphicsO
import com.baidu.mapapi.map.MapV
import com.baidu.mapapi.map.S
import com.baidu.mapapi.map.TextI
import com.baidu.mapapi.map.TextO
import com.api.basestruct.GeoP
* 此demo用来展示如何在地图上用GraphicsOverlay添加点、线、多边形、圆 同时展示如何在地图上用TextOverlay添加文字
public class GeometryActivity extends Activity implements OnClickListener {
// 地图相关
private MapView mMapView =
private Button resetBtn =
private Button clearBtn =
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_geometry);
CharSequence titleLable = "自定义绘制功能";
setTitle(titleLable);
// 初始化地图
mMapView = (MapView) findViewById(R.id.bmapView);
mMapView.getController().setZoom(12.5f);
mMapView.getController().enableClick(true);
// UI初始化
clearBtn = (Button) findViewById(R.id.btn_clear);
resetBtn = (Button) findViewById(R.id.btn_reset);
clearBtn.setOnClickListener(this);
resetBtn.setOnClickListener(this);
resetBtn.setEnabled(false);
// 界面加载时添加绘制图层
addCustomElementsDemo();
public void onClick(View v) {
if (v == clearBtn) {
clearClick();
clearBtn.setEnabled(false);
resetBtn.setEnabled(true);
if (v == resetBtn) {
resetClick();
clearBtn.setEnabled(true);
resetBtn.setEnabled(false);
* 清除所有图层
public void clearClick() {
mMapView.getOverlays().clear();
* 添加绘制元素
public void resetClick() {
addCustomElementsDemo();
* 添加点、线、多边形、圆、文字
public void addCustomElementsDemo() {
GraphicsOverlay graphicsOverlay = new GraphicsOverlay(mMapView);
mMapView.getOverlays().add(graphicsOverlay);
graphicsOverlay.setData(drawPoint());
// 添加折线
graphicsOverlay.setData(drawLine());
// 添加多边形
graphicsOverlay.setData(drawPolygon());
graphicsOverlay.setData(drawCircle());
// 绘制文字
TextOverlay textOverlay = new TextOverlay(mMapView);
mMapView.getOverlays().add(textOverlay);
textOverlay.addText(drawText());
// 执行地图刷新使生效
mMapView.refresh();
* 绘制折线,该折线状态随地图状态变化
* @return 折线对象
public Graphic drawLine() {
double mLat = 39.97923;
double mLon = 116.357428;
int lat = (int) (mLat * 1E6);
int lon = (int) (mLon * 1E6);
GeoPoint pt1 = new GeoPoint(lat, lon);
mLat = 39.94923;
mLon = 116.397428;
lat = (int) (mLat * 1E6);
lon = (int) (mLon * 1E6);
GeoPoint pt2 = new GeoPoint(lat, lon);
mLat = 39.97923;
mLon = 116.437428;
lat = (int) (mLat * 1E6);
lon = (int) (mLon * 1E6);
GeoPoint pt3 = new GeoPoint(lat, lon);
Geometry lineGeometry = new Geometry();
// 设定折线点坐标
GeoPoint[] linePoints = new GeoPoint[3];
linePoints[0] = pt1;
linePoints[1] = pt2;
linePoints[2] = pt3;
lineGeometry.setPolyLine(linePoints);
// 设定样式
Symbol lineSymbol = new Symbol();
Symbol.Color lineColor = lineSymbol.new Color();
lineColor.red = 255;
lineColor.green = 0;
lineColor.blue = 0;
lineColor.alpha = 255;
lineSymbol.setLineSymbol(lineColor, 10);
// 生成Graphic对象
Graphic lineGraphic = new Graphic(lineGeometry, lineSymbol);
return lineG
* 绘制多边形,该多边形随地图状态变化
* @return 多边形对象
public Graphic drawPolygon() {
double mLat = 39.93923;
double mLon = 116.357428;
int lat = (int) (mLat * 1E6);
int lon = (int) (mLon * 1E6);
GeoPoint pt1 = new GeoPoint(lat, lon);
mLat = 39.91923;
mLon = 116.327428;
lat = (int) (mLat * 1E6);
lon = (int) (mLon * 1E6);
GeoPoint pt2 = new GeoPoint(lat, lon);
mLat = 39.89923;
mLon = 116.347428;
lat = (int) (mLat * 1E6);
lon = (int) (mLon * 1E6);
GeoPoint pt3 = new GeoPoint(lat, lon);
mLat = 39.89923;
mLon = 116.367428;
lat = (int) (mLat * 1E6);
lon = (int) (mLon * 1E6);
GeoPoint pt4 = new GeoPoint(lat, lon);
mLat = 39.91923;
mLon = 116.387428;
lat = (int) (mLat * 1E6);
lon = (int) (mLon * 1E6);
GeoPoint pt5 = new GeoPoint(lat, lon);
// 构建多边形
Geometry polygonGeometry = new Geometry();
// 设置多边形坐标
GeoPoint[] polygonPoints = new GeoPoint[5];
polygonPoints[0] = pt1;
polygonPoints[1] = pt2;
polygonPoints[2] = pt3;
polygonPoints[3] = pt4;
polygonPoints[4] = pt5;
polygonGeometry.setPolygon(polygonPoints);
// 设置多边形样式
Symbol polygonSymbol = new Symbol();
Symbol.Color polygonColor = polygonSymbol.new Color();
polygonColor.red = 0;
polygonColor.green = 0;
polygonColor.blue = 255;
polygonColor.alpha = 126;
polygonSymbol.setSurface(polygonColor, 1, 5);
// 生成Graphic对象
Graphic polygonGraphic = new Graphic(polygonGeometry, polygonSymbol);
return polygonG
* 绘制单点,该点状态不随地图状态变化而变化
* @return 点对象
public Graphic drawPoint() {
double mLat = 39.98923;
double mLon = 116.397428;
int lat = (int) (mLat * 1E6);
int lon = (int) (mLon * 1E6);
GeoPoint pt1 = new GeoPoint(lat, lon);
Geometry pointGeometry = new Geometry();
// 设置坐标
pointGeometry.setPoint(pt1, 10);
// 设定样式
Symbol pointSymbol = new Symbol();
Symbol.Color pointColor = pointSymbol.new Color();
pointColor.red = 0;
pointColor.green = 126;
pointColor.blue = 255;
pointColor.alpha = 255;
pointSymbol.setPointSymbol(pointColor);
// 生成Graphic对象
Graphic pointGraphic = new Graphic(pointGeometry, pointSymbol);
return pointG
* 绘制圆,该圆随地图状态变化
* @return 圆对象
public Graphic drawCircle() {
double mLat = 39.90923;
double mLon = 116.447428;
int lat = (int) (mLat * 1E6);
int lon = (int) (mLon * 1E6);
GeoPoint pt1 = new GeoPoint(lat, lon);
Geometry circleGeometry = new Geometry();
// 设置圆中心点坐标和半径
circleGeometry.setCircle(pt1, 2500);
// 设置样式
Symbol circleSymbol = new Symbol();
Symbol.Color circleColor = circleSymbol.new Color();
circleColor.red = 0;
circleColor.green = 255;
circleColor.blue = 0;
circleColor.alpha = 126;
circleSymbol.setSurface(circleColor, 1, 3);
// 生成Graphic对象
Graphic circleGraphic = new Graphic(circleGeometry, circleSymbol);
return circleG
* 绘制文字,该文字随地图变化有透视效果
* @return 文字对象
public TextItem drawText() {
double mLat = 39.86923;
double mLon = 116.397428;
int lat = (int) (mLat * 1E6);
int lon = (int) (mLon * 1E6);
// 构建文字
TextItem item = new TextItem();
// 设置文字位置
item.pt = new GeoPoint(lat, lon);
// 设置文件内容
item.text = "百度地图SDK";
// 设文字大小
item.fontSize = 40;
Symbol symbol = new Symbol();
Symbol.Color bgColor = symbol.new Color();
// 设置文字背景色
bgColor.red = 0;
bgColor.blue = 0;
bgColor.green = 255;
bgColor.alpha = 50;
Symbol.Color fontColor = symbol.new Color();
// 设置文字着色
fontColor.alpha = 255;
fontColor.red = 0;
fontColor.green = 0;
fontColor.blue = 255;
// 设置对齐方式
item.align = TextItem.ALIGN_CENTER;
// 设置文字颜色和背景颜色
item.fontColor = fontC
item.bgColor = bgC
protected void onPause() {
mMapView.onPause();
super.onPause();
protected void onResume() {
mMapView.onResume();
super.onResume();
protected void onDestroy() {
mMapView.destroy();
super.onDestroy();
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mMapView.onRestoreInstanceState(savedInstanceState);
[html][/html] view plaincopy
&?xml version="1.0" encoding="utf-8"?&
&LinearLayout xmlns:android="/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" &
&LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" &
android:id="@+id/btn_clear"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:layout_weight="1.0"
android:background="@drawable/button_style"
android:text="清除(clear)" /&
android:id="@+id/btn_reset"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:layout_weight="1.0"
android:background="@drawable/button_style"
android:text="重置(reset)" /&
&/LinearLayout&
&com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" /&
&/LinearLayout&
Manifest配置跟前面一样。
附上图片效果:
本文固定链接:
[上一篇][下一篇]
最新文章随机精彩热门排行
日志总数:3883 篇
评论总数:26802 评
标签数量:4467 个
链接总数:4 条
建站日期:
运行天数:1079 天百度地图api,如何使用自定义layout覆盖物图层?
[问题点数:40分,结帖人asdfwwqfe]
百度地图api,如何使用自定义layout覆盖物图层?
[问题点数:40分,结帖人asdfwwqfe]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。二次元同好交流新大陆
扫码下载App
汇聚2000万达人的兴趣社区下载即送20张免费照片冲印
扫码下载App
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(1546)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_081068',
blogTitle:'Google Map开发系列(十三)——使用地图API实现自定义叠加层 zz',
blogAbstract:'与地图上的控件不同,地图上的叠加层(Overlay)指的是和某个经纬度坐标绑定,能够跟随地图的缩放拖拽而相应移动的DOM原始,地图API文档里定义的GMarker、GPolyline、GInfoWindow都属于叠加层。右边地图上显示的交通信息的图标就是一个叠加层。
先看一段Hello World的代码吧:
var MyOverlay = function(latlng_) {
&& this.latlng = latlng_;
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:0,
publishTime:8,
permalink:'blog/static/',
commentCount:3,
mainCommentCount:3,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}向 Web 地图中添加图层
| ArcGIS Resource Center向 Web 地图中添加图层
在本教程中,您将高速公路和休息站地图服务添加到犯罪对比地图,以评估休息站附近区域的犯罪情况。此类地图称为混合地图:将不同人出于不同原因创建的地图服务根据您自己的需要合并成一张地图。
打开 Web 浏览器并转至 。
如果您已登录,在页面顶部单击“我的内容”。 如果您未登录,请使用您的 ArcGIS 个人帐户登录,然后单击“我的内容”。在“我的内容”页面,单击您在上一教程中保存的地图标题。 将显示地图描述。如果没有在上一教程中保存的地图,登录后按以下步骤操作: 转至
主页。 找到并打开 ArcGISTutorials 提供的 Crime Comparison Map。以新标题保存地图。转至“我的内容”页面。 您的地图将与本教程中的示例略有不同,但不同之处都无关紧要。 在描述页面上单击缩略图打开地图。以新名称保存地图以保留原来的犯罪对比地图。 在功能区上,单击“保存”按钮并选择“另存为”。 赋予地图一个新标题,然后按需要编辑标签和摘要。单击“保存地图”。
向地图添加内容 注册到 ArcGIS Online 的地图服务可作为图层添加到任意地图中。步骤: 在功能区上,单击“添加”按钮,然后单击“搜索图层”。 侧面板显示为搜索图层状态。 在“查找”框中,输入 transportation。确保将“范围”框设置为 ArcGIS Online。 将搜索到已注册到 ArcGIS Online 的地图服务。 单击“开始”。 在结果列表中,找到 Esri 提供的 World Transportation。(应在上方。)单击“添加”将其添加到地图中。 地图上将显示主要道路网络。 在“查找”框中,删除关键字 transportation,然后输入 rest stops。单击“开始”。 在结果列表中,找到 Deane 提供的 USA Rest Areas (Feature Service)。单击地图服务名称查看摘要。 阅读摘要,然后单击“添加到地图”。 在地图上可能看不到任何休息站,因为地图服务具有可见性范围设置。放大时这些要素会显示出来。 在“搜索要添加的图层”面板底部单击“图层添加完毕”。 “内容”面板此时应在地图中显示四个图层。 放大地图直到显示休息区符号。重命名图层和更改符号应该对一些图层名称进行改进,休息区符号也有些刺眼。步骤:
在“内容”面板中,将指针悬停在 World Transportation 图层上方。单击图层名称旁边的箭头打开快捷菜单。选择“重命名”。在“重命名”对话框中,将名称更改为 Streets and Highways,然后单击“确定”。新名称显示在“内容”面板中。 打开 USA Rest Areas - USA_Rest Areas 图层的快捷菜单并选择“重命名”。 将名称更改为 Rest Areas 并单击“确定”。 此地图中的 Rest Areas 图层是要素服务;其他图层(包括底图)是切片地图服务。要素服务将地理数据实时传送到 Web 浏览器;因为提供的是实际数据,您可以更改符号系统和其他图层属性。(如果发布者启用相关功能,您甚至可以创建和编辑要素。)而切片服务将数据的图像发送到浏览器;因为提供的是静态图像,因此可更改的属性不多。 打开 Rest Areas 图层的快捷菜单并选择“更改符号”。
在“更改符号”面板中,单击“更改符号”。 在“更改符号”对话框中,单击下拉箭头将符号集从“标准”更改为“几何图形”。 单击蓝色方块将其选中。 将符号大小设置为 16 px(像素),然后单击“完成”。新符号显示在地图上。 单击右上角的 X 关闭“更改符号”面板。 可使用单一符号绘制要素(如此例所示),如果存在合适属性,也可使用不同的配色方案和大小进行绘制。例如,如果 Rest Areas 图层有一个指定是否可以加油的字段,则可通过设置不同颜色对有无加油站的休息区进行符号化。“更改符号”面板上的“使用”设置允许通过单一符号、唯一符号、颜色或大小对要素进行符号化。设置可见性范围步骤:在功能区上,单击“书签”并选择 USA 48。由于存在可见性范围的设置,休息区符号将消失。 打开 Rest Areas 图层的快捷菜单并选择“设置可见性范围”。只有在地图比例为 1:6,000,000 或更大(即更近)时才会显示休息区。此例中,当前地图比例约为 1:37,000,000。 单击“清除”清除当前设置。您应看到一条提示图层无法完全绘制的消息。在此比例下要素过于拥挤,因此地图没能显示所有要素。 单击“确定”关闭消息框。尽管某些符号并未绘制,地图还是显得非常拥挤。在这种情况下,设置此图层的可见性范围将取得很好的效果。 放大到一个比例,在该比例下地图符号不会让您觉得地图显示过乱。 打开 Rest Areas 图层的快捷菜单并选择“设置可见性范围”。 对于最小比例,单击“应用当前比例”。将最大比例设置保留为 &无&。 您的最小比例可与此例中的最小比例不同。 单击“内容”面板中的空白区关闭快捷菜单。 通过缩放来测试您的可见性范围设置。 保存地图。 登录后,您的 ArcGIS Online 会话将持续两小时。您是否经常使用该站点并不影响此时间限制。经常保存地图,以免会话过时而丢失作业内容。可在登录时单击“保存我的信息”复选框将会话时长延至两周。配置弹出窗口步骤: 单击任一休息区符号打开其弹出窗口。标题包含如下信息:此休息区位于 15 号州际公路的北行方向一侧。您还能看到休息区内的可用设施及其空间坐标。注:弹出窗口标题栏提示当前位置访问的弹出窗口数量。可能存在多个休息区(通常成对分布在道路的两侧)和多个犯罪区域(靠近行政边界)。单击标题栏中的白色箭头查看其他弹出窗口。
再单击几个休息区符号并查看其弹出窗口。使最后打开的弹出窗口保持打开状态。 打开 Rest Areas 快捷菜单并选择“配置弹出窗口”。 侧面板改为显示弹出窗口属性。“弹出窗口标题”框包含 {Description} 字段。此字段标识休息区,如上例中的 Rest Area NB I-15。字段属性列表显示弹出窗口中显示的其他信息。注:此列表中的字段不是全都可用。单击“配置属性”按钮查看完整的字段列表。(有些字段可能有意关闭。) 在“弹出窗口标题”框中,将当前标题替换为 Rest Area Details。 在“弹出窗口内容”下,单击下拉箭头并选择“自定义属性显示”。 单击“配置”按钮。 在“自定义属性显示”对话框中,使用下述工具创建下图所示表达式:单击“添加字段名称”按钮
将字段名称插入大括号中。按 Enter 另起一行。单击“前景色”按钮
选中文本对其应用某种颜色。单击斜体按钮
选中文本将其设置为斜体。如下所示完成自定义显示,或根据需要对其进行修改,然后单击“确定”。在面板底部单击“保存弹出窗口”。保存地图。浏览地图步骤:单击一个休息区符号打开其弹出窗口。单击标题栏中的白色箭头查看此位置的其他弹出窗口。您获得的休息区相关信息以及休息区所在位置的犯罪指数。与休息站关联的犯罪指数值取决于地图比例。如果处于缩小状态,您会看到某县或邮政编码区的犯罪指数。即使某一块组(最详细程度)的指数值也无法指明特定休息站的犯罪情况。请勿一例多用。休息站是有具体特征的单个位置。它可能并不是周围情况的典型代表。放大并单击某个休息站或其附近区域,以获得更小区域(如人口普查区域或块组)的犯罪指数值。继续浏览地图。在感兴趣的位置添加空间书签。保存地图。在功能区上方,单击“我的内容”按钮并选择“我的内容”。现在,“我的内容”页面上应该有两个 Web 地图:在上一教程中创建的犯罪对比地图和刚刚创建的带有休息站的犯罪地图。这是在线地图教程系列的第四部分。}

我要回帖

更多关于 leaflet 自定义图层 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信