我有一些城市的地理坐标(纬度和经度),想要获取 x、y 坐标以便将它们绘制到 map 中。
map 是标准 map ,就像http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg一样。例如。
我尝试了几个我发现的公式,但似乎没有一个真正起作用 :(。简单的 javascript 代码或 ruby 最好 :)
最佳答案
有很多方法可以不同程度地解决这个问题。但是,它们都归结为执行与您的 map 对应的投影。
如果您知道您的 map 是墨卡托投影类型,那么可以将纬度/经度坐标简单地视为 X/Y,并进行适当的缩放和平移。也就是说,您会找到一个简单的 ax+b 和 cy+d 来完成这项工作。
如果您的 map 不是墨卡托投影(因为如果它试图使比例保持一致,它可能不是,就像这张 map 那样),那么您最好的选择是假设它是“地球切线”投影。 (这适用于小陆地。)在这种情况下,您需要先将纬度/经度投影到三维坐标系中。
z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)
正 z 指向北极。正 y 指向 0, 0,正 x 指向 lat 0 long 90(东),正 lat/long 是北和东。当然你必须先转换成弧度。
所有这些都假设地球是球形的,这并不完全正确,但除非你发射远程迫击炮弹,否则它已经足够近了。
无论如何,一旦您拥有了 XYZ,您就需要针对 map 进行旋转和缩放。要绕 Z 轴旋转,只需在投影到三个维度之前减去基准经度。执行此操作可将您的 map 以零经度为中心,以便进行最简单的数学计算。
完成此操作后,您只需向前旋转地球仪,直到您的原始 map 正面朝前。通过在 y-z 轴上进行二维旋转来执行此操作。使用 http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections弄清楚那部分。
最后,您的 x,z 坐标将与您的 map 的 x,y 坐标很好地对齐,以实现如前所述的适当比例/平移。
关于javascript - 将地理坐标 (lat, lng) 映射到 map (x, y),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744165/
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
如果names为nil,则以下中断。我怎样才能让这个map只有在它不是nil时才执行?self.topics=names.split(",").mapdo|n|Topic.where(name:n.strip).first_or_create!end 最佳答案 其他几个选项:选项1(在其上执行map时检查split的结果):names_list=names.try(:split,",")self.topics=names_list.mapdo|n|Topic.where(name:n.strip).first_or_create!e
我需要从json记录中获取一些值并像下面这样提取curr_json_doc['title']['genre'].map{|s|s['name']}.join(',')但对于某些记录,curr_json_doc['title']['genre']可以为空。所以我想对map和join()使用try函数。我试过如下curr_json_doc['title']['genre'].try(:map,{|s|s['name']}).try(:join,(','))但是没用。 最佳答案 你没有正确传递block。block被传递给参数括号外的方法
Enumerable#each和Enumerable#map的区别在于返回的是接收者还是映射后的结果。回到接收者是微不足道的,你通常不需要在each之后继续一个方法链,比如each{...}.another_method(我可能没见过这样的案例。即使你想回到接收者那里,你也可以通过tap来实现)。所以我认为所有或者大部分使用Enumerable#each的情况都可以用Enumerable#map代替。我错了吗?如果我是对的,each的目的是什么?map是否比each慢?编辑:我知道当您对返回值不感兴趣时使用each是一种常见的做法。我对这种做法是否存在不感兴趣,但感兴趣的是,除了从
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
map遍历数组是否比each更快?两者有速度差异吗?mapresult=arr.map{|a|a+2}每个result=[]arr.eachdo|a|result.push(a+2)end 最佳答案 我认为是的。我试过这个测试require"benchmark"n=10000arr=Array.new(10000,1)Benchmark.bmdo|x|#Mapx.reportdon.timesdoresult=arr.map{|a|a+2}endend#Eachx.reportdon.timesdoresult=[]arr.each
在此处阅读有关SO的各种解释,它们是这样描述的:map:Themapmethodtakesanenumerableobjectandablock,andrunstheblockforeachelement注入(inject):Injecttakesavalueandablock,anditrunsthatblockonceforeachelementofthelist.希望你明白为什么我觉得它们表面上看起来很相似。我什么时候会选择一个而不是另一个,它们之间有什么明显的区别吗? 最佳答案 如果您认为inject也别名为reduce,这
我想念Ruby中的Hash方法来仅转换/映射散列值。h={1=>[9,2,3,4],2=>[6],3=>[5,7,1]}h.map_values{|v|v.size}#=>{1=>4,2=>1,3=>3}你如何在Ruby中归档它?更新:我正在寻找map_values()的实现。#moreexamplesh.map_values{|v|v.reduce(0,:+)}#=>{1=>18,2=>6,3=>13}h.map_values(&:min)#=>{1=>2,2=>6,3=>1} 最佳答案 Ruby2.4引入了方法Hash#tran
假设我有一个函数defodd_or_evennifn%2==0return:evenelsereturn:oddendend我有一个简单的可枚举数组simple=[1,2,3,4,5]然后我用我的函数在map中运行它,使用一个do-endblock:simple.mapdo|n|odd_or_even(n)end#=>[:odd,:even,:odd,:even,:odd]如果不首先定义函数,我怎么能做到这一点?例如,#doesnotworksimple.mapdo|n|ifn%2==0return:evenelsereturn:oddendend#Desiredresult:#=>[
我想获取一个数组并将其作为订单列表。目前我正在尝试以这种方式进行:r=["a","b","c"]r.each_with_index{|w,index|puts"#{index+1}.#{w}"}.map.to_a#1.a#2.b#3.c#=>["a","b","c"]输出应该是["1.a","2.b","3.c"]。如何让正确的输出成为r数组的新值? 最佳答案 a.to_enum.with_index(1).map{|element,index|"#{index}.#{element}"}或a.map.with_index(1){|