持续更新
Map 类添加的扩展,所以可以直接在 Map 的实例中使用以下函数 /**
* 所有图层组,不要尝试自行使用
*/
layerGroups: Dict<string, LayerGroup>
/**
* 所有图层组的图层id合集
*/
getAllGroupLayerIds(): string[]
/**
* 创建图层组
* @param id 图层组id
*/
addLayerGroup(id: string): LayerGroup
/**
* 获取图层组
* @param id 图层组id
*/
getLayerGroup(id: string): LayerGroup | undefined
/**
* 删除图层组
* @param id 图层id
*/
removeLayerGroup(id: string): void
addLayerGroup 方法创建的实例(LayerGroup类型)又可以对单图层进行添加、删除、是否显示等操作,具体请在仓库example中查看把?。下面展示一下效果,很方便的将 文字(symbol)、线(line)、面(fill)同时显示和隐藏。 setTimeout(() => {
setInterval(() => {
group.show = !group.show;
}, 1000)
}, 1000);

const map = new mapboxgl.Map({...});
map.addControl(new MeasureControl(options)) // 参数可以为空,或自行配置
鼠标操作

样式
可以通过 options 中的参数自行调整
export interface MeasurePointOptions {
textSize?: number, // 经纬度文字的大小
pointSize?: number, // 点大小
textColor?: string, // 文字颜色
textOffsetY?: number, // 文字在众方向上的偏移
pointColor?: string, // 点颜色
createText?: (lng: number, lat: number) => string //文字创建
}
export interface MeasureLineStringOptions {
lineColor?: string, //线颜色
lineWidth?: number, // 线宽
segmentPointColor?: string, // 端点颜色
segmentPointSize?: number, // 端点大小
textOffsetY?: number, // 文字在纵方向上的偏移
segmentTextSize?: number, // 端点(距离求和)文字的大小
segmentTextColor?: string, // 端点(距离求和)文字的颜色
showCenterText?: boolean, // 是否显示线段中间文字(线段长度)
centerTextSize?: number, // 线段中间文字(线段长度)大小
centerTextColor?: string, // 线段中间文字(线段长度)颜色
createText?: (length: number) => string // 计算长度显示的文字,length 单位为千米(km)
}
export interface MeasurePolygonOptions {
polygonColor?: string, // 内部颜色
polygonOpacity?: number, // 内部颜色透明度
polygonOutlineColor?: string, // 边框颜色
textSize?: number, // 文字大小
textColor?: string, // 文字颜色
createText?: (area: number) => string // 创建面积文字,area为平方米
}
export interface MeasureControlOptions {
btnBgColor?: string // 按钮背景颜色
btnActiveColor?: string // 按钮激活颜色
svgHoverColor?: string // 图标hover颜色
geometryClick?: boolean // 图形是否可以点击
enableModes?: MeasureType[] // 允许的测量模式,默认所有
measurePointOptions?: MeasurePointOptions // 测量点选项
measureLineStringOptions?: MeasureLineStringOptions // 测量线选项
measurePolygonOptions?: MeasurePolygonOptions // 测量面选项
}
你也可以使用那三个测量类自定义ui,在 MeasureBase 这个抽象类中可以找到所有的公开方法,很简单?
测量新功能

map.addControl(new BackToOriginControl({
//eastToOptions:{}
}))

切换到卫星影像
可以自定义 textColor backgroundImage 和显示名字 name
附加图层
通过配置extraLayers参数,激活附加图层ui,提供图层分组功能,组与组之间图层的显隐不互斥,组可以通过mutex直接设置各个图层互斥,也可以在非互斥组内配置LayerItem的mutex参数设置该图层与其他图层互斥。
您还可以通过设置active属性设置图层默认加载到地图(显示),但这个active会在初始化控件时检查互斥是否正确,如果互斥组内存在一个以上的active图层或者非互斥组内存在一个互斥图层以及其他的active图层,则抛出异常。
map.addControl(new SwitchMapControl({
satelliteOption: {
textColor: 'white',
//backgroundImage: '/relics.png'
},
extraLayers:{
'foo':{
}
}
}));

为圈选做的控件,模仿画笔在地图上画出多边形,在回调中配置扩展逻辑
map.addControl(new DoodleControl({
name: '', // 控件名字
reName : '', // 重绘名
exitText : '', // 退出文本
lineColor : '', //线颜色
lineWidth : 1, // 线宽
polygonColor: '', // 多边形颜色
polygonOpacity : 1, // 多边形透明度
// 绘制开始
onStart: () => { measureControl.stop() },
// 绘制多边形完成
onDrawed: polygon => { () => { alert(JSON.stringify(polygon)) } },
// 清空回调
onClear:()=>{},
// 退出回调
onExit:()=>{}
}))

如果您觉得还不错,欢迎star ???
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我想这样组织C源代码:+/||___+ext||||___+native_extension||||___+lib||||||___(Sourcefilesarekeptinhere-maycontainsub-folders)||||___native_extension.c||___native_extension.h||___extconf.rb||___+lib||||___(Rubysourcecode)||___Rakefile我无法使此设置与mkmf一起正常工作。native_extension/lib中的文件(包含在native_extension.c中)将被完全忽略。
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"
这个问题有两个部分。在RubyProgrammingLanguage一书中,有一个使用模块扩展字符串对象和类的示例(第8.1.1节)。第一个问题。为什么如果您使用新方法扩展类,然后创建该类的对象/实例,则无法访问该方法?irb(main):001:0>moduleGreeter;defciao;"Ciao!";end;end=>nilirb(main):002:0>String.extend(Greeter)=>Stringirb(main):003:0>String.ciao=>"Ciao!"irb(main):004:0>x="foobar"=>"foobar"irb(main):
假设我们有A、B、C类。Adefself.inherited(sub)#metaprogramminggoeshere#takeclassthathasjustinheritedclassA#andforfooclassesinjectprepare_foo()as#firstlineofmethodthenrunrestofthecodeenddefprepare_foo#=>prepare_foo()neededhere#somecodeendendBprepare_foo()neededhere#somecodeendend如您所见,我正在尝试将foo_prepare()调用注入
显然在Test::Unit中没有assert_false。您将如何通过扩展断言并添加文件config/initializers/assertions_helper.rb来添加它?这是最好的方法吗?我不想修改test/unit/assertions.rb。顺便说一句,我不认为这是多余的。我使用的是assert_equalfalse,something_to_evaluate。这种方法的问题是很容易意外使用assertfalse,something_to_evaluate。这将始终失败,不会引发错误或警告,并且会在测试中引入错误。 最佳答案
这个问题在这里已经有了答案:Unabletoinstallgem-Failedtobuildgemnativeextension-cannotloadsuchfile--mkmf(LoadError)(17个答案)关闭9年前。嘿,我正在尝试在一台新的ubuntu机器上安装rails。我安装了ruby和rvm,但出现“无法构建gemnative扩展”错误。这是什么意思?$sudogeminstallrails-v3.2.9(没有sudo表示我没有权限)然后它会输出很多“获取”命令,最终会出现这个错误:Buildingnativeextensions.Thiscouldtakeawhi
我在引擎样式插件中有一些代码,其中包含一些模型。在我的应用程序中,我想扩展其中一个模型。通过在初始值设定项中包含一个模块,我已经设法将实例和类方法添加到相关模型中。但是我似乎无法添加关联、回调等。我收到“找不到方法”错误。/libs/qwerty/core.rbmoduleQwertymoduleCoremoduleExtensionsmoduleUser#InstanceMethodsGoHere#ClassMethodsmoduleClassMethodshas_many:hits,:uniq=>true#nomethodfoundbefore_validation_on_crea
我正在尝试将Ruby1.9.3应用程序升级到2.0,除了一个小问题外,一切似乎都很顺利。我写了一个模块,我将其包含在我的模型中以覆盖activerecorddestroy。它将现有的destroy方法别名为destroy!,然后覆盖destroy以更改记录上的deleted_at时间戳。仅当我升级到ruby2.0时,destroy!不再破坏记录,但其行为就像我的新覆盖方法一样。知道为什么会这样吗?下面是更相关的代码部分。完整要点here.defself.included(base)base.class_evaldoalias_method:destroy!,:destroyalia