我想在MySQL数据库中存储数千个纬度/经度点.我成功地设置了表并使用地理空间扩展添加数据,其中"coord"列是Point(lat,lng).
问题:
我想快速找到纬度'X'度和经度'Y'度的'N'个最近的条目.由于还没有实现Distance()函数,我使用GLength()函数来计算(X,Y)和每个条目之间的距离,按升序距离排序,并限制为'N'个结果.问题是这不是用球面几何计算最短距离.这意味着如果Y = 179.9度,最近的条目列表将仅包括从179.9开始的经度并且即使存在更近的条目且经度从-179.9增加而减少.
在数据库中使用球形几何时,通常如何处理经度上的不连续性?必须有一个简单的解决方案,但我必须只是寻找错误的东西,因为我没有找到任何有用的东西.
我应该忘记GLength()函数并创建自己的函数来计算角度分离吗?如果我这样做,它仍然会很快并利用地理空间扩展吗?
谢谢!
玩笑
更新:
这正是我上面所描述的.但是,它仅适用于SQL Server.显然,SQL Server具有Geometry 和 Geography数据类型.地理位置完全符合我的需要.MySQL中有类似的东西吗?
我已经创建了一个C++库,并成功使用swig使其可以通过python访问.模板中大量使用模板,每个模板类型都通过swig映射到它自己的python类,如下所示:
%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;
Run Code Online (Sandbox Code Playgroud)
但是,我真的希望有一个python使用的'默认'模板
a = Image("filename")
Run Code Online (Sandbox Code Playgroud)
实例化Image<double>而不必总是键入
a = Imagedouble("filename")
Run Code Online (Sandbox Code Playgroud)
Swig文档说明:
不应使用%template指令在同一范围内多次包装相同的模板实例.这将产生错误.导致此错误的原因是模板扩展导致两个具有相同名称的相同类.这会生成符号表冲突.此外,为了减少代码膨胀的可能性,仅将特定实例化仅包装一次可能更有效.
所以为了避免符号表冲突,我试过了
%rename(Image) Image<double>;
%template(Imageint) Image<int>;
%template(Imagedouble) Image<double>;
Run Code Online (Sandbox Code Playgroud)
在接口文件中.然而,swig然后抱怨Image被重新定义.
制作别名的最佳方法是Image和Imagedouble都引用C++ Image<double>?非常感谢您提供的任何帮助.
-Josh
我有一个包含一个类std::vector<Foo>,其中Foo是包含键,值,注释等,请注意,是有原因的,为什么我使用的是矢量,而不是一本字典类.
我已经在C++中重载了下标运算符,这样foos["Key Name"]就可以在向量中搜索一个Foo对象,其键与"Key Name"匹配(其中foos是a std::vector<Foo>).
我使用SWIG为我的库创建一个Python包装器,我真的希望这个下标操作符扩展到Python.换句话说,我希望能够foos["Key Name"]在Python中使用for来查找向量中的对象.
有关如何使SWIG识别下标运算符并在Python中重载它的任何提示?我有点惊讶,我找不到人们在网上这样做的例子.我猜大多数人只是使用了一个std::map并将SWIG转换为Python dict.