日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Neo4j:找到两个纬度/经度之间的中间点

發(fā)布時(shí)間:2023/12/3 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Neo4j:找到两个纬度/经度之间的中间点 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

昨天我寫(xiě)了一篇博客文章,展示了如何使用Cypher查找兩個(gè)緯度/經(jīng)度之間的中點(diǎn),這是第一次嘗試填補(bǔ)丟失位置的方法,但我意識(shí)到我可以做得更好。

正如我在上一篇文章中提到的,當(dāng)我找到一個(gè)缺少經(jīng)緯度坐標(biāo)的停靠點(diǎn)時(shí),通常可以在附近找到兩個(gè)停靠點(diǎn),以便對(duì)該停靠點(diǎn)的位置進(jìn)行三角剖分。

我也有火車(chē)路線(xiàn),該路線(xiàn)指示從一個(gè)停靠點(diǎn)到另一個(gè)停靠點(diǎn)所花費(fèi)的秒數(shù),這使我可以指示出無(wú)位置停靠點(diǎn)是否比另一個(gè)停靠點(diǎn)更靠近一個(gè)停靠點(diǎn)。

例如,考慮在b沒(méi)有位置的情況下停靠a,b和c。 如果停靠點(diǎn)之間有以下距離:

(a)-[:NEXT {time: 60}]->(b)-[:NEXT {time: 240}]->(c)

它告訴我們,點(diǎn)“ b”實(shí)際上是從“ a”到“ c”的距離的0.2,而不是中點(diǎn)。

有一個(gè)公式可以用來(lái)說(shuō)明這一點(diǎn):

a = sin((1?f)?δ) / sin δ b = sin(f?δ) / sin δ x = a ? cos φ1 ? cos λ1 + b ? cos φ2 ? cos λ2 y = a ? cos φ1 ? sin λ1 + b ? cos φ2 ? sin λ2 z = a ? sin φ1 + b ? sin φ2 φi = atan2(z, √x2 + y2) λi = atan2(y, x)δ is the angular distance d/R between the two points. φ = latitude λ = longitude

翻譯成Cypher(帶有強(qiáng)制性的希臘符號(hào))后,它看起來(lái)像這樣,以找到從一個(gè)點(diǎn)到另一個(gè)點(diǎn)的方式的點(diǎn)0.2

with {latitude: 51.4931963543, longitude: -0.0475185810} AS p1, {latitude: 51.47908, longitude: -0.05393950 } AS p2WITH p1, p2, distance(point(p1), point(p2)) / 6371000 AS δ, 0.2 AS f WITH p1, p2, δ, sin((1-f) * δ) / sin(δ) AS a,sin(f * δ) / sin(δ) AS b WITH radians(p1.latitude) AS φ1, radians(p1.longitude) AS λ1,radians(p2.latitude) AS φ2, radians(p2.longitude) AS λ2,a, b WITH a * cos(φ1) * cos(λ1) + b * cos(φ2) * cos(λ2) AS x,a * cos(φ1) * sin(λ1) + b * cos(φ2) * sin(λ2) AS y,a * sin(φ1) + b * sin(φ2) AS z RETURN degrees(atan2(z, sqrt(x^2 + y^2))) AS φi,degrees(atan2(y,x)) AS λi╒═════════════════╤════════════════════╕ │φi │λi │ ╞═════════════════╪════════════════════╡ │51.49037311149128│-0.04880308288561931│ └─────────────────┴────────────────────┘

一個(gè)快速的健全性檢查,插入0.5而不是0.2可以找到我能夠根據(jù)昨天的帖子進(jìn)行健全性檢查的中點(diǎn):

╒═════════════════╤═════════════════════╕ │φi │λi │ ╞═════════════════╪═════════════════════╡ │51.48613822097523│-0.050729537454086385│ └─────────────────┴─────────────────────┘

目前為止就這樣了!

翻譯自: https://www.javacodegeeks.com/2016/11/neo4j-find-intermediate-point-two-latlongs.html

總結(jié)

以上是生活随笔為你收集整理的Neo4j:找到两个纬度/经度之间的中间点的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。