Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript GoogleMaps API V3构建包含多个Zipcode的多边形_Javascript_Google Maps Api 3_Java 8 - Fatal编程技术网

Javascript GoogleMaps API V3构建包含多个Zipcode的多边形

Javascript GoogleMaps API V3构建包含多个Zipcode的多边形,javascript,google-maps-api-3,java-8,Javascript,Google Maps Api 3,Java 8,我必须允许用户输入多个邮政编码,从数据库中检索纬度和经度,然后构建一个包含它们的巨大多边形 我用Java编写代码,并使用Google Maps API V3。我没有问题做一个单一的邮政编码建设。但在添加更多的邮政编码后,生成的多段线会断开并扭曲多边形,如下图所示。 我需要在我的代码中修改什么才能将所有这些较小的多边形变成一个较大的多边形?我在谷歌上搜索了答案,我所遇到的只是逐个构建每个邮政编码的多边形,但这仍然不能给我一个更大的单个多边形的最终结果 目前,输入邮政编码后,程序从数据库中收集la

我必须允许用户输入多个邮政编码,从数据库中检索纬度和经度,然后构建一个包含它们的巨大多边形

我用Java编写代码,并使用Google Maps API V3。我没有问题做一个单一的邮政编码建设。但在添加更多的邮政编码后,生成的多段线会断开并扭曲多边形,如下图所示。

我需要在我的代码中修改什么才能将所有这些较小的多边形变成一个较大的多边形?我在谷歌上搜索了答案,我所遇到的只是逐个构建每个邮政编码的多边形,但这仍然不能给我一个更大的单个多边形的最终结果

目前,输入邮政编码后,程序从数据库中收集lat和long点,并将它们输入一个巨大的数组(确切地说是字符串[][]),然后将其传递给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);
函数clearHello(coords1){
coords=coords1
var triangelecoords=新数组();
var l=坐标长度;
对于(变量x=0;x
建议?有没有一种代码技术可以将我的巨大阵列移除,然后移除似乎是导致这种失真的内部点


编辑:想知道一种不同的方法,有没有人知道一种方法来删除创建奇异梯形的内部线条,以便zipcode多边形可以正确填充?我知道我可以使它们透明,但这并不能阻止多边形的扭曲。而且简单地将其管理为几个我填充的多边形是不会成功的rk,因为该程序一次需要能够处理多达200个邮政编码的坐标。

听起来您想删除共享边界并创建一种宏对象。在地理信息系统(GIS)领域,这种操作称为“”。您可以合并两个第三方库,以专用于JavaScript代码来完成您想要的任务

如何在JavaScript中进行GIS分解

可以将和库组合起来执行并集/融合操作,并导出具有统一外边界的单个多边形几何体

简单地说,Wicket将处理从Google Maps多边形对象到众所周知的文本(WKT)几何表达式的往返,然后JST可以使用WKT执行并集/融合操作

初步步骤:下载两个库并在项目中引用它们。

1) 首先,解压缩它,浏览到lib文件夹,并在项目中包含两个lib文件(
javascript.util.js
,和
jsts.js

<script type="text/javascript" src="jsts/javascript.util.js"></script>
<script type="text/javascript" src="jsts/jsts.js"></script>
<script type="text/javascript" src="wicket/wicket.js"></script>
<script type="text/javascript" src="wicket/wicket-gmap3.js"></script>
使用Wicket获取多边形WKT几何体,然后使用JST执行溶解操作。

3) 将这两个库联合起来,从Wicket获得众所周知的文本几何图形,并使用JST执行溶解操作

我的演示假定已经实例化了两个Google多边形对象,并将它们传递到方法中-
polygon1
polygon2
。显然,这只是一个简单的示例,因此您需要对其进行修改,以实现更复杂的操作

function DissolveTwoGeometriesWithJSTS(polygon1, polygon2)
{
    // Instantiate Wicket
    var wicket = new Wkt.Wkt();

    wicket.fromObject(polygon1);  // import a Google Polygon
    var wkt1 = wicket.write();    // read the polygon into a WKT object

    wicket.fromObject(polygon2);  // repeat, creating a second WKT ojbect
    var wkt2 = wicket.write();

    // Instantiate JSTS WKTReader and get two JSTS geometry objects
    var wktReader = new jsts.io.WKTReader();
    var geom1 = wktReader.read(wkt1);
    var geom2 = wktReader.read(wkt2);

    // In JSTS, "union" is synonymous with "dissolve"
    var dissolvedGeometry = geom1.union(geom2);

    // Instantiate JSTS WKTWriter and get new geometry's WKT
    var wktWriter = new jsts.io.WKTWriter();
    var wkt = wktWriter.write(dissolvedGeometry);

    // Reuse your Wicket object to ingest the new geometry's WKT
    wicket.read(wkt);

    // Assemble your new polygon's options, I used object notation
    var polyOptions = {
        strokeColor: '#1E90FF',
        strokeOpacity: 0.8,
        strokeWeight: 2,
        fillColor: '#1E90FF',
        fillOpacity: 0.35    
    };

    // Let wicket create a Google Polygon with the options you defined above
    var newPoly = wicket.toObject(polyOptions);        

    // Now I'll hide the two original polygons and add the new one.
    polygon1.setMap(null);
    polygon2.setMap(null);

    newPoly.setMap(map);
}
下面是基本情况。在执行代码之前

然后


您可以尝试使用javascript。凹面外壳也是一个好的开始。我已经编写了一个凹面外壳php类@phpclasses.org。它需要一组点,并使用凹面外壳算法找到凹面外壳。基本上这是一个delaunay三角化,您可以删除最长的边。您也可以在这里阅读我的答案:。

解决方案就是使用GeoJson来表示您想要的内容,并且有一个API,因此您不必担心后端或多边形中的任何变形,如下图所示:

在这里:

查询示例:

/rest/v1/public/boundary?zipcode=300443004330045'

您还可以在一行代码中查询多个县、市等

简单java脚本:

。。。 loadGeoJson(“…/rest/v1/public/boundary?zipcode=300443004230045”);

结果显示了这一点,每个zipcode都有额外的可查询信息:


*****我确实为该公司工作*

我刚刚找到了PostGREsql库,但我不确定如何实现它,如果我可以的话,我目前正在利用Java内置的数据库和Derby。我会看看你的两个建议,看看哪一个我可以努力工作,然后再联系你。@senex_潜意识,开始使用PostGREsql/PostGIS是非常重要的,特别是如果您的Web主机不允许使用PostGIS扩展。我使用,它们也会使用。安装完所有内容后,您需要了解有关GIS数据的基本知识,以及从PostGIS中获取和取出数据等。从第一个GIS.SE链接开始了解这些内容。此外,还需要熟悉多边形几何图形的已知文本s、 。似乎无论我选择哪个选项,我仍然必须将大量数组分解为单独的多边形数组。或者以某种方式使PostGREsql/PostGIS工作。是的,很可能您需要迭代每个Google Maps多边形的顶点,并将其转换为众所周知的文本几何体。正如我所预期的——基于上面提到的JSTS库——该库似乎对众所周知的文本几何表达式进行操作。@senex_潜意识,在这里看到了一个机会,我添加了一个