小编Jos*_*hua的帖子

如何使用具有球面几何的MySQL地理空间扩展

我想在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中有类似的东西吗?

mysql geospatial latitude-longitude

5
推荐指数
1
解决办法
1923
查看次数

如何通过Swig为Python类创建别名?

我已经创建了一个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

python alias swig templates rename

3
推荐指数
1
解决办法
503
查看次数

如何使用swig Python重载下标运算符

我有一个包含一个类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.

c++ python swig subscript operator-keyword

3
推荐指数
1
解决办法
1995
查看次数