我必须允许用户输入多个邮政编码,从数据库中检索纬度和经度,然后构建一个包含它们的巨大多边形.
我用Java编写代码并使用Google Maps API V3.我做单个邮政编码构建没有问题.但是,在添加更多邮政编码后,生成的折线会变成干线并扭曲多边形,如下图所示.

我需要在代码中进行哪些更改才能将所有这些较小的多边形组成一个较大的多边形?我已经搜索了Google的答案,而我设法遇到的只是单独构建每个邮政编码的多边形,但仍然不会给我一个更大的单个多边形的最终结果.
目前,在输入邮政编码后,程序从数据库中收集纬度和长点,并将它们输入到一个巨大的数组数组中(确切地说是一个String [] []),然后传递html和javascript到生成结果多边形.
我的javascript与GoogleMaps API V3简单多边形示例高度相似:
function clearHello(coords1){
coords = coords1
var triangleCoords = new Array();
var l = coords.length;
for (var x = 0; x < l; x++){
triangleCoords[x] = new google.maps.LatLng( coords[x][0], coords[x][1]);
}
// Construct the polygon.
bermudaTriangle = new google.maps.Polygon({
paths: triangleCoords,
strokeColor: '#FF0000',
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: '#FF0000',
fillOpacity: 0.35
});
bermudaTriangle.setMap(document.map);
Run Code Online (Sandbox Code Playgroud)
建议?有没有一种代码技术会占用我的巨型阵列,然后移除看似导致这种失真的内部点?
编辑:想知道一个不同的方法,有没有人知道一种方法来删除创建奇怪的梯形的内部线条,以便zipcode多边形可以正确填写?我知道我可以让它们透明,但这并不能阻止多边形的扭曲.另外,简单地将其作为我填充的几个多边形进行管理将无法工作,因为此程序需要一次最多能够处理多达200个邮政编码的坐标.
我试图使用以下代码在延迟后触发一个方法:
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new UpdateTDDBRejections(), 5, 10, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
它应该等待延迟通过,触发"UpdateTDDBRejections"方法,该方法位于另一个Runnable类中,该方法将打印出一个短语然后再睡眠,然后再次打印短语等.
它不会这样做,它只是打印短语然后停止.
但是,当我这样设置时:
ScheduledExecutorService exec = Executors.newSingleThreadScheduledExecutor();
exec.scheduleAtFixedRate(new Runnable()
{
@Override
public void run() {
// do stuff
System.out.println("garbage garbage garbage");
}
}, 5, 10, TimeUnit.SECONDS);
Run Code Online (Sandbox Code Playgroud)
它按预期的ScheduledExecutorService运行.我的印象是,由于我使用Java 8.4,我不必添加TimerTask来按照我想要的方式进行此坐标.有什么建议?或者我根本无法使用ScheduledExecutorService调用其他Runnable类?
编辑:这是UpdateTDDBRejections类.
public class UpdateTDDBRejections implements Runnable
{
UpdateTDDBRejections()
{
System.out.println("garbage garbage garbage");
}
@Override
public void run()
{
}
}
Run Code Online (Sandbox Code Playgroud)