关于如何生成地球上位置的随机坐标(纬度/经度)的任何聪明的想法?纬度/经度。精确到5分,避免水体。
double minLat = -90.00;
double maxLat = 90.00;
double latitude = minLat + (double)(Math.random() * ((maxLat - minLat) + 1));
double minLon = 0.00;
double maxLon = 180.00;
double longitude = minLon + (double)(Math.random() * ((maxLon - minLon) + 1));
DecimalFormat df = new DecimalFormat("#.#####");
log.info("latitude:longitude --> " + df.format(latitude) + "," + df.format(longitude));
也许我生活在一个梦幻世界中,水的话题是不可避免的……但是希望有一种更好,更清洁,更高效的方法来实现这一目标?
编辑
一些奇妙的答案/想法-但是,从规模上讲,我需要生成25,000个坐标。由于延迟,成本和其他一些因素,去外部服务提供商可能不是最好的选择。
处理水体问题将主要是一个数据问题,例如,您是只想错过海洋还是需要错过小溪流。您需要使用具有所需数据质量的服务,或者需要自己获取数据并在本地运行。从您的编辑看来,您似乎想走本地数据路线,所以我将重点介绍一种方法。
一种方法是获取陆地或水域的shapefile。然后,您可以生成一个随机点,并确定它是否与陆地区域相交(或者,不与水域相交)。
首先,您可能会在这里获得一些低分辨率的数据,然后在这里获得更高分辨率的数据,以便在海岸线或湖泊/河流/等地获得更好的答案时使用。您提到要使点的精度达到小数点后5位,即1m多一点。请注意,如果您获得的数据符合该精度,那么您将拥有一个庞大的数据集。而且,如果您想要非常好的数据,请准备为此付费。
获得形状数据后,需要一些工具来帮助您确定随机点的交点。
Geotools是一个很好的起点,可能会满足您的需求。您还将最终查看opengis代码(geotools网站下的文档-
不确定它们是否消耗了它们或什么)和用于几何处理的JTS。使用此功能,您可以快速打开shapefile并开始执行一些交集查询。
File f = new File ( "world.shp" );
ShapefileDataStore dataStore = new ShapefileDataStore ( f.toURI ().toURL () );
FeatureSource<SimpleFeatureType, SimpleFeature> featureSource =
dataStore.getFeatureSource ();
String geomAttrName = featureSource.getSchema ()
.getGeometryDescriptor ().getLocalName ();
ResourceInfo resourceInfo = featureSource.getInfo ();
CoordinateReferenceSystem crs = resourceInfo.getCRS ();
Hints hints = GeoTools.getDefaultHints ();
hints.put ( Hints.JTS_SRID, 4326 );
hints.put ( Hints.CRS, crs );
FilterFactory2 ff = CommonFactoryFinder.getFilterFactory2 ( hints );
GeometryFactory gf = JTSFactoryFinder.getGeometryFactory ( hints );
Coordinate land = new Coordinate ( -122.0087, 47.54650 );
Point pointLand = gf.createPoint ( land );
Coordinate water = new Coordinate ( 0, 0 );
Point pointWater = gf.createPoint ( water );
Intersects filter = ff.intersects ( ff.property ( geomAttrName ),
ff.literal ( pointLand ) );
FeatureCollection<SimpleFeatureType, SimpleFeature> features = featureSource
.getFeatures ( filter );
filter = ff.intersects ( ff.property ( geomAttrName ),
ff.literal ( pointWater ) );
features = featureSource.getFeatures ( filter );
快速说明:
注意:如果您使用一组非常随机的分数来执行此操作,您将经常遇到水,这可能需要一段时间才能达到25k分数。您可能想尝试将点生成的范围比真正随机的范围更好(例如删除大西洋/太平洋/印度洋的大块)。
此外,您可能会发现相交查询过慢。如果是这样,您可能要考虑使用GDAL之类的工具来创建四叉树索引(qix)。不过,我不记得geotools支持哪些索引类型。
我正在建立一个机器学习模型,其中一些列是物理地址(我可以将其转换为X / Y坐标),但我对ML算法如何处理这一点有点困惑。有没有一种特定的方法可以将地理位置转换成列,以便用于ML(分类和/或回归)中? 提前感谢!
问题内容: 我有一个包含地理数据的SQLite数据库。我的表是这样定义的: 接下来,我的软件(Java)使用一个简单的SQL请求来寻找GEO_OBJECTS,如下所示: 从GEO_OBJECTS中选择*纬度<= 123.4和纬度> = 26.32和经度<= 12.41和经度> = 6.23; 如果我在纬度和经度上创建索引,是否可以改善性能? 接下来,当我得到此查询的结果时,我正在使用Haversi
我应该自己写方法吗?尽管我害怕不能解释一些事情,因为我的数学已经生疏了。或者我能为Java找到一个现成的实现吗?我有谷歌地图sdk在我的项目,但我找不到任何有用的东西。
功能介绍 地理编码指将结构化内容转换为经纬度坐标,逆地理编码指将经纬度坐标转换成结构化地址。使用该功能模块,可以快速批量把Excel文件内的大量地址转换为经纬度信息,或者实现反查。 当前功能模块使用高德接口。由于地理编码与逆地理编码需要使用高德API接口,而API接口日请求次数有限,公共API KEY无法满足大批量请求,使用自己申请的高德KEY可以解决该问题,因此需要申
功能介绍 地理编码指将结构化内容转换为经纬度坐标,逆地理编码指将经纬度坐标转换成结构化地址。使用该功能模块,可以快速批量把Excel文件内的大量地址转换为经纬度信息,或者实现反查。 当前功能模块使用高德接口。由于地理编码与逆地理编码需要使用高德API接口,而API接口日请求次数有限,公共API KEY无法满足大批量请求,使用自己申请的高德KEY可以解决该问题,因此需要申
问题内容: 我正在使用elasticsearch1.4.1-1.4.4。我正在尝试将地理多边形形状(文档)索引到索引中,现在在对形状进行索引时,我想知道地理坐标是否位于该特定索引的地理多边形形状的边界内。 使用上面的地理多边形过滤器,我可以使所有索引的地理坐标都位于所描述的多边形内,但是我还需要知道未索引的地理坐标是否位于此地理多边形中。我的怀疑是,在elasticsearch1.4.1中是否可行