6 七之阿瑞安赫德

尚未进行身份认证

帮助别人,快乐自己

等级
博文 59
排名 4w+

How it works(12) Tileserver-GL源码阅读(A) 服务的初始化

引入Tileserver-GL(以下简称tileserver),klokantech公司出品的nodejs编写的地图服务,也是我们已经用于生产环境的地图服务.它是少有的开箱即用的且带有图形界面的轻量级地图服务了,这也是我们能快速的将它应用于实际的原因.Tileserver方便且美观的地图渲染且能与maputnik完美结合,这几乎是我第一次找到能完全替代geoserver的组合,而它同时也包含了...

2019-06-22 14:29:42

How it works(11) NodeODM源码阅读(B) 任务控制与任务后处理

任务运行时上一节的最后,通过"TaskManager.singleton().addNew(task);"方法,新建的任务被加入进了任务管理器,自此,任务的一切都交由任务管理器来调控了.由上方的代码可以看出,TaskManager是一个单例实例.原因是保证当Taskmanager(下面简称任务管理器)在不同模块被引用时,都指向唯一的任务管理器实例.//在整个应用启动时,执行TaskManag...

2019-03-22 20:01:19

How it works(10) NodeODM源码阅读(A) 鉴权与任务初始化

引入OpenDroneMap(ODM)是一款非常强大的无人机成果处理软件,可以直接将无人机拍摄的照片处理成正摄影像甚至进行三维建模.ODM本身是基于python的OpenSFM编写的命令行工具,为了方便实际使用,NodeODM出现了.NodeODM是Nodejs编写的一套带有可视化界面的API,实现了通过接口上传图片,修改配置,获取进度等常用功能.因此我们一般用的都是NodeODM,很少会直接...

2019-03-19 22:15:13

How it works(9) GDAL2Mbtiles源码阅读(C) 影像预处理与核心流程

gdal.pygdal.py封装了所需的与gdal相关的操作.主要用来进行切割前的处理.主要操作有投影变换与抽取波段:defpreprocess(inputfile,outputfile,band=None,spatial_ref=None,resampling=None,compress=None,**kwargs):#所有要进行的预...

2019-03-03 13:00:13

How it works(8) GDAL2Mbtiles源码阅读(B) 影像切割与处理

vips.py最重要的切图模块,使用的是libvips这一快速轻量的c++模块的py绑定pyvips,这也是g2m里最大的一个模块.切图主要分为两部分:瓦片分隔波段处理瓦片分割瓦片分割是g2m的核心功能.基本流程是:获取图片(直接使用原片或重采样后的图片)从图片中裁取固定大小计算该部分所属行列号,进行存储.因为实际使用中,基本不可能只取某个特定的级别,因此对于低缩放级别...

2019-03-03 12:59:40

How it works(7) GDAL2Mbtiles源码阅读(A) 框架与存储

引入gdal2Mbtiles是个小工具(以下简称g2m),其作用是将栅格地图(主要是Tiff格式)切成瓦片,存入Mbtiles格式的数据库中,以便于其他支持Mbtiles格式的地图服务器直接调用.一开始我也是为了用它来切割Tiff底图,发布Tileserver-GL服务的,不过用了一下,发现其切图速度比较快.所以想看一下其内部结构.觉得其代码并不简单,也是一个深思熟虑的系统.整体架构通观...

2019-03-03 12:58:54

How it works(6) TileStache源码阅读(B) 自带功能模块

引入TileStache的核心阅读完了,就可以看看具体的功能部分是如何运行的.功能部分有4大类:Caches.pyPixelEffects.pyPixels.pyProviders.py模块Caches.py缓存的使用在上一篇已经看过了:读取缓存不需要锁写入缓存必须先加锁,再写入,再解锁所有的缓存都必须实现如下的方法:savereadlock/unlock...

2019-03-03 12:57:43

How it works(5) TileStache源码阅读(A) 核心框架

引入作为一个维护时间更长久的地图服务器(从2010年至今),Python编写的TileStache有着跟Nodejs编写的Tiletrata不同的设计理念:全面专业.包含较多常用或不常用的专业地理信息功能.配置文件.与Tilestrata的代码即配置不同,TileStache完全基于一个独立的配置文件来调配整个系统.功能相比Tilestrata的只编写框架,功能完全靠插件加载,Til...

2019-03-03 12:57:06

How it works(4) Tilestrata源码阅读(B) 地图负载均衡

引入阅读Tilestrata的源码是绕不开Tilestrata-Balancer(以下简称TB)这个默认的负载均衡服务的.其特性是:支持动态增加,减少节点定时检查节点健康状况简单的请求过滤大多数服务会采取专业的负载均衡或者反向代理,比如常见的nginx.理论上讲,nodejs的http-proxy性能是拍马也不及nginx的,但对于地图瓦片服务,绝大多数瓶颈在瓦片的生成,而非反向代理...

2019-03-03 12:56:11

How it works(3) Tilestrata源码阅读(A)

引入什么是Tilestrata在地图服务领域,我们的选择其实是不多的.商业的首推arcgisserver,开源的一般是mapserver和geoserver.这些专业地图服务其专业性很强,强大到可以满足几乎所有地图需求.不过正是因为有许多我们日常几乎用不到的专业功能,它们都十分的重,无论是从代码结构还是运行消耗(使用java编写的geoserver和arcgisserver尤甚)上.轻量...

2019-03-03 12:55:36

How it works(2) autocannon源码阅读(A)

autocannon是纯node实现的接口压力测试工具,市面上类似的产品很多,老牌的AB,带有图形界面的soapui等.不过autocannon可以方便的进行命令行调用,甚至在代码内调用,这对于nodejs项目的单元测试来说是相当方便的.下面就来简单分析一下他的源码.综述上一篇我对winston框架做了源码分析,其核心关键词是流,通过流将模块链接起来.而对于autocannon,关键词是...

2019-03-03 12:54:41

How it works(1) winston3源码阅读(A)

winston是我在nodejs下最常用的日志框架,那么他到底是如何工作的呢?winston的运行核心winston中有两个关键词:记录器(logger)和传输器(transport).记录器负责收集/修饰分配进入的每一条日志,传输器则负责最终把日志记录到的哪,整个winston其实就是多个流(stream)的链式调用.记录器继承了交换流(transform),而传输器...

2019-03-03 12:53:11

Sequelize的原始查询的时区问题

在postgres数据库sequelize的rawquery也是受时区影响的.同样的语句,用sequelize直接执行某些跟时间相关的query和在数据库执行是不一样的.语句如下:updatetable_Asetis_enable=1whereEXTRACT(hourfromnow())+(EXTRACT(MINUTEfromnow()))/60>=start_...

2018-10-26 09:57:31

从零开始的Docker ELK+Filebeat 6.4.0日志管理

我们自己的地图服务会打印如下json格式的日志:(时间字段和位置字段已针对ELK的处理){"apikey":"XXXXXXX","ip":"192.168.3.208","tilesize":"512","x":100,"y&quo

2018-09-28 08:32:50

C#修改JPG图片EXIF信息中的GPS信息

///<summary>///设置图片的经纬高///</summary>///<paramname="IN_File">文件路径</param>///<paramname="IN_Lat">纬度</param&amp

2018-03-13 11:26:04

记一次断电恢复ORA-01033错误

客户的电脑因为频繁断电,造成orcle无法连接,报ORA-01033:oracle初始化或者关闭错误.按照传统方法进入cmdsqlplussys/password@userassysdba可以连接.关闭数据库shutdownimmediateORA-01109:数据库未打开已经卸载数据库。ORACLE例程已经关闭。再重新打开,就打不开了,提示

2017-01-04 16:39:13

Arcsde报ora-29861: 域索引标记为loading/failed/unusable错误

连接数据库的软件在编辑要素时突然报出这个错误:解决方法很简单,找出错误索引,再删除这个错误索引.先执行selectowner,index_namefromall_indexeswheredomidx_status!='VALID'ordomidx_opstatus!='VALID';找出所有错误的,然后删除它们dropindexCONTR

2016-12-27 11:53:51

DEV TreeList的节点设置

存个档,以后直接用了。基本做到:1.选中父节点,子节点根据父节点选中状态调整自身状态。2选中子节点,父节点根据子节点的兄弟节点的状态调整自身状态。privatevoidtreeList1_BeforeCheckNode(objectsender,DevExpress.XtraTreeList.CheckNodeEventArgse){

2016-10-25 09:12:27

Arcsde表空间自动增长

Pl/Sql中执行"alterdatabasedatafile'E:\app\Administrator\product\11.2.0\dbhome_1\database\SDE_TBS'autoextendon;"E:\app\Administrator\product\11.2.0\dbhome_1\database\SDE_TBS为表空间所在位置、SDE_TBS为默认表空间名称

2016-10-09 13:32:46

提取面狭长角

提取面要素类中出现狭长角的要素privatevoidPRV_CheckSliver(IFeatureClassIN_Featureclass){ListTemp_AllError=newList();//记录所有错误OID//提取所有要素IFeatureCursorTemp_GetEachFeature=IN_F

2016-08-20 16:41:36
奖章
    暂无奖章