Java 将lat/long转换为美国州

Java 将lat/long转换为美国州,java,geolocation,Java,Geolocation,我可以访问一个lat/long坐标列表,我想知道(大概)这些坐标所在的美国州。我可以避免精度损失,但我不能依赖外部库或API。我还可以在代码中添加位置数据库 这样做的合理方式是什么? 我考虑了三种可能性: 以每个状态中心的一个点表示每个状态,然后进行最近邻搜索 通过位于该州城市的点表示每个州,然后执行最近邻搜索(具有更多点) 用一个简单的边界框表示每个状态,然后使用一些算法查询我的点属于哪个边界框 你认为什么是最好的?我倾向于考虑解决方案3,但我找不到美国各州粗略的“边界框”列表 想想看,这是行

我可以访问一个lat/long坐标列表,我想知道(大概)这些坐标所在的美国州。我可以避免精度损失,但我不能依赖外部库或API。我还可以在代码中添加位置数据库

这样做的合理方式是什么? 我考虑了三种可能性:

  • 以每个状态中心的一个点表示每个状态,然后进行最近邻搜索
  • 通过位于该州城市的点表示每个州,然后执行最近邻搜索(具有更多点)
  • 用一个简单的边界框表示每个状态,然后使用一些算法查询我的点属于哪个边界框
  • 你认为什么是最好的?我倾向于考虑解决方案3,但我找不到美国各州粗略的“边界框”列表

  • 想想看,这是行不通的
  • 至少在某些州很可能不起作用。考虑那些城镇/城市更聚集到中间,反对城镇/城市聚集到边缘的州。
  • 不起作用(这些应该是90度角,完美的正方形,但用鼠标绘图很难:)
  • 如果你想做到这一点,甚至模糊准确,你将需要一些形状数据来定义状态之间的边界。然后,您将需要一个算法来确定一个点是否位于不规则多边形内


    请参见

    我进行了一些搜索,找到了一个合适的解决方案,用于使用边界框数据集查找内容

    关于StackOverflow的答复:

    数据集:

    要使用(实现)的算法:

    因此,正确的实现方法是使用解决方案3和给定的数据集


    希望有帮助:)

    你不能使用外部库,因为这是学校的作业?@NomadMaker不,我真的不能为此拉大外部依赖关系。谢谢!我一直在努力找出这个数据集,非常感谢!请记住,由于数据集不能达到100%精度,因此总会出现一些精度错误!事实上,前两种方法非常不准确,但它们也相当快(至少是方法1)。我将试着集中讨论方法3