草庐IT

mongodb - 多边形外壳无效

coder 2023-11-06 原文

我尝试运行这个 mongodb 查询

db.building.update( { "_id":ObjectId("53041776a2de55000079b4ba") },
                    { $set :                         
{"geometry":{"type":"Polygon","coordinates":[[[127.357858169667,36.36773567198263],[127.35825816966712,36.36773567198263],[127.35805432178199,36.3675356722397],[127.35825816966712,36.36733567198263],[127.357858169667,36.36733567198263],[127.357858169667,36.36773567198263],[127.357858169667,36.36773567198263]]]}}
                    }
                  )

结果是

Exterior shell of polygon is invalid: { type: "Polygon", coordinates: [ [ [ 127.357858169667, 36.36773567198263 ], [ 127.3582581696671, 36.36773567198263 ], [ 127.358054321782, 36.3675356722397 ], [ 127.3582581696671, 36.36733567198263 ], [ 127.357858169667, 36.36733567198263 ], [ 127.357858169667, 36.36773567198263 ], [ 127.357858169667, 36.36773567198263 ] ] ] }

但是 GeoJSONLint 测试是有效的。

请帮帮我。谢谢。

最佳答案

如果多边形格式不正确,则会出现此错误,例如:

  • 坐标重复(第一个和最后一个坐标必须相同)

1/2 重复:

 1/2-----3
  |      |
  |      |
  |      |
  |      |
  |      |
  |      |
  0------4
  • 如果多边形的线彼此相交(例如,在尝试绘制五角星时)

路口:

 1      3
 |\    /|
 | \  / |
 |  \/  |
 |  /\  |
 | /  \ |
 |/    \|
0/4     2

重复项很容易检测,只需检查第一个和最后一个坐标是否相等并删除其中一个即可。

如果您的多边形中有交叉点,您可以尝试重新排序这些点(类似问题:MongoDB Error: Exterior shell of polygon is invalid?)。

如果这不起作用检查 GeoJSON is valid (来自这个问题:Why is the exterior shell of this GeoJSON invalid?)。

关于mongodb - 多边形外壳无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21870088/

有关mongodb - 多边形外壳无效的更多相关文章

  1. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  2. ruby - 如何排除无效日期 ruby - 2

    我想知道我应该引用什么异常名称。我的日期无效。我检查了文档,但找不到。BeginDate.new(day,month,year)Rescueexceptionnamestatements 最佳答案 我认为您正在寻找ArgumentError.使用irb:>Date.new(2,-200,3)ArgumentError:invaliddatefrom(irb):11:in`new'from(irb):11所以beginDate.new(2,-200,3)rescueArgumentError#yourlogicend

  3. ruby - 尝试授权服务器到 ruby​​ 中的服务器类型应用程序以访问 Google 日历时无效授权 - 2

    我正在尝试为自己创建一个直接连接到我的日历的应用程序……但我从不想参与重新验证。我只想编写一次身份验证代码并完成它。授权码如下:key=Google::APIClient::PKCS12.load_key(SERVICE_ACCOUNT_PKCS12_FILE_PATH,PASSWORD)asserter=Google::APIClient::JWTAsserter.new(SERVICE_ACCOUNT_EMAIL,'https://www.googleapis.com/auth/calendar',key)@client=Google::APIClient.new@client.a

  4. ruby-on-rails - Ruby on Rails PostGIS - 将多边形记录插入数据库 - 2

    我将RoR与PostGIS结合使用来存储位置数据。我正在尝试使用圆(例如,带半径的中心点)来存储估计位置。我试过类似的东西,但它不起作用:@location=Location.new(:place_id=>place.id,:circle=>%{ST_Buffer(ST_MakePoint(#{latitude},#{longitude})::geography,#{accuracy})})我也尝试过使用RGeo,它是出厂设置,但不确定如何准确使用它。任何帮助将不胜感激。谢谢。编辑1:我取得了一些进步。factory=RGeo::Cartesian.factorycenter_poin

  5. ruby - `DateTime.strptime` 返回工作日/时间字符串的无效日期 - 2

    为什么Ruby的strptime不将其转换为DateTime对象:DateTime.strptime('Monday10:20:20','%A%H:%M:%S')#=>ArgumentError:invaliddate虽然这些有效?DateTime.strptime('Wednesday','%A')#=>#DateTime.strptime('10:20:20','%H:%M:%S')#=># 最佳答案 这看起来像一个错误-minitech'scomment是正确的。不过,现在有一个解决方法(因为您可能希望它现在起作用):您可以在

  6. ruby-on-rails - 具有六边形架构和 DCI 模式的框架和数据库适配器 - 2

    我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有

  7. sql - Ruby Rails Postgis - 查找多边形中的所有点 - 2

    我需要一些帮助来构建sql查询以在带有activerecord-postgis-adapter的rails中使用。我一直在阅读大量书籍,但现在有点卡住了,非常感谢任何帮助。我有两个模型Events和Areas:事件有一个点类型的“几何”列classEvent{:srid=>4326,:type=>"polygon",:geographic=>true}区域有一个“几何”列,类型为多边形classArea{:srid=>4326,:type=>"point",:geographic=>true}我可以在谷歌地图上创建和绘制事件和区域,并通过点击map并保存到数据库来创建区域。我希望能够执

  8. ruby-on-rails - 使用机架中间件捕获无效的 JSON 解析错误 - 2

    我正在使用Rails5,我正在尝试改进对我的API的无效JSON请求的错误处理。我尝试通过救援在Controller中解析来处理无效格式的JSON,但意识到如果用户将ContentType添加到他们的请求header,Rails中间件会在我的JSON请求到达Controller之前解析它。我遵循了以下指南:https://robots.thoughtbot.com/catching-json-parse-errors-with-custom-middleware但是,在启动服务器时出现以下错误:.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems

  9. ruby-on-rails - 带有分类器 gem 的无效编码符号 - 2

    当我将项目添加到我的Postgres数据库时,一切似乎都运行良好。在不做任何更改的情况下,只要在我的应用程序中的任何位置启动Madeleine,我的Rails应用程序就会开始失败:EncodingErrorinEventsController#updateinvalidencodingsymbolapp/controllers/events_controller.rb:137:in`update'137是问题行:135defupdate136@event=Event.find(params[:id])137m=SnapshotMadeleine.new("bayes_data")...

  10. ruby - 如何在两个六边形字符串之间进行异或运算? - 2

    我有两个十六进制字符串,我需要对它们进行异或操作。我的六弦琴喜欢,a="1A6F2D31567C80644A5BEF2D50B986B";b="EF737F481FC7CDAE7C8B40837C80644";它们之间如何进行异或运算?你能给出一些指导方针吗? 最佳答案 这适用于任何基地:>>(a.to_i(16)^b.to_i(16)).to_s(16)=>"f51c527949bb4dca36d0afae2c39e2f"但是你可以使用String#hex用于十六进制字符串。 关于ru

随机推荐