Esri wkt字符串转proj.4 字符串的方法

使用gdal/ogr库进行转换

import os
import sys
import string
import osgeo.osr
prjfile=’~/proj4.prj’
srs.SetFromUserInput(prj
file)
srs.MorphFromESRI()
proj4 = srs.ExportToProj4()
print proj4

esri Leave a comment

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:

gis, 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

gis, OpenSource Leave a comment

基于Mapbox+osrm的iOS离线导航解决方案

osrm(project-osrm.org)一个c++的route类库,他提供了osm-route方法使其作为服务器运行,同时也提供了libosrm库,供用户以API的方式使用。

由于osrm是一个纯c++的库,因此就具备了移植到iOS的可能。

同时mapbox提供的directions功能也是基于osrm的,因此可以将离线的osrm route结果直接给osrm使用,然后再给mapbox的navigator使用。

上个demo

IMG_1415

iOS, OpenSource Leave a comment

Kong 介绍

Kong,是一款基于lua的API管理软件。能够注册、管理API,能够提供API的验证访问。Kong本质上始一个反向代理软件,类似于ngnix,但比nginx提供了更简单的配置方式(REST接口)。
Kong的主页为:https://getkong.org/

Kong的安装

kong支持在大多数linux平台、mac osx上安装。还提供了docker镜像,用户可以直接下载使用。
kong的安装比较简单,直接选择对应的平台安装包下载安装即可,当然也可以通过source code编译安装。code的地址为:https://github.com/Mashape/kong

kong的配置

kong使用前要首先配置数据库,目前kong支持”cassandra”, “postgres”,配置文件中默认使用cassandra。本文中使用postgres。

安装数据库

首先安装postgres,然后创建名字为kong的user

createuser  kong -P

然后创建名字为kong的数据库

createdb kong -O kong -E UTF8 -e

配置数据库

打开 /etc/kong/kong.yml 文件,找到数据库配置的相关位置,配置如下

postgres:
host: "127.0.0.1"
port: 5432
user: kong
password: kong
database: kong

保存配置文件即可

启动kong

 $ kong start

####验证kong是否启动成功 在start后,命令行会提示([OK] Started)
默认情况下,kong的代理端口为8000,管理员REST接口的端口为8001

关闭kong

 $ kong stop

重新加载kong

 $ kong reload

kong的使用

kong可以通过REST接口来进行管理,下面的代码就是添加一个API:

  $ curl -i -X POST \
  --url http://localhost:8001/apis/ \
  --data 'name=mockbin' \
  --data 'upstream_url=http://mockbin.com/' \
  --data 'request_host=mockbin.com'

使用REST的方式对于初学者来说很费劲,幸好很多热心群众提供了kong的UI界面来帮助我们使用Kong。这里我推荐 kong-dashboard https://github.com/PGBI/kong-dashboard

kong-dashboard 安装

  # Install Kong Dashboard
npm install -g kong-dashboard

# Start Kong Dashboard
kong-dashboard start

# To start Kong Dashboard on a custom port
kong-dashboard start -p [port]
cloud Leave a comment

ERROR: SQLite database is malformed 的解决方法

原文地址:http://froebe.net/blog/2015/05/27/error-sqlite-database-is-malformed-solved/

//检查数据
sqlite> pragma integrity_check;
Error: database disk image is malformed
//把数据dump出来
sqlite> .mode insert
sqlite> .output mydb_export.sql
sqlite> .dump
sqlite> .exit

//备份数据库
mv mydb.db mydb.db.original

//导入数据
sqlite3 mydb.db < mydb_export.sql
//重建索引
sqlite> analyze;
sqlite> .exit
linux, Mac OS X Leave a comment

proj.4 字符串转成Esri wkt字符串的方法

proj.4 字符串转成Esri wkt字符串的方法
使用gdal/ogr库进行转换
import os
import sys
import string
import osgeo.osr

if (len(sys.argv) <> 2):
print ‘Usage: proj2wkt.py [Proj4 Projection Text]’
else:
srs = osgeo.osr.SpatialReference()
srs.ImportFromProj4(sys.argv[1])
srs.MorphToESRI() //重点,转成Esri的wkt格式
print srs.ExportToWkt()

ArcGIS Leave a comment

ITMS-90096错误解决

如果你的App的启动页面采用Launch Screen.storyboard的话,上传到AppStroe会导致ITMS-90096错误,提示

your binary is not optimized for iphone 5

解决这个问题有两种方案,如果需要支持iOS7及以下系统,使用老的Launch Image方案,制作各个尺寸的启动图片,并加载到App中。
第二种方案,如果不必要支持iOS7 及以下版本,直接将Depolyment target 设置为iOS8,并将Launch Screen.storyboard文件重命名为LaunchScreen.storyboard。注意只是去掉空格。
参考资料: http://stackoverflow.com/questions/27136053/cant-submit-the-app-with-storyboard-launch-images-to-the-app-store-your-binary

 

App Leave a comment

Numeric Character Reference转NSString

在处理数据的时候,有时候会遇到 &# 开头的数据,例如Σ那么这个是 Numeric Character Reference编码。
NCR编码是由一个与号(&)跟着一个井号(#), 然后跟着这个字符的Unicode编码值, 最后跟着一个分号组成的, 如:

&#nnnn;
或者
&#xhhhh

其中, nnnn是字符编码的十进制表示, 而hhhh是字符的16进制表示.
在ios中处理这种编码有两种方法,一种使用NSAttributedString的方式,这种比较简单,但是处理极慢。另外一种就是自己写编码转换。
两种实现的代码如下:

-(NSString *)toUnicodeString
{

    NSMutableString *srcString =    [[NSMutableString alloc]initWithString:self];
    if ([srcString containsString:@"&#"]) {
        [srcString replaceOccurrencesOfString:@"&#" withString:@"" options:NSLiteralSearch range:NSMakeRange(0,     [srcString length])];

    NSMutableString *desString = [[NSMutableString alloc]init];

    NSArray *arr = [srcString componentsSeparatedByString:@";"];

    for(int i=0;i&lt;[arr count]-1;i++){

        NSString *v = [arr objectAtIndex:i];
        char *c = malloc(3);
        int value = [v intValue];
        c[1] = value  &0x00FF;
        c[0] = value &gt;&gt;8 &0x00FF;
        c[2] = '\0';
        [desString appendString:[NSString stringWithCString:c encoding:NSUnicodeStringEncoding]];
        free(c);
    }

    return desString;
}
else
{
    return self;
}

}
-(NSString *)toUnicodeString2
{

NSError * error=nil;
NSData *encodedData = [self dataUsingEncoding:  NSUTF8StringEncoding];
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType};

NSAttributedString *attributedString = [[NSAttributedString alloc] initWithData:encodedData options:options documentAttributes:nil error:&error];

return [attributedString string];
}
App, Mac OS X Leave a comment

自定义ArcGIS矢量底图

目前Esri已经在ArcGIS Online上发布了矢量底图,用户可以通过修改Style的方式来自定义矢量底图。
用户编辑后的矢量底图还可以发布成新的图层,供用户使用。
用户自定义的内容包括:
1 控制图层的显示
2.修改图层的符号和显示
3.在选定区域修改语言选项
4.在选定地区修改争议地区的显示

自定义Style示例

下图就是由一个自定义矢量底图的例子,由现有由矢量底图修改而来。


修改的内容主要包括:
1.背景颜色和水系颜色由 ‘#cfcfd4′改成 ‘#a6deff’
2.土地和植被的填充颜色由‘#ededed’ 改成 ‘#dfffd9′
3.城区颜色由‘#e8e8e8′ 改成 ‘#d5e3ca’
由于上面的图层在不同的显示级别都有可能显示,所以修改的不止一处。

创建使用自定义矢量底图的地图

创建新的Tile Layer

1.登录到ArcGIS Online,点击Map,打开Map窗口
2.添加矢量瓦片图层,点击Add按钮,选择Search for Layers in ArcGIS Online,输入“esri vector basemap”,点击GO按钮

3.选择owner为‘esri_vector’的任意一个图层,然后点击Add按钮
4.在TOC面板中,点击刚才添加的图层的More Option按钮,选择Copy

5.点击刚才Copy的图层的More Option选项,选择Save Layer按钮,将图层保存Online中

修改新建图层的Style

1.点击上一步新生成的图层的More Option选项,选择Show Item Details选项
2.在Item详情页面的Open选项中选择Download Style选项,将Style文件下载到本地
3.编辑Style文件。打开root.json文件,并编辑该Style文件,保存或另存文件。

Esri的矢量底图使用Mapbox vector tile specification (v8),用户可以参考 Mapbox GL Style Reference来修改底图样式。
4.更新图层的Style。在Item详情页面中点击Update按钮,选择刚才修改的style文件,上传即可。
5.查看修改后的变化。在Item详情页点击Open,选择Add layer to map即可查看

ArcGIS Leave a comment