问题标签 [wkb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
2083 浏览

c# - 如何将存储在 SQLite 数据库中的 BLOB 数据转换为 SharpMap.Geometry.Geometry

我将几何数据存储在 SQLite 数据库中,列的数据类型是 BLOB。

我使用以下方法将 BLOB 数据转换为清晰的地图几何图形

SharpMap.Converters.WellKnownBinary.GeometryFromWKB.Parse(<字节数组>);

但它抛出异常“字节顺序无法识别

但是,如果我使用 sql server management studio 数据库并使用 Image 数据类型将几何数据保存在表中,那么我得到的几何图形没有任何错误。

唯一的区别是数据类型,在 SQLite 中我使用了数据类型“BLOB”,而在 sql server 中我使用了数据类型“Image”。

我还注意到字节数组大小的另一个差异,如果我使用 SQLite 数据库,那么我得到的字节数组大小为“3812”,如果我使用 sql server 数据库,那么我得到的字节数组大小为“1902”。

有人知道解决方案吗?

我正在处理以下数据:

0x01030000000100000076000000908FC85763BD2D41B5E1CEFAB9385841A8564425CABB2D412642A24FB83858411BFBC2F5D3BA2D4184A995ABBF385841CAD4637804BA2D415C8C795FA4385841F114538DDDB92D41F55448C2AC385841C64F734F30B92D41B249DC25CD385841A3CB7AAD4DB12D4199B5872A3B3858416D582E7839B02D41A9556428F637584143144991BBB02D416A06CFA4D53758417B22EADD21B12D41655331199F375841452E9D966AB12D4166ED16B88B3758419BB6676466B02D413D6180586D375841E89DECDF98B02D4191927111613758411C78DF662DB22D4170EA69F128375841D9D525280FB22D41A078FBDB103758415C485630A6B12D41F3EB2128EC3658419D97CCE77BB22D41C592B7E1CF365841831F9ECFB8B32D41589F8359E8365841A4599CA91AB42D4183458EF6F7365841BD50CAAF3AB42D41D8584F2DF836584115C52BF88AB42D41CB916AC0DF365841C9C54DE07BB32D41EE6958C1BF365841DE5A1651E3B22D415B4704FDA6365841D73CCC798FB22D41CB9E9E17963658415663F51F78B22D41E3403AA988365841B4235ECA76B22D41F0CA34EE7A36584188D446ECB9B32D41FB8ED8B5093658412812E3D8E8B32D41616C0DA2CC3558419DF34042BDB32D41EE235FC17B355841A36F009898B22D41054448484C355841E21AEBA9AFB42D41946B3A2761355841C463E28F4FB52D413FF3CA035F355841461A2E564BB52D4113CAB89257355841D2226CFEF8B62D41B71CC9EC153558419073855FC9B72D410A4B9247E1345841508668C7C4BC2D41E0B9D62FD7345841661D26E68ABE2D410E80C7D7AF34584149753FDA9AC02D418BDAADF075345841B50A90264DC32D41871EDC1F7D345841E0F2F43CA2C62D4107B6748781345841870AC042C0C62D41F61C18959D345841B238413BC0C72D4124BD21B4DC34584180D416141CC82D41E44457B4E934584175CA2F0700C92D4149867508343558414835F68B24CF2D418F8AD232F3345841D200559B07D02D414E65E5D5E1345841065A4DCB6CD02D4185CE4559E2345841254C3A15C5D02D415D1D78A14935584166C96D57F5D02D41C414E543623558415D6312F097D02D41C605342D94355841E65A332103D12D412A5960ABBA3558411194E61042D12D41F97012B6EC35584116DEF2091ED12D4186D8858FF03558412248444320D12D41EFAF11A6FD355841CB79634EEDD12D414275A2982D3658418C67CC2FE2D12D419E5D943153365841A93F65748BD12D418D280AC6643658419D1B2A62C0D12D41B19988E397365841934A32D73DD12D41BA8CCD9FAA365841646BF8D86DD22D414ED7D61EE136584146B4EFBE0DD32D417A3B6E9BE03658419F2A4C7030D32D41FCBCC386E53658413BB53AA930D32D4164780A6D1337584191D463BCD9D12D41B116E437083758419B2461F02CD12D415D301E26073758412FE24D704FD02D41DF24A4CB0C3758416BACD3FE50D02D411FFCC625173758413730503BD0CF2D41AAE124111C3758413061531920CF2D41A0D6E5442A3758411A6E1BE5A4CE2D414619DF4C3837584115D1D11FF4CC2D412A2B02E47B375841B0897DE34ECC2D41F7A6AFD36F3758418831353299CB2D4110590A15B03758414401543C3ACB2D4191DD8968C137584146EBF50830CA2D4158913B28D63758414ED056195EC92D4133420C50EF375841CF6C4EDAAAC82D41A57F0D5BF73758419E80ED363DC82D4120E370DA00385841A0D330BE85C72D4176B51AAC163858418132924D17C42D41ED5B97AB51385841DB1AC747F9C32D4163E87BEE4638584157EEAC6699C42D41C9D1BC2B30385841040137B0EFC42D4119CE642E2A3858417020BF9CB1C52D41BC74946A263858416A3227FE16C72D41489711A10E385841C9151581BDC92D414F1C52F8D637584124EAE0F5F3CA2D413D750DBCB237584147D5911AB2CB2D41B9E3E10F743758417635C66FB1CB2D4140FA886365375841632C30082CCA2D41CE0050B46437584105493CCA11CA2D413CB74FA156375841FE65D622B6CA2D414A1C58C131375841C950F9B0B5CA2D41B4443CB92B375841AD2913B768CB2D414719112023375841A9A4228E94CA2D4133F15AA90F375841AEE3024BA5C82D41EC089804EA365841F76822311FC82D41CC821BEE01375841DE1EB75E2AC62D418150AD64E0365841C039F774E3C42D41551E26A4CE3658414520FB2E0CC42D415933F721D336584151443641D7C32D41FE09F7AA0437584112C708BA1AC12D41F123AB9F14375841E933DCD86CBF2D412A142AE92A375841A3BBE95204BF2D41538E58422037584179B2EE56F2BD2D416FA23E89EF365841F8B58C69BFBD2D41387D57ABF4365841EABF0EE24EBD2D41C63A39B302375841E83C19224DBC2D410263BB2A333758411530B6EA54BC2D41C672B000853758413E00C81F41BC2D4171582088943758416914F51292BC2D41B3EC88989837584110B8EC661EBD2D41582E965DC13758416CE832F109BD2D41A36943A90C3858419923E1491BBD2D41161BD1B918385841E17A43A53ABD2D4126D39FFB2038584123EF3F59FEBD2D41EC01CAEC313858419D044C88A4BC2D410422669584385841908FC85763BD2D41B5E1CEFAB938584100000000

0 投票
0 回答
1577 浏览

mysql - 使用 LOAD DATA LOCAL INFILE 将几何数据导入 MySQL

我正在尝试使用LOAD DATA LOCAL INFILE语法将 CSV 数据导入 MySQL。这通常是一个相当简单的任务,但在这种情况下,数据包含一个让我很头疼的几何字段。

当我尝试运行导入时,我收到如下错误:

SQLSTATE [HY000]: 一般错误: 4079 Illegal parameter data type longblob for operation 'st_geometryfromwkb'

我的 CSV 文件中的记录如下所示:

所以我有一个位置名称、纬度/经度坐标和二进制 WKB 格式的几何字段。(上面的例子是一个简单的几何,转换为POINT(1,1);真实数据有复杂的多边形,但内容不相关;这个简单例子的问题是一样的)。

我的表如下所示:

我的导入查询如下所示:

如前所述,通过这个导入查询,我得到了Illegal parameter data type这个问题顶部显示的错误。

但是,如果我用硬编码的几何字符串替换最后一行,则查询有效,如下所示:

显然这没有任何好处,因为我需要从 CVS 加载的字段不是查询中的硬编码值,但它确实有效,而从 CSV 加载相同的值@col4则不能。

我在这个查询上尝试了一堆变体 - 有和没有调用 to GeomFromWKB(),同时使用X'...'0x...表示十六进制值;似乎没有任何效果。

任何人都可以给我一些帮助吗?

0 投票
5 回答
6020 浏览

postgresql - 使用 Gorm 插入和选择 PostGIS 几何

我一直在尝试找到一种使用 Golang 插入和检索几何类型的方法,特别是库gorm。我还尝试使用为几何定义不同类型的库orb,并提供不同格式之间的编码/解码。

Orb已经为每种类型实现了方法Scan()Value()这允许 goInsert()Scan()函数使用原始类型以外的类型。然而,Orb 希望使用以众所周知的二进制 (WKB) 格式表示的几何图形。

orb 文档显示要完成此操作,您应该简单地将字段包装在 PostGIS 函数中ST_AsBinary(),并ST_GeomFromWKB()分别用于查询和插入。例如,一个表定义为:

你可以这样做:

对于插入(其中 p 是一个 orb.Point):

这是我的问题:通过使用 GORM,我无法使用这些函数构建这些查询。GORM 会自动将值插入到给定结构的数据库中,并将数据扫描到结构的整个层次结构中。这些Scan()Value()方法在幕后被调用,不受我的控制。

尝试将二进制数据直接插入几何列是行不通的,直接查询几何列将给出十六进制的结果。

我尝试了多种数据库方法来解决这个问题。我尝试创建在几何列上自动调用所需函数的视图。这适用于查询,但不适用于插入。

是否可以制作某种触​​发器或规则来自动调用传入/传出数据所需的函数?

我还应该注意,我正在开发的库完全独立于数据和模式,所以我没有对任何类型的查询进行硬编码的奢侈。我当然可以编写一个扫描整个数据模型并从头开始生成查询的函数,但如果有更好的选择,我会更喜欢。

有谁知道在 SQL 中进行这项工作的方法?仅通过查询列本身就能够自动调用列上的函数?

任何建议将不胜感激。

0 投票
0 回答
159 浏览

sql - 选择或插入时自动调用列上的函数

我试图找到一种方法来自动调用特定列上的函数,而不是在 sql 语句中实际调用它。

我将 PostGIS 与不同几何类型的类型一起使用。我需要以众所周知的二进制 (WKB) 格式插入和选择所述几何列,这需要调用ST_GeomFromWKB()插入 WKB,并ST_AsBinary()以相同格式检索数据。

假设我有一个定义的表:

我想定义一种在geom列上调用适当函数的方法,同时单独引用列,例如,如果我要调用:

在幕后,我想致电:

插入也是一样,但ST_GeomFromWKB()在幕后调用。

请注意,默认返回的类型是geometry(十六进制格式),但调用 ST_AsBinary() 后,类型是bytea.

我试图使用视图来让它工作。它适用于选择,但不适用于插入。我也研究了规则和触发器,但我不确定是否可以做我希望的事情。

这个问题有sql解决方案吗?

谢谢

0 投票
1 回答
467 浏览

postgresql - WKB 和 PostGIS 中返回的十六进制值有区别吗

我一直在对 PostGIS 进行一些试验,这就是我注意到的:

假设我有一个定义如下的表:

我添加了以下多边形:

如果我自己查询该geom列,我会得到几何的十六进制表示。如果我改为调用ST_AsBinary(geom),我会得到一个二进制表示。

但是,当我将十六进制和二进制表示都转换为字节数组时,我得到的结果略有不同。第一条评论是我将十六进制转换为二进制得到的结果,下一条是直接来自ST_AsBinary()

如您所见,前 4 个字节是相同的;表示它是大端还是小端,以及几何类型(3,在本例中为多边形)。其余字节也相同。唯一的区别是在前 4 个字节之后添加了一些额外的字节。

我想知道这是否与表示投影有关(SRID=4326),但我还没有找到任何证据。

如果有人能对此有所了解,我将不胜感激。

0 投票
1 回答
1271 浏览

python - WKBReadingError:由于读取输入时出错,无法创建几何图形

我想使用 sql 查询通过 postgis 上传数据。见下面的代码

我收到此错误:

ParseException:无效的十六进制字符

WKBReadingError:由于读取输入时出错,无法创建几何图形。

老实说,我没有尝试太多。我是新手,不知道从哪里开始。

0 投票
1 回答
543 浏览

go - Golang 从坐标列表创建 wkb.Polygon

我在一个文件中有坐标列表,我想获取它们的多边形。我使用wkb库来加载坐标,但是当我尝试将它们设置到wkb.Polygon对象中时,出现错误:

这是我的代码:

我也试过:

但我得到了:

0 投票
1 回答
335 浏览

sql - 在 postgresql 中将 wkt 转换为 wkb

我在 Postgres 的表中有一个名为 wkt_geometry 的列,其中包含从纬度和经度转换而来的数据。但我想使用 sql 命令将 wkt_geometry 转换为 wkb_geometry。如果我直接从 Lat 和 long 转换它会更好。我也看过 ST_AsBinary(geometry) 但我不了解所涉及的参数。

0 投票
1 回答
71 浏览

google-bigquery - 如何在 BigQuery 中将 8 字节双精度数(小端序)解析为 float64?

我有一个字符串写成 8 字节双精度数字,小端序,想用 float64 转换它,以便 BigQuery 可以将其作为数字处理。

有没有一个聪明的解决方案?

谢谢你。

0 投票
1 回答
175 浏览

python - 使用 Shapely 将 2 列转换为 WKB

Longitude我在调用的CSV 中有 2 列,Latitude正在使用我的 Python AWS Lambda 代码对其进行解析。

我正在使用shapely带有以下代码的模块将 long/lats 转换为几何格式

有没有办法调用这两列,以便每个条目单独给出它们的 wkb,而不是单独放入每个点?

例如