【问题标题】:Database instead of kml file数据库而不是 kml 文件
【发布时间】:2015-10-07 13:46:30
【问题描述】:

我想知道,是否可以将 db 连接到 google maps api 以呈现多边形、点等? 如果存储所有连接到多边形的 kml 坐标,是否可以在数据库中渲染它或者我是否需要创建一个 kml 文件来可视化它?

有例子吗?

谢谢!

【问题讨论】:

  • 你的问题太宽泛了。快速回答:是的,你可以。正如@JasonM1 下面建议的那样,您需要一个客户端-服务器解决方案才能查询您的数据库(服务器端)并在地图上呈现多边形(客户端)。

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


【解决方案1】:

使用 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 代码。

【讨论】:

    【解决方案2】:

    hmmm...我现在正在使用另一种解决方案(来自 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>
    

    结果为:

    【讨论】:

      【解决方案3】:

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

      我已经使用 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 中的空间结果,这看起来是正确的。但是我怎样才能在谷歌地图中显示呢?

      感谢大家的帮助:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        • 2010-11-12
        • 2017-07-23
        • 2012-11-13
        • 2012-01-23
        相关资源
        最近更新 更多