我正在查看Spatialite-Android的教程,我注意到以下代码示例:
String query = "SELECT AsText(Transform(MakePoint(" + TEST_LON + ", " + TEST_LAT + ", 4326), 32632));";
sb.append("Execute query: ").append(query).append("\n");
try {
Stmt stmt = db.prepare(query);
if (stmt.step()) {
String pointStr = stmt.column_string(0);
sb.append("\t").append(TEST_LON + "/" + TEST_LAT + "/EPSG:4326").append(" = ")//
.append(pointStr + "/EPSG:32632").append("...\n");
}
stmt.close();
} catch (Exception e) {
e.printStackTrace();
sb.append(ERROR).append(e.getLocalizedMessage()).append("\n");
}
Run Code Online (Sandbox Code Playgroud)
特别是,我注意到,简单地将SQL查询串联在一起,而不是更合适的方法,例如Android SQLite库使用的方法.有没有办法让Spatialite使用真正准备好的语句?
为了清楚起见,我正在寻找类似的东西,使用Android中的标准SQLite数据库:
String query="SELECT * FROM table WHERE _id=?";
Cursor data=db.rawQuery(query,new String[]{id});
Run Code Online (Sandbox Code Playgroud) 我知道之前有过类似的问题.但是,我在此发现的所有问题都涉及一些非常具体的系统设置,这些设置不适合我(因为我的也是如此).
系统:
如何激活' spatialitesqlite3'模块的扩展名?
我尝试了什么(类似问题的其他人说它有效的方式):
然后,跑步
import sqlite3
conn = sqlite3.connect(":memory:")
conn.enable_load_extension(True)
conn.execute('SELECT load_extension("libspatialite-2.dll")')
Run Code Online (Sandbox Code Playgroud)
给
conn.execute("SELECT load_extension('libspatialite-2.dll')")
sqlite3.OperationalError: The specified module could not be found.
Run Code Online (Sandbox Code Playgroud)
我还能尝试做些什么呢?
在创建空间表并使用RecoverGeometryColumn函数恢复几何时,如果未将几何列指定为小写,则最终会出现"违反几何约束[不允许geom-type或SRID]"错误.
我做错了什么或者我错过了某些文件吗?
我刚开始使用Android并使用Spatialite而无法弄清楚为什么我的应用程序因为这个错误而在一些设备上崩溃:
java.lang.UnsatisfiedLinkError:在jsqlite.Database的jsqlite.Database.internal_init(本机方法)中找不到void jsqlite.Database.internal_init()(尝试过Java_jsqlite_Database_internal_1init和Java_jsqlite_Database_internal_1init__)的实现.(Database.java:25)
此崩溃报告来自带有Android 6.0的Nexus 5(hammerhead),但已在Xoom上报告了Android 4.1和其他一些未知设备.我认为它可能与这些问题中提到的NDK版本有关:
将".so"库添加到我的android工作室项目
Android NDK java.lang.UnsatisfiedLinkError:findLibrary返回null
https://bitbucket.org/almworks/sqlite4java/issues/71/arm64-bit.(虽然这是针对sqlite4java)
除此之外我还得到这个错误/警告(取决于设备):libjsqlite.so有文本重定位.这会浪费内存并防止安全性增强.请修理.虽然它没有像其他错误一样崩溃应用程序.
我正在尝试使用该命令编译pyspatialite 2.6.1
sudo python setup.py install
Run Code Online (Sandbox Code Playgroud)
它成功编译,但生成的二进制文件缺少符号.当我从中导入dbapi2模块时,我收到以下错误.
Python 2.7.1 (r271:86882M, Nov 30 2010, 10:35:34)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from pyspatialite import dbapi2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pyspatialite/dbapi2.py", line 27, in <module>
from pyspatialite._spatialite import *
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pyspatialite/_spatialite.so, 2): Symbol not found: _iconv
Referenced from: /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pyspatialite/_spatialite.so
Expected in: flat namespace
in /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pyspatialite/_spatialite.so
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个错误?
我想在Ubuntu 11.04上使用SpatiaLite运行GeoDjango,即使设置很少,我也会遇到一个奇怪的错误.保存具有地理字段的模型实例可以正常工作,但是再次加载它会失败并出现异常:
Error encountered checking Geometry returned from GEOS C function "GEOSWKBReader_read_r".
Run Code Online (Sandbox Code Playgroud)
我的相关部分 settings.py
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': '/tmp/test.db',
}
}
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.gis',
'testapp',
)
Run Code Online (Sandbox Code Playgroud)
testapp.models:
from django.contrib.gis.db import models
class TestModel(models.Model):
name = models.CharField(max_length=10)
location = models.PointField()
Run Code Online (Sandbox Code Playgroud)
testapp.admin
from django.contrib.gis import admin
from testapp.models import TestModel
admin.site.register(TestModel, admin.OSMGeoAdmin)
Run Code Online (Sandbox Code Playgroud)
/编辑:相同的确切代码在PostgreSQL/postgis上没有问题
我在ubuntu上使用pyspatialite没有问题 - 它是完美的.但Windows令我头疼.我一直试图解决这个问题至少三天.
我正在使用Visual Studio 2010 express和mingw(gcc)作为编译器.我遇到并解决了很多问题:vcvarsall.bat,iconv.h等,但实际上我并不确切知道我做了什么.我为DLL,.h文件(标题),.a文件(afaik与mingw相关),osgeo4w二进制文件等尝试了几个环境变量.但我无法弄明白.
我在使用MSVC时收到以下错误:'gcc' failed with exit status 1并且在使用MinGW时:命令提示符处的许多警告行与此lex.gml.c, lex.kml.c, lex.geojson.c类似或相似.
我不是开发人员.我只对开源GIS世界感兴趣.有谁知道"如何在Windows上安装pyspatialite"的分步指南?
我正在通过python创建一个动态数据库.上面的代码工作正常但是当我在查询中使用函数InitSpatialMetadata()时,数据库的创建速度非常慢.
该文件以0kb开头,每秒增加2-5kb,直到完全创建.所有过程大约需要2-3分钟才能完成,最终文件需要3mb.有人已经有这个问题吗?
import sqlite3
db = sqlite3.connect('C:/test.sqlite')
cursor = db.cursor()
cursor.execute("SELECT InitSpatialMetadata()")
Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Spatialite 作为 qSqlite (Qt 5.9)中的扩展加载,我之前已经使用 Qt4.8 完成了此操作,但使用 QT5.9 失败了。我通过删除“SQLITE_OMIT_LOAD_EXTENSION”更改了 sqlite.pri,并通过删除“ #define SQLITE_OMIT_LOAD_EXTENSION 1”并添加“ #define SQLITE_ENABLE_LOAD_EXTENSION 1”对 sqlite.c 进行了一些更改。我还将以下行添加到 openDatabase(....)
#if defined(SQLITE_ENABLE_LOAD_EXTENSION)
| SQLITE_LoadExtension|SQLITE_LoadExtFunc
#endif
Run Code Online (Sandbox Code Playgroud)
现在“requet.setQuery(“SELECT load_extension('spatialite')”, dbProject);” 函数已被识别,但我收到此消息:错误“找不到指定的过程。\r\n无法获取行”如果我查看 MSVC14 中的调试输出,我可以看到 Spatialite.dll 和所有它的依赖项已被加载。
注意:我用我的 Spatialite 以及从他们的网站下载的 mod_spatialite 对此进行了测试。
关于这个问题有什么想法吗?提前致谢。
我正在尝试使用spacespaceite运行sqlite3,但是当我运行时
$ python manage.py makemigrations
Run Code Online (Sandbox Code Playgroud)
即时通讯收到错误:
django.core.exceptions.ImproperlyConfigured:无法加载SpatiaLite库扩展名“ mod_spatialite”,因为:mod_spatialite.so:无法打开共享对象文件:无此类文件或目录
我正在使用
并已安装软件包:
我也尝试添加,SPATIALITE_LIBRARY_PATH = 'mod_spatialite'但仍然没有用。
我完整的回溯:
Traceback (most recent call last):
File "/home/marcelo/.virtualenvs/smart-eye-agora-vai/lib/python3.5/site-packages/django/contrib/gis/db/backends/spatialite/base.py", line 60, in get_new_connection
cur.execute("SELECT load_extension(%s)", (self.spatialite_lib,))
File "/home/marcelo/.virtualenvs/smart-eye-agora-vai/lib/python3.5/site-packages/django/db/backends/sqlite3/base.py", line 328, in execute
return Database.Cursor.execute(self, query, params)
sqlite3.OperationalError: mod_spatialite.so: cannot open shared object file: No such file or directory
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "manage.py", line …Run Code Online (Sandbox Code Playgroud) Spatialite能够使用Distance()函数计算2个几何之间的距离.还有其他功能可用于LINESTRING.但是我找不到它返回的单位.是米吗?如果我有2个点,如何在空间查询中计算它们之间的距离?
(对于记录我使用SRID 4326,即WSG 86,即旧的传统纬度和经度).
我正在尝试使用 GeoDjango 创建数据库,但是当我尝试迁移数据库时,我收到“触发器 ISO_metadata_reference_row_id_value_insert 中的错误:没有这样的列:rowid”。我已经添加了正确的数据库引擎并包含'django.contrib.gis',在settings.py. 知道问题可能是什么吗?
from django.contrib.gis.db import models
# Create your models here.
class Bus(models.Model):
busID = models.IntegerField(primary_key=True)
route = models.CharField(max_length=20)
operator = models.SmallIntegerField()
latitude = models.DecimalField( max_digits=8, decimal_places=6)
longitude = models.DecimalField( max_digits=8, decimal_places=6)
location = models.PointField(srid=4326, blank=True, null=True)
updated = models.DateTimeField(blank=True, null=True)
lastStop = models.IntegerField(blank=True, null=True)
def __str__(self):
return self.busID
Run Code Online (Sandbox Code Playgroud)
设置.py:
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.spatialite',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
python3 ./manage.py migrate
Operations to perform:
Apply all …Run Code Online (Sandbox Code Playgroud) spatialite ×12
sqlite ×7
python ×5
django ×3
gis ×3
android ×2
geodjango ×2
android-ndk ×1
c++ ×1
distance ×1
iconv ×1
jsqlite ×1
macos ×1
mingw ×1
python-3.x ×1
qt ×1
qt5 ×1
sql ×1
ubuntu-16.04 ×1
visual-c++ ×1
windows ×1