你们有没有使用NoSQL(非关系型)数据库存储空间数据的经验?是否有任何潜在的好处(速度,空间......)使用这些数据库来保存桌面应用程序的数据(与使用SpatiaLite或PostGIS相比)?
我已经看过关于将MongoDB用于空间数据的帖子,但我对一些性能比较感兴趣.
我试图在Windows上打开.sqlite文件,但我不知道如何.你知道一个好的计划吗?
它包含用于统计分析的数据,但我更喜欢使用.txt文件.
我也有一个.spatialite文件.你能帮助我吗?
我正在尝试使用Spatialite beta版本3.0,因为我在64位计算机上使用Windows 7.
我sqlite3.OperationalError: The
specified module could not be found.尝试加载时始终遇到可怕的错误
libspatialite-4.dll.
我尝试过以下方法:
libspatialite-4.dll和所有其他dll在同一个文件夹中'PATH'环境变量c:\windows\system32文件夹中的所有dll (完成重启机器)c:\windows\sysWoW64文件夹中的所有dll (完成重启机器,这应该是32位dll,但我还是尝试过)我的代码如下:
import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("libspatialite-4.dll")')
Run Code Online (Sandbox Code Playgroud)
注意 - 我也试过了完整的路径而没有运气.我记得在Windows XP 32位上遇到了同样的问题.我得到它的工作,但不记得我做了什么:(
UPDATE
我已经在32位Windows 7上测试了设置,并将所有dll放在System32文件夹中.因此,这表明64位设置存在一些问题.可能是我需要另一个版本的MSVC(我不认为Spatialite网站说哪个是必要的,所以我可能只需要猜测 - 我安装了MSVC2010)?
我有以下查询:
select distance(GeomFromText('POINT(8 49)',4326),GeomFromText('LINESTRING(8.329969 49.919323,8.330181 49.919468)',4326))
Run Code Online (Sandbox Code Playgroud)
这给了我0.97度.但我需要它以米为单位,并且不知道要转换为哪个SRID.
有人可以举个例子来说明如何以米为单位获得空间效果吗?
这些职位都在欧洲.
我对spaceite非常新.我在Max OS Mountain lion上运行,我安装了SQLite版本3.7.17和libspatialite 4.1.1(使用自制程序)
我可以在SQLite中加载没有错误的扩展libspatialite:
SELECT load_extension('/usr/local/Cellar/libspatialite/4.1.1/lib/libspatialite.dylib');
Run Code Online (Sandbox Code Playgroud)
我可以创建一个简单的表:
sqlite> CREATE TABLE test_geom (
...> id INTEGER NOT NULL
...> PRIMARY KEY AUTOINCREMENT,
...> name TEXT NOT NULL,
...> measured_value DOUBLE NOT NULL);
Run Code Online (Sandbox Code Playgroud)
但是当我添加带有spatialite的Geometry列时,我收到以下消息:
sqlite> SELECT AddGeometryColumn('test_geom', 'the_geom',4326, 'POINT');
AddGeometryColumn() error: unexpected metadata layout
0
Run Code Online (Sandbox Code Playgroud)
我不知道解决这个问题.有人可以帮忙吗?
我需要在x64窗口下创建和访问一个spaceite扩展的SQLite数据库.
我已经下载了所谓的最新版本1.0.92.0 sqlite-netFx45-static-binary-bundle-x64-2012-1.0.92.0.zip 的System.Data.SQLite.它是从我的Visual Studio(2012)项目中引用的,并且它本身似乎工作得很好.
我还有最新的预编译x64 spatiaLite版本4.1.1,名为spatialite-4.1.1-DLL-win-amd64.zip来自spatialite的所有dll都存在于执行目录中.
当我尝试加载扩展时:
using (var conn = new SQLiteConnection("Data Source=\"" + _sqLiteFullName + "\""))
{
conn.Open();
conn.EnableExtensions(true);
conn.LoadExtension("libspatialite-4.dll");
...
}
Run Code Online (Sandbox Code Playgroud)
我得到一个AccessViolationException(试图读取受保护的内存.这通常表明其他内存已损坏)LoadExtension().
我注意到使用PE Deconstructor(确定dll/exe的bitnewss的软件),它说我的System.Data.SQLite.dll(来自x64包)的副本实际上是32位.那是问题吗?
我该如何解决这个问题?
有没有其他人让spatiaLite在x64上工作?
我正在试图为GeoDjango安装Spatialite!
我已经在使用Homebrew了,它通常很简单方便,所以我最初尝试按照Homebrew的说明操作 GeoDjango.
但这不会安装任何数据库,即Spatialite.下一步是尝试安装Spatialite本身,但Django docs没有提供特定于Homebrew的指令.
我发现这个教程看起来很完美 - 一个Homebrew和virtualenv友好的Spatialite for GeoDjango安装.
但它不起作用......似乎我pysqlite与OS X附带的非空间启用的SQLite版本相关联,而不是我从Homebrew安装的Spatial-ised版本,我在Django尝试时遇到此错误连接到db:
"pysqlite库不支持C扩展加载.必须配置SQLite和pysqlite以允许加载扩展以使用SpatiaLite."
pysqlite的作者没有回应我在Github上寻求帮助的请求,我没有通过谷歌找到任何东西.
所以我回到绘图板并决定遵循GeoDjango文档中的"Mac OS X特定指令" ......通过安装KyngChaos二进制包中的各种地理库.
该文件说"在他们上面列出的顺序安装软件包",但我发现我不能安装UnixImageIO,而无需安装PROJ第一.下载Spatialite二进制文件(http://www.gaia-gis.it/spatialite-2.3.1/binaries.html)的文档中的链接已中断,因此我使用了来自KyngChaos的"Spatialite Tools v4.1".
继续下一步,我收到此错误:
$ spatialite geodjango.db "SELECT InitSpatialMetaData();"
SQLite header and source version mismatch
2013-10-17 12:57:35 c78be6d786c19073b3a6730dfe3fb1be54f5657a
2013-09-03 17:11:13 7dd4968f235d6e1ca9547cda9cf3bd570e1609ef
Run Code Online (Sandbox Code Playgroud)
在这一点上不确定是什么问题.
SO上有其他人已经走过了KyngChaos路线并且最终得到了相同的"两个SQLite和pysqlite必须配置为允许加载扩展"错误我从Homebrew路线得到了无论如何.
我发现这张票#17756用于添加pyspatialite对Django的支持 - pyspatialite应该是一种更简单的方式来处理pip install所有事情但不幸的是它也不起作用(请参阅对票底的评论).
我有点不愿意开始尝试从源头开始构建所有内容,因为我似乎可能会再次遇到同样的问题,但花费数小时谷歌搜索有关神秘的编译器错误,魔术标志和路径等的信息.
我准备放弃,只使用Postgres/PostGIS.
我正在尝试使用System.Data.SQLite提供程序从C#访问SpatiaLite.当我尝试加载SpatiaLite扩展时,我总是得到
System.Data.SQLite.SQLiteException: SQLite error
The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
即使已将spatialite的dll复制到bin目录,也会出现错误.我甚至尝试指定dll的绝对路径,但无济于事.
这是代码:
string connectionString = @"Data Source=D:\MyStuff\projects\OsmUtils\trunk\Data\Samples\DB\osm.sqlite";
using (SQLiteConnection connection = new SQLiteConnection (connectionString))
{
connection.Open();
using (SQLiteCommand command = connection.CreateCommand())
{
command.CommandText = @"SELECT load_extension('libspatialite-1.dll');";
command.ExecuteScalar();
}
...
Run Code Online (Sandbox Code Playgroud)
从这个链接我得到的印象应该工作.
提前致谢
我已经实现SupportSQLiteOpenHelper.Factory了打开一个空间数据库(带有空间函数的 sqlite)。但是,当我的查询使用诸如 之类的空间函数时ST_AREA,Room 会抱怨不存在这样的函数。有没有办法告诉房间这些自定义功能或将其配置为跳过功能检查?
这个也与spatilite有关(不仅仅是SQLite)
我有一个文件数据库(xyz.db)我正在使用SQLiteconnection(SQLiteconnection扩展到spatialite).
我有这么多记录需要更新到数据库中.
for (int y = 0; y < castarraylist.Count; y++)
{
string s = Convert.ToString(castarraylist[y]);
string[] h = s.Split(':');
SQLiteCommand sqlqctSQL4 = new SQLiteCommand("UPDATE temp2 SET GEOM = " + h[0] + "WHERE " + dtsqlquery2.Columns[0] + "=" + h[1] + "", con);
sqlqctSQL4.ExecuteNonQuery();
x = x + 1;
}
Run Code Online (Sandbox Code Playgroud)
在上面的逻辑castarraylist是Arraylist其中包含的值需要加工成数据库.
当我检查上面的代码时,在1分钟内更新大约400条记录.
有什么方法可以提高性能吗?
NOTE ::(文件数据库不是线程安全的)
2.开始交易
假设我想在Spatialite中使用单个事务运行两个(或数百万个)更新语句..是否可能?
我在线阅读并为我准备以下声明(但没有获得成功)
BEGIN TRANSACTION;
UPDATE builtuparea_luxbel SET ADMIN_LEVEL = 6 …Run Code Online (Sandbox Code Playgroud)