Archive for the Category: gis

GeoMesa架构

GeoMesa架构 GeoMesa支持多种可扩展的、基于云端的数据存储架构,包括Apache Accumulo, Apache HBased,Google Cloud Bigtable以及用于流计算的Apache Kafka 。同时GeoMesa还可以和Apache Storm一起处理流数据,并使用Spark进行空间分析。 GeoMesa架构如图1: GeoMesa和GeoServer GeoMesa以GeoServer插件的形式为GeoServer提供了读取GeoMesa表的功能。在GeoServer中,GeoMesa表作为一种数据源存在,通过GeoServer,用户可以通过WMS/WFS的形式访问GeoMesa的数据。 GeoMesa表作为数据源,如图2: 与GeoMesa集成 为了方便用户使用GeoMesa中存储的数据,GeoMesa通过实现GeoTools接口,提供了使用OGC标准服务接口访问数据的能力,实现的OGC标准有: Web Feature Service (WFS) Web Mapping Service (WMS) Web Processing Service (WPS) Web Coverage Service (WCS) GeoMesa提供了多种导入数据的方式,包括GeoMesa命令行工具,Hadoop的map-reduce作业以及Apache Storm的实时数据流,如图3: GeoMesa的查询流程图如图4,通过GeoMesa API或GeoTools API,查询操作从Accumulo中数据读出: 键值对存储和Z曲线 GeoMesa的数据存储使用 key-value数据库。key-value数据库是一种NoSQL数据库,其数据按照键值对的形式进行组织、索引和存储。 Accumulo,HBase和Google Cloud Bigtable对这些键进行排序,并可将它们存储在任意数量的节点(服务器)上。 当使用key-value数据库时,Key的良好设计可以使应用程序更高效的运行。与关系数据库不同的是,key-value数据库中会频繁的使用key进行查询。例如在订单数据库中,会以订单号作为key进行存储,当用户查询订单的时候,即可用通过订单号直接查询到订单数据并返回该条数据。Accumulo,HBase和Cloud Bigtable都是使用类似的机制进行工作,GeoMesa同样也是使用该机制来进行数据组织。GeoMesa根据时空数据的特点,实现了生成包含时空信息的Key的算法,算法的基本思想如图5: 图中的红线被称为空间填充曲线,又称为Z曲线。该线顺序访问每个单元格一次,并且能够保证访问次序的唯一性。 Z曲线也能用于高分辨率地图,如图6: Z曲线上的每个点都可以赋予一个顺序值,通过这个顺序值,GeoMesa将经纬度表示为一个整数,这样就将二维数据降为一维数据,可以作为key-value数据库中的key使用。因为Z曲线支持多维数据,所以GeoMesa也支持将多维数据降为一维数据,作为key使用。 GeoMesa 索引 GeoMesa 索引的基本原理计算将三维(经度、纬度、时间)的数据按照Z曲线进行降维,得到一维数据作为Key使用,方便在key-value数据库中进行查询。 实际的Key结构比简单的键值对更复杂。在Accumulo中GeoMesa索引的结构如图7:

Also posted in OpenSource Leave a comment

GeoMesa介绍

GeoMesa 是由locationtech开源的一套地理大数据处理工具套件。其可在分布式计算系统上进行大规模的地理空间查询和分析。使用GeoMesa开源帮助用户管理、使用来自于物联网、社交媒体、手机应用的海量的时空(spatio-temporal)数据。 GeoMesa支持将海量的时空数据存储到Accumulo,HBase,Google Bigtable和Cassandra数据库中,并提供高效的索引来读取、查询这些数据。并支持通过指定空间条件(距离和范围)来快速查询。另外GeoMesa还基于Apache Kafka提供了时空数据的近实时流处理功能。 通过和GIS Server(GeoServer)的整合, GeoMesa 提供了通过标准OGC接口(WMS/WFS)访问数据的能力,通过这些接口,用户可以方便对GeoMesa处理的数据进行展示和分析,比如查询、直方图、时间序列分析等。 为什么选择GeoMesa 能够存储和处理海量时空数据 支持实时性强、需要快速读写的数据 支持spark分析 支持水平扩展 通过GeoServer提供地图服务,并支持Common Query Language (CQL) 项目地址 http://www.geomesa.org/‘ 授权 GeoMesa使用Apache License Version 2.0协议。 http://apache.org/licenses/LICENSE-2.0.html

Also posted in OpenSource Leave a comment

2张图教你认识世界人口分布

下面图中,蓝色区域生活着世界上大概5%的人口,红色区域同样生活着5%的人。 蓝色区域主要是高山、极地和沙漠等不适合人类居住的区域,这包括整个大洋洲、北美的加拿大以及北欧部分地区。 红色区域为世界上人口最稠密的地图,包括孟加拉国和印度的三个地区:比哈尔邦,恰尔肯德邦和西孟加拉邦。这里的人口越3.9亿。 下面这张图,同样是将世界5%的人口进行极化分布制图,其中蓝色部分约占地球面积的72%。而地图上的17个红点则同样生活着约5%的人口。  

Leave a comment

高德位置纠偏服务

众所周知,国内地图都是经过偏移的数据,那么想要把用户自己的数据添加上去,必须通过偏移才可以。 目前高德提供了位置纠偏服务,但隐藏的比较深,在主页面上没有提供,在论坛中提供了相关API。 相关网址:http://lbsbbs.amap.com/forum.php?mod=viewthread&tid=724&highlight=%E5%9D%90%E6%A0%87%E8%BD%AC%E6%8D%A2 一.适用对象: 苦苦纠结于如何将GPS、mapbar、baidu坐标转换为高德坐标系的开发者们。 二.转换方法: 首先当然还是需要人手一个的百宝key。注意:权限君升级权限系统后,调用坐标转换接口的童鞋们需要重新申请。注意:绑定服务需选择web服务API: 2.      调用坐标转换接口,接口请求攻略如下: 1)  服务协议为GET请求 2)  请求地址:http://restapi.amap.com/v3/assistant/coordinate/convert?parameters 3)  请求参数: 名称 含义 规则说明 是否必须 key 用户唯一标识 官网申请,用户唯一标识 必填 locations 坐标点 经度和纬度用”,”分割,经度在前,纬度在后,经纬度小数点后不得超过6位。多个坐标点间用”;”进行分隔 必填 coordsys 原坐标系 可选值:gps;mapbar;baidu 请求坐标加密,返回加密结果。 必填 output 返回数据类型 可选值:json(默认),xml 可选 URL示例: http://restapi.amap.com/v3/assistant/coordinate/convert?locations=116.481499,39.990475&coordsys=gps&output=xml&key=您申请的key 3.      通过简单的http请求,即可以愉快地完成坐标转换的任务。

Leave a comment

高斯坐标计算器App上线

下载地址:https://itunes.apple.com/us/app/gao-si-zuo-biao-ji-suan-qi/id1001469566?ls=1&mt=8 主要特征: 1支持输入经纬度直接在地图上定位。 2 支持长按地图拾取坐标。 3 根据用户位置、用户输入的经纬度和用户拾取的坐标计算对应的3度分带和6度分带的高斯坐标、带号和中央经线。 4支持将计算结果通过邮件分享。 5 支持标准、影像和混合地图的切换。 注意:高斯坐标仅在中国范围内有效。 系统截图:  

Leave a comment

使用QGIS的脚本批量进行clip操作

在QGIS中本身提供了批量执行clip的工具,但是在设置输出参数的时候需要一个一个的输入,很麻烦,并且容易出错,特别是在图层要按地区不停的clip的时候,简直是无法忍受,还好可以自定义脚本,脚本如下: input=r’/Users/a/Documents/data/shp/’ output=r’/Users/a/Documents/data/clip/’ admin=r’/Users/a/Documents/data/admin.shp’ processing.runalg(“qgis:clip”, admin,input+’a.shp’,output+’a.shp’) processing.runalg(“qgis:clip”, admin,input+’b.shp’,output+’b.shp’) processing.runalg(“qgis:clip”, admin,input+’c.shp’,output+’c.shp’) processing.runalg(“qgis:clip”, admin,input+’d.shp’,output+’d.shp’) processing.runalg(“qgis:clip”, admin,input+’e.shp’,output+’e.shp’) processing.runalg(“qgis:clip”, admin,input+’f.shp’,output+’f.shp’) processing.runalg(“qgis:clip”, admin,input+’g.shp’,output+’g.shp’) processing.runalg(“qgis:clip”, admin,input+’h.shp’,output+’h.shp’) 使用该脚本的时候,只要重新设置一下目录和clip图层即可批量完成。 同样的对于批量投影等操作也可以这么操作。 使用ogr2ogr工具也可以实现通过python脚本批量clip,但由于实在是太慢,无法忍受,遂放弃。

Leave a comment

使用GDAL/OGR包+python将CSV转成shapefile并投影

在处理数据的时候,很多时候原始数据都是csv格式,分析的时候使用shapefile比较方便。特别是在mac系统上没有arcgis,处理大量数据的时候用qgis一个一个点很麻烦,于是写了个python脚本处理。 首先安装gdal的python安装包: sudo easy_install GDAL 安装好之后就可以使用GDAL/OGR来进行数据处理了,脚本如下: import osgeo.ogr as ogr import osgeo.osr as osr from osgeo import gdal import csv def poiMake(csvpath,shp,layerName): gdal.SetConfigOption(“GDAL_FILENAME_IS_UTF8″,”NO”) gdal.SetConfigOption(“SHAPE_ENCODING”,””) source = osr.SpatialReference() source.ImportFromEPSG(4326) target = osr.SpatialReference() target.ImportFromEPSG(3857) reader = csv.DictReader(open(csvpath,”rb”),delimiter=’,’,quoting=csv.QUOTE_MINIMAL) driver = ogr.GetDriverByName(“ESRI Shapefile”) data_source = driver.CreateDataSource(shp) layer = data_source.CreateLayer(layerName, target, ogr.wkbPoint) field_name = ogr.FieldDefn(“en”, ogr.OFTString) field_name.SetWidth(100) layer.CreateField(field_name) field_cn = […]

Leave a comment

坐标拾取器App上线

AppStroe 地址: https://itunes.apple.com/us/app/zuo-biao-shi-qu-qi/id989627915?ls=1&mt=8 1支持输入经纬度直接在地图上定位。 2 支持长按地图拾取坐标。 3 根据用户位置、用户输入的经纬度和用户拾取的坐标计算对应的高斯坐标、国家标准图幅号和对应的地址。 4支持将拾取结果通过邮件分享。 5 支持标准、影像和混合地图的切换。 扫二维码下载

Also posted in ios app Leave a comment

spatialite使用空间索引

spatialite提供了R*tree索引。 spatialite的空间索引需要显式的调用,而不像postGIS等那样默认调用。spatialite的空间索引是基于sqlite的virtual table技术实现的。 要使用spatialite的空间索引,首先要创建SpatialIndex表 CREATE VIRTUAL TABLE SpatialIndex USING VirtualSpatialIndex(); 创建索引: SELECT CreateSpatialIndex(‘councils’,’Geometry’) 使用索引: SELECT c.Name AS Name, SUM(s.sales) AS “Total Sales” FROM councils AS c, stores AS s WHERE ST_Contains(c.Geometry, s.Geometry) AND s.ROWID IN (SELECT ROWID FROM SpatialIndex WHERE f_table_name=’stores’ AND search_frame=c.Geometry) GROUP BY c.pk_uid; 注意,空间索引的显式调用 s.ROWID IN (SELECT ROWID FROM SpatialIndex WHERE f_table_name=’stores’ […]

Leave a comment

spatialite 介绍

spatialite 是一个基于sqlite的开源类库,改类库实现了sqlite的空间扩展,支持sql语句的空间操作。 目前spatialite的最新版本是3.0.1,官方主页为http://www.gaia-gis.it/gaia-sins/ 对于目前如火如荼的移动互联网来说,大部分移动平台都内置提供了sqlite的存储和访问,因此我们可以把spatialite编译到移动平台上,这样移动平台就有了空间数据的支持,并通过比较友好的方式进行数据的读取和存储。

Also posted in spatialite 1 Comment