【问题标题】:Guidelines for the development of web Gis ApplicationWeb Gis 应用程序开发指南
【发布时间】:2013-07-24 05:24:16
【问题描述】:

尊敬的先生/妈妈

我想开发一个Webgis应用程序,想知道前进的正确道路,这样我才能顺利开始工作。我擅长.net、c#、jquery、HTML、Azax等。实际上我正在研究一个项目,其中数据已经预设在 shp 文件中,在 Arc-Gis 中数字化,在 sql server 中的一些数据。我很困惑如何开发一个应用程序来使用这些数据并在地图上显示

以下是一些需要讨论的问题。

  1. 如何将数据(存在于 shp 文件、sql Server 和 excel 中)与前端集成,以在 Map 中显示数据。
  2. 是否有任何我需要集成到项目中以在地图窗口中显示数据并且适合与 .net 集成的开放源代码。我可以在其中执行多种功能,例如放大、缩小、搜索等。
  3. 是否有任何中间件可以访问项目中 shp 文件中的数据。

休息一下,我会问什么时候我对此有信心,

我请求你帮助我。提前谢谢你。

【问题讨论】:

    标签: asp.net sql-server c#-4.0 web gis


    【解决方案1】:

    请参阅下面的一些想法来回答您的问题。

    1. 我认为集成最多数据源的方法可能是使用 OpenGeo Suit。这是一个开源软件堆栈,包括作为 WMS 源的 Geoserver 和作为前端客户端的 GXP 库和示例。可以在这里找到http://opengeo.org/

    2. 有许多开源项目可以提供帮助。我已经提到过 OpenGeo。还检查 开放层http://openlayers.org/
      GeoExt(无法发布链接,因为我还没有足够的声望点) 传单(无法发布链接,因为我还没有足够的声望点)

    3. Geoserver 是一个很好的解决方案,但您也可以结帐 地图服务器(无法发布链接,因为我还没有足够的声望点)

    总的来说,我会推荐 OpenGeo 的东西,因为它包括前端 JavaScript 库,包括 Openlayers 和 GeoExt,为您提供了很大的范围和灵活性。它还包括一些带有地理服务器的不错的后端东西,用于连接到多个数据源并集成安全性等。我已经取得了很大的成功。

    【讨论】:

      【解决方案2】:

      如您所愿,我也希望开发一个网络 gis 应用程序,并且可以使用 SVG 图形来完成它。 ArcGIS中的多边形数据和点数据转换成Asc格式文件如下:

      Polygon
      17671 0
      0 77.5946807861 11.9351053238 1.#QNAN 1.#QNAN
      1 77.5961227417 11.9347372055 1.#QNAN 1.#QNAN
      2 77.5976333618 11.9341630936 1.#QNAN 1.#QNAN
      3 77.5994033813 11.933801651 1.#QNAN 1.#QNAN
      

      上面的多边形将有 17671 个点。它们都只是点不:以空格分隔格式的经度纬度和一些我不考虑的额外内容。 同样点对象将以 Asc 格式文件导出,它看起来像

      Point
      0 77.5946807861 11.9351053238 1.#QNAN 1.#QNAN
      Point
      0 77.5961227417 11.9347372055 1.#QNAN 1.#QNAN
      

      。 我只是参考固定的纬度和对数将这些折线和点转换为整数值,并将它们转换为单独的 xml 文件。 点对象和多边形的属性复制并保存到 Excel 工作表中。然后我把它们做成一个简单的 ^ 分隔数据库。 然后我制作了我的 GIS 应用程序并发布在我的博客http://mksugumaran.blogspot.in/2014/04/svg-scalable-vector-graphics-in-web-page.html

      以上主网页view-source:http://www.nirt.in/xmlsvg.htm的源码为

      <html>
      <head>
      <title>Tamilnadu Rainfall data in GIS</title>
      <style>
      p.pos_fixed1
      {
      FONT: bold 14px Verdana, Arial, Helvetica, sans-serif;
      COLOR: #000066;
      position:fixed;
      top:30px;
      left:20px;
      z-index=10;
      }
      p.pos_fixed2
      {
      FONT: bold 14px Verdana, Arial, Helvetica, sans-serif;
      COLOR: #000066;
      position:fixed;
      top:45px;
      left:20px;
      z-index=10;
      }
      iframe.pos_fixed3
      {
      top:75px;
      left:0px;
      position:fixed;
      width:250px;
      height:300px;
      }
      </style>
      <script language="javascript">
      var aHexArray="0123456789ABCDEF";
      var LLXC=75.0;
      var LUYC=13.5833332538605;
      var CS=0.00083333333333333;
      var x1 = new Array();
      var y1 = new Array();
      var n1,ild;
      var i,j;
      var nx;
      function fnRandomDec(){
      var iMaxDec=256;
      var iRandDec=parseInt((iMaxDec*Math.random())-1);
      return iRandDec;
      }
      function fnReturnHex(iDecValue){
      return aHexArray.charAt((iDecValue>>4)&0xf)+aHexArray.charAt(iDecValue&0xf);
      }
      function fnRandColor(){
      return "#" + fnReturnHex(fnRandomDec()) + fnReturnHex(fnRandomDec()) + fnReturnHex(fnRandomDec());
      }
      
      function drawing(zx)
      {
      var txt1;
      txt1=""
      y=xmlDoc.getElementsByTagName("svg")[0].childNodes;
      //document.write(y.length-1);
      //document.write("<svg onclick=fnchange(); width='" + Math.round(6700/zx) + "' height='" + Math.round(6700/zx) + "'>");
      
      txt1= txt1 + "<svg style=z-index:2; width='" + Math.round(6700/zx) + "' height='" + Math.round(6700/zx) + "' xmlns:xlink='http://www.w3.org/1999/xlink'>";
      for (j=0;j<y.length;j++)
      {
      x=xmlDoc.getElementsByTagName("Polygon")[j].childNodes;
      //document.write(x.length-1);
      //document.write("<polygon points='");
      name=x[0].childNodes[0].nodeValue;
      txt1=txt1 + "<a xlink:title=" + name + " xlink:href='wdb4x.asp?dbname=tnrfs&2=xx'" + " target='xy1'>"
      txt1= txt1 + "<polygon points='";
      for (i=1;i<x.length;i++)
      {
        gxy=x[i].childNodes[0].nodeValue;
        n1=gxy.indexOf(",");
        x1[i]=gxy.substr(0,n1);
        y1[i]=gxy.substr(n1+1);
        txt1= txt1 +Math.round(x1[i]/zx)+','+Math.round(y1[i]/zx)+' '
      }
      
      txt1=txt1 +"' style='fill:" + fnRandColor() + ";stroke:black;stroke-width:1'></polygon></a>";
      }
      colr=fnRandColor();
      y=xmlDoc1.getElementsByTagName("svg")[0].childNodes;
      for (j=0;j<y.length;j++)
      {
      x=xmlDoc1.getElementsByTagName("point")[j].childNodes;
      name=x[0].childNodes[0].nodeValue;
      gxy=x[1].childNodes[0].nodeValue;
      n1=gxy.indexOf(",");
      xx1=gxy.substr(0,n1);
      yy1=gxy.substr(n1+1);
      str1=name + ':' + Math.abs(LUYC-yy1*CS) + ',' + Math.abs(LLXC+xx1*CS);
      txt1=txt1 + "<a xlink:title=" + str1 + " xlink:href='wdb4x.asp?dbname=tnrfs&2=" + name + "' target='xy1'"+"'>";
      
      txt1=txt1 + "<circle cx='" + Math.round(xx1/zx) +"' cy='" + Math.round(yy1/zx) + "' r='5' stroke='black' stroke-width='1' fill='"+ fnRandColor() +"'></circle></a>";
      }
      txt1=txt1 + "</svg>";
      scr1.innerHTML=txt1;
      }
      function position3(xx1,yy1)
      {
      xy1.style.top=Math.round(yy1/zx);
      xy1.style.left=Math.round(xx1/zx);
      }
      function fnchange()
      {
      nx=nx-1;
      if(nx==0)nx=1;
      drawing(nx);
      }
      function fnchange1()
      {
      nx=nx+1;
      if(nx>10)nx=10;
      drawing(nx);
      }
      
      function loadXMLDoc(dname)
      {
      if (window.XMLHttpRequest)
        {
        xhttp=new XMLHttpRequest();
        }
      else
        {
        xhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
      xhttp.open("GET",dname,false);
      xhttp.send();
      return xhttp.responseXML;
      }
      function loadXMLString(txt)
      {
      if (window.DOMParser)
        {
        parser=new DOMParser();
        xmlDoc=parser.parseFromString(txt,"text/xml");
        }
      else // Internet Explorer
        {
        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async=false;
        xmlDoc.loadXML(txt);
        }
      return xmlDoc;
      }
      xmlDoc=loadXMLDoc("tnbasins.xml");
      xmlDoc1=loadXMLDoc("tnrfl.xml");
      
      </script>
      </head>
      <body>
      
      <p class="pos_fixed1" onclick="fnchange1();">zoom_out</p>
      <p class="pos_fixed2" onclick="fnchange();">zoom_in</p>
      <iframe class="pos_fixed3" style=width:250;height:300;z-index:1; z-index=-1; name=xy1 border=none frameborder=none></iframe>
      <table><tr><td id=scr1></td></tr></table>
      <script language="javascript">
      if (xmlDoc && xmlDoc1)
      {
      nx=10;
      drawing(nx);
      }
      </SCRIPT>
      
      </body>
      </html>
      

      多边形xml文件在链接http://www.nirt.in/tnbasins.xml

      点对象xml文件在链接http://www.nirt.in/tnrfl.xml

      web gis应用的链接是http://www.nirt.in/xmlsvg.htm

      【讨论】:

        猜你喜欢
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-10
        相关资源
        最近更新 更多