数据库而不是kml文件

时间:2015-10-07 13:46:31

标签: google-maps google-maps-api-3 kml

我想知道,是否可以将数据库连接到谷歌地图api以渲染多边形,点等? 如果存储所有kml坐标连接到多边形,是否可以将其渲染为数据库或者是否需要创建kml文件以使其可视化?

有什么例子吗?

谢谢!

3 个答案:

答案 0 :(得分:2)

使用Google Maps API可视化点,多边形等不需要KML文件。但是,KML层是表示复杂地理空间特征的有用方法。

具有HTTP访问权限的后端数据库可以返回一个地图坐标列表,客户端代码可以使用Google Maps API将其呈现为适当的形状。

Google Maps API提供了创建各种形状的示例。

创建简单点标记的示例:
https://developers.google.com/maps/documentation/javascript/examples/marker-simple

创建简单多边形的示例:
https://developers.google.com/maps/documentation/javascript/examples/polygon-simple

客户端代码需要从数据库中查询数据,例如从具有数据库访问权限的servlet中查询数据。数据库很可能在不同的端口或不同的服务器上运行,因此javascript无法直接访问它。

您的服务器端组件可以查询数据库并返回格式化的KML,也可以返回客户端代码将呈现的JSON结果。取决于您是否要在客户端上编写更多后端服务器代码或JavaScript代码。

答案 1 :(得分:0)

嗯......我现在正在使用另一种解决方案(来自DB的数据显示在Google地球上,这是KML文件的默认应用程序)并希望这有帮助:

(可以参考https://sites.google.com/site/canadadennischen888/home/kml/auto-refresh-3d-tracking)(另外,在我的其他页面中,还有示例java代码)

详细信息:

准备RestFul服务以从DB生成KML文件(KML样本在上面的链接中)

我的其他jsp代码将生成一个KMZ文件,其中包含指向Restful服务的链接。 KMZ文件有onInterval(如下图所示)

Jsp网页允许用户下载KMZ文件。

当Google地球打开KMZ文件时,Google地球会自动刷新以从该Restful服务获取新数据

每次刷新时,服务器都会将最新的更新KML数据与新数据一起发送给GE。

KMZ样本:

     <?xml version="1.0" encoding="UTF-8"?>
      <kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" 
      xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
      <NetworkLink> 
      <name>Dennis_Chen_Canada@Hotmail.com</name> 
      <open>1</open> 
      <Link> 
      <href>http://localhost:9080/google-earth-project/rest/kml/10001/20002</href> 
      <refreshMode>onInterval</refreshMode> 
      </Link>
      </NetworkLink>
      </kml>

结果为:enter image description here

答案 2 :(得分:0)

谢谢你的回答。我不知道我是否对此有所了解,但至少我知道这是可能的。

我使用Shape2Sql来保存数据库中的坐标。

但据我了解,我需要将其转换为geojson才能在Google地图中呈现?如果我理解正确吗? 据我所知,渲染geojson与文件时渲染kml大致相同。但我不知道如何连接到数据库。

我从数据库中创建一个列表:

var adresses = _unitOfWork.GeoAddressRepository.Get(q => q.GeoRouteNorpost.Code == "3007106", includeProperties: "GeoRouteNorpost").ToList();

        var points = new List<LatLong>();

           foreach  (var address in adresses)
           {
               points.Add(new LatLng() { Lat = "59.948261", Lng = "10.750699" });
               points.Add(new LatLng() { Lat = "59.943128", Lng = "10.755814" });
               points.Add(new LatLng() { Lat = "59.941245", Lng = "10.746084" });
               points.Add(new LatLng() { Lat = "59.943527", Lng = "10.742786" });
               points.Add(new LatLng() { Lat = "59.946824", Lng = "10.744435" });
               points.Add(new LatLng() { Lat = "59.946813", Lng = "10.744446" });
               points.Add(new LatLng() { Lat = "59.947107", Lng = "10.748241" });
               points.Add(new LatLng() { Lat = "59.947827", Lng = "10.749525" });
               points.Add(new LatLng() { Lat = "59.948248", Lng = "10.750699" });



           }

此示例在地图上显示多边形。但我不确定如何从数据库中获取这个坐标以及如何在多个多边形时解决它。

正如我所写,我已经使用shape2Sql保存了数据库中的坐标。所以现在我有一个几何场。如果我查看sql server中的空间结果,这看起来是正确的。但是我如何在谷歌地图中显示这个?

我很感激所有的帮助:)。