`
windhello
  • 浏览: 7168 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
收藏列表
标题 标签 来源
规则引擎技术 规则引擎 一个小学题目的解: 采用规则引擎Drools实现
package org.drools.examples;

import java.io.InputStreamReader;
import java.io.Reader;

import org.drools.FactHandle;
import org.drools.RuleBase;
import org.drools.RuleBaseFactory;
import org.drools.StatefulSession;
import org.drools.WorkingMemory;
import org.drools.compiler.PackageBuilder;
import org.drools.rule.Package;

public class SodaWater
{
    public static final void main(String[] args) throws Exception {
        final PackageBuilder builder = new PackageBuilder();
        builder.addPackageFromDrl( new InputStreamReader( SodaWater.class.getResourceAsStream( "SodaWater.drl" ) ) );

        final RuleBase ruleBase = RuleBaseFactory.newRuleBase();
        ruleBase.addPackage( builder.getPackage() );

        final StatefulSession session = ruleBase.newStatefulSession();

        Customer customer = new Customer( "XiaoMing", 50);
        session.insert(customer);
        session.fireAllRules();
    }
   
    public static class Customer
    {
        private String name;
       
        private int money;
       
        private int drinkSum;
       
        private int blankCup;
       
        public Customer(String name, int money)
        {
            this.name = name;
            this.money = money;
            this.drinkSum = 0;
            this.blankCup = 0;
        }       

        public int getMoney()
        {
            return money;
        }
       
        public void setMoney(int money)
        {
            this.money = money;
        }
       
        public int getBlankCup()
        {
            return blankCup;
        }

        public void setBlankCup(int blankCup)
        {
            this.blankCup = blankCup;
        }

        public int getDrinkSum()
        {
            return drinkSum;
        }

        public void setDrinkSum(int drinkSum)
        {
            this.drinkSum = drinkSum;
        }

        public String getName()
        {
            return name;
        }

        public void setName(String name)
        {
            this.name = name;
        }      
       
    }
}
wms 服务 wms ogc http://docs.geoserver.org/2.0.0/user/services/wms/vendor.html
(1) 查询过滤器
标准ogc  相切 Intersects  点坐标
filter=%3CFilter%20xmlns:gml=%22http://www.opengis.net/gml%22%3E%3CIntersects%3E%3CPropertyName%3Ethe_geom%3C/PropertyName%3E%3Cgml:Point%20srsName=%224326%22%3E%3Cgml:coordinates%3E-74.817265,40.5296504%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E

cql_filter=INTERSECT(the_geom,%20POINT%20(-74.817265%2040.5296504))


(2) 查看图例
矢量图例
http://localhost:8080/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=topp:states

栅格图例
http://localhost:8081/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=100&HEIGHT=20&LAYER=it.geosolutions:di08031_da&LEGEND_OPTIONS=forceRule:True;dx:0.2;dy:0.2;mx:0.2;my:0.2;fontStyle:bold;borderColor:0000ff;border:true;fontColor:ff0000;fontSize:18
wfs 地图属性查询 wfs ogc WFS vendor parameters¶
(1)  ogc 过滤器查询
filter=%3CFilter%20xmlns:gml=%22http://www.opengis.net/gml%22%3E%3CIntersects%3E%3CPropertyName%3Ethe_geom%3C/PropertyName%3E%3Cgml:Point%20srsName=%224326%22%3E%3Cgml:coordinates%3E-74.817265,40.5296504%3C/gml:coordinates%3E%3C/gml:Point%3E%3C/Intersects%3E%3C/Filter%3E

CQL 查询
cql_filter=INTERSECT(the_geom,%20POINT%20(-74.817265%2040.5296504))

post 查询
<wfs:GetFeature service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs">
   <Query typeName="topp:states"/>
</wfs:GetFeature>

strict=true
<wfs:GetFeature service="WFS" version="1.0.0" xmlns:wfs="http://www.opengis.net/wfs" xmlns:topp="http://www.openplans.org/topp">
   <wfs:Query typeName="topp:states"/>
</wfs:GetFeature>

 
(3) wfs 浏览器中数据
Using a GET request (standard HTTP):

http://www.example.com/wfs?
service=wfs&
version=1.1.0&
request=GetCapabilities

The equivalent using POST:
<GetCapabilities
service="WFS"
xmlns="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"/>

http://www.example.com/wfs?
   service=wfs&
   version=1.1.0&
   request=GetFeature&
   typeName=namespace:featuretype&
   featureID=feature id值

   typeName=namespace:featuretype& 涂层
   maxFeatures=N 限制数量

http://www.example.com/wfs?
   service=wfs&
   version=1.1.0&
   request=GetFeature&
   typeName=namespace:featuretype&
   maxFeatures=N&
   sortBy=property 排序

typeName=namespace:featuretype&
   maxFeatures=N&
   sortBy=property+D 

typeName=namespace:featuretype&
   featureID=feature&
   propertyName=property  限制

typeName=namespace:featuretype&
featureID=feature&
   propertyName=property1,property2

typeName=namespace:featuretype&
   bbox=a1,b1,a2,b2 范围
测试用例2_postgis 数据库检索与创建
(1)看版本
SELECT postgis_full_version();
(2) 导入数据
> shp2pgsql -s 2270 -D jacksonco_schools.shp jacksonco_schools > jacksonco_schools.sql
> psql -f jacksonco_schools.sql workshop
(3) 创建数据表
CREATE TABLE points (name varchar, point geometry);

INSERT INTO points VALUES ('Origin', 'POINT(0 0)'),
  ('North', 'POINT(0 1)'),
  ('East', 'POINT(1 0)'),
  ('West', 'POINT(-1 0)'),
  ('South', 'POINT(0 -1)');

SELECT name, ST_AsText(point) FROM points;

(4)插入线段
INSERT INTO points VALUES
  ('Not a point', 'LINESTRING(1 1, -1 -1)'),
  ('3d point', 'POINT(0 0 3)'),
  ('WGS84 point', ST_SetSRID('POINT(0 1)', 4326));
(5) 检索
SELECT grade, category, type, name, students, ST_AsText(the_geom)
  FROM jacksonco_schools
  LIMIT 1;

(6) 3d 数据
Here are examples of a 3D linestring (in both WKT and WKB):

SELECT ST_AsEWKT(ST_GeometryFromText('LINESTRING(0 0 0,1 0 0,1 1 2)'));
(7) 测量数据
SELECT ST_Length(ST_GeomFromText('LINESTRING(0 0,5 0,5 10)'));

SELECT ST_Length(ST_GeomFromEWKT('LINESTRING(0 0 0,5 0 3,5 10 5)'));

SELECT ST_Length3D(ST_GeomFromEWKT('LINESTRING(0 0 0,5 0 3,5 10 5)'));

(8 ) 带坐标的测量
SELECT
  ST_Length2D_Spheroid(g, 'SPHEROID["GRS 1980",6378137,298.257222101]'),
  ST_Length3D_Spheroid(g, 'SPHEROID["GRS 1980",6378137,298.257222101]')
FROM (
  VALUES (
    ST_GeomFromEWKT('LINESTRING(151.1205 -33.7145 22,151.1218 -33.7087 54)')
  ) ) AS query(g);

(9) 测周长
SELECT ST_Perimeter(ST_GeomFromEWKT(g))
  FROM (
    VALUES
      ('POLYGON((-2 -2 0,2 -2 1,2 2 2,-2 2 1,-2 -2 0))'),
      ('POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2),(1 1,-1 1,-1 -1,1 -1,1 1))')
   ) AS query(g);
(10) 测外周长
SELECT
  ST_Length(
    ST_ExteriorRing(
      ST_GeomFromEWKT(
        'POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2),(1 1,-1 1,-1 -1,1 -1,1 1))'
      )
    )
  );
(11) 测面积
SELECT ST_Area(ST_GeomFromEWKT(g))
  FROM (
    VALUES
      ('POLYGON((-2 -2 0,2 -2 1,2 2 2,-2 2 1,-2 -2 0))'),
      ('POLYGON((-2 -2,2 -2,2 2,-2 2,-2 -2),(1 1,-1 1,-1 -1,1 -1,1 1))')
     ) AS query(g);
(13) 测距离
SELECT ST_Distance(ST_GeomFromEWKT('POINT(0 5)'),
  ST_GeomFromEWKT('LINESTRING(-2 2,2 2)'));

SELECT
  ST_Distance_Sphere(a, b),
  ST_Distance_Spheroid(a, b, 'SPHEROID["GRS 1980",6378137,298.257222101]')
FROM (
  VALUES (
    ST_GeomFromText('POINT(151.1205 -33.7145)'),
    ST_GeomFromText('POINT(151.1218 -33.7087)')
    ) ) AS query (a, b);
(14) 测缓冲区 包含
SELECT namelow
  FROM jacksonco_streets, medford_parks
  WHERE ST_Distance(medford_parks.the_geom,
    jacksonco_streets.the_geom) < 5000 / 0.3048
  AND medford_parks.name = 'Hawthorne Park / Pool';

SELECT namelow
  FROM jacksonco_streets, medford_parks
  WHERE ST_DWithin(medford_parks.the_geom,
    jacksonco_streets.the_geom, 5000 / 0.3048)
  AND medford_parks.name = 'Hawthorne Park / Pool';


(15)


测试用例1_(控制台输出,openlayers控件创建) 控制台输出, openlayers控件创建
(1)1测试用例
public class qwe {

public static final void main(String[] args){
  
  System.out.println("系统测试 1");
 } 
 
}

(2) openlayers 控件加载


基本思路:先创建地图map,然后添加图层layer,在添加控件control,以及增添属性feature,最后是增加事件event等其他业务逻辑。
map = new OpenLayers.Map('map'); //创建地图对象
//加载一个WMS图层

var layer = new OpenLayers.Layer.WMS( "基础图层", 

"http://localhost:8080/geoserver/wms ", {layers: 'topp:basic'} ); map.addLayer(layer);




//加载一个Vector图层

vlayer = new OpenLayers.Layer.Vector( "自定义图层" );

map.addLayer(vlayer);

  

//设置中心     

map.setCenter(new OpenLayers.LonLat(lon, lat), zoom);




//设置坐标显示的位置

var MPosition = new OpenLayers.Control.MousePosition({

div: document.getElementById("MousePosition-id")});

map.addControl(MPosition);




// 加载多个控件

map.addControl(new OpenLayers.Control.ScaleLine());

map.addControl(new OpenLayers.Control.MouseToolbar());

map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));

map.addControl(new OpenLayers.Control.OverviewMap());

map.addControl(new OpenLayers.Control.EditingToolbar(vlayer));

map.addControl(new OpenLayers.Control.KeyboardDefaults());

map.addControl(new OpenLayers.Control.Permalink('permalink'));

OpenLayers调用geoserver地图html文件 openlayers Notepad++
Sample Code from the example map:





<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>M.Ballinger's Final Project for Geog 585</title>
    
    <link rel="stylesheet" href="theme/default/style.css" type="text/css" />
    
    <style type="text/css">
        
        #map { 'sets up the size of the map
                width: 700;
                height: 500px;
                border: 1px solid black;
            }
            #wrapper { 'sets up the frame about the map
                width: 700px;
            }
            #location { 'places the map
                float: right;
            }
            #scale { 'places where the scale will be viewed
                float: left
            }
            #legend{ 'places the legend
              float:right;
              font: caption;
            }
            #legend.td{
              font: caption;
              size: 50%;
            }        
    </style>
  </head>
            
 <script src="lib/Firebug/firebug.js"></script>
    <script src="OpenLayers.js"></script>
    <script type="text/javascript">

    var map;
    var areawater, untiled;
         function setHTML(response) { 
            document.getElementById('nodelist').innerHTML = response.responseText;
        };
        
        OpenLayers.IMAGE_RELOAD_ATTEMPTS = 5;
        OpenLayers.DOTS_PER_INCH = 25.4 / 0.28;


        function init(){
            var bounds = new OpenLayers.Bounds(
                -94.608235, 38.83599399907819,
                -94.104823, 39.23710699907548
            );
            var options = {
                controls: [],
                maxExtent: bounds,
                maxResolution: 0.025439315679878505,
                projection: "EPSG:4269",
                units: 'degrees'
            };
            map = new OpenLayers.Map('map', options);

'below lists the different feature layers with important information like projection, turning it on, format, name of file and location
            areawater = new OpenLayers.Layer.WMS(
                "topp:tl_2008_29095_areawater", "http://webmapping.mgis.psu.edu/geoserver/wms",
                {
                    width: '800',
                    srs: 'EPSG:4269',
                    layers: 'topp:tl_2008_29095_areawater',
                    height: '312',
                    styles: '',
                    transparent: "true",
                    format: 'image/png'
                },
                {isBaseLayer: true,singleTile: true, ratio: 1} 
            );    
            
            cities = new OpenLayers.Layer.WMS(
                "topp:Cities", "http://webmapping.mgis.psu.edu/geoserver/wms",
                {
                width: '800',
                srs: 'EPSG:4269',
                layers: 'topp:mCities',
                height: '312',
                styles: 'mCity',
                transparent: "true",
                format: 'image/png'
                },
                {isBaseLayer: false,singleTile: true, ratio: 1}
                );    
                
            local = new OpenLayers.Layer.WMS(
                "topp:local", "http://webmapping.mgis.psu.edu/geoserver/wms",
                {
                width: '800',
                srs: 'EPSG:4269',
                layers: 'topp:local',
                height: '312',
                styles: '',
                transparent: "true",
                format: 'image/png'
                },
                {isBaseLayer: false,singleTile: true, ratio: 1}
                );
                        
            majorroads = new OpenLayers.Layer.WMS(
                "topp:MajorRoads", "http://webmapping.mgis.psu.edu/geoserver/wms",
                {
                width: '800',
                srs: 'EPSG:4269',
                layers: 'MajorRoads',
                height: '312',
                styles: '',
                transparent: "true",
                format: 'image/png'
                },
                {isBaseLayer: false,singleTile: true, ratio: 1}
                );
                
            minorstreets = new OpenLayers.Layer.WMS(
                "topp:MinorStreets", "http://webmapping.mgis.psu.edu/geoserver/wms",
                {
                width: '800',
                srs: 'EPSG:4269',
                layers: 'MinorStreets',
                height: '312',
                styles: '',
                transparent: "true",
                format: 'image/png'
                },
                {isBaseLayer: false,singleTile: true, ratio: 1}
                );
                
                
        map.addLayers([areawater, local, cities, majorroads, minorstreets]); 'adds the different feature layers 

        // setup controls and initial zooms 'this is the different control functions for the face map           
           map.addControl(new OpenLayers.Control.PanZoomBar());
           map.addControl(new OpenLayers.Control.Navigation());
           map.addControl(new OpenLayers.Control.Scale($('scale')));
           map.addControl(new OpenLayers.Control.MousePosition({element: $('location')}));
           map.addControl(new OpenLayers.Control.LayerSwitcher());
           //map.addControl(new OpenLayers.Control.OverviewMap());
           map.zoomToExtent(bounds);
        
        // support GetFeatureInfo 'this the webmap's query function
            map.events.register('click', map, function (e) {
                document.getElementById('nodelist').innerHTML = "Loading... please wait...";
                var url =  map.layers[2].getFullRequestString(
                    {
                        REQUEST: "GetFeatureInfo",
                        EXCEPTIONS: "application/vnd.ogc.se_xml",
                        BBOX: map.getExtent().toBBOX(),
                        X: e.xy.x,
                        Y: e.xy.y,
                        INFO_FORMAT: 'text/html',
                        QUERY_LAYERS: [map.layers[1].params.LAYERS,map.layers[2].params.LAYERS,map.layers[3].params.LAYERS,map.layers[4].params.LAYERS],
                        FEATURE_COUNT: 50,
                        WIDTH: map.size.w,
                        HEIGHT: map.size.h
                    },
                    
                    "http://webmapping.mgis.psu.edu/geoserver/wms"
                );
                OpenLayers.loadURL(url, '', this, setHTML, setHTML);
                OpenLayers.Event.stop(e);
            });
        }
        </script>
  </head>
  
  <body onload="init()">

        <a href="BuyLocal.html" target="popup1"
        onClick="wopen3('BuyLocal.html', 'popup1', 849, 824); return false;">Buy Local Project Overview</a><br />

        <div id="legend"> 'this is the set up for the legend
        <table>
        <tr><td><img src="http://webmapping.mgis.psu.edu/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=topp:local"></td><td>Breweries<br>Farmers' Market</td></tr>
        <tr><td><img src="http://webmapping.mgis.psu.edu/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=topp:mCities&styles=mCity"></td><td>Cities</td></tr>
        <tr><td><img src="http://webmapping.mgis.psu.edu/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=topp:MajorRoads"> </td><td>Major Road</td></tr>
        <tr><td><img src="http://webmapping.mgis.psu.edu/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=topp:MinorStreets"> </td><td>Minor Road</td></tr>
        <tr><td><img src="http://webmapping.mgis.psu.edu/geoserver/wms?REQUEST=GetLegendGraphic&VERSION=1.0.0&FORMAT=image/png&WIDTH=20&HEIGHT=20&LAYER=topp:tl_2008_29095_areawater"></td><td>Area Water</td></tr>
        
        </table></div>
  
      <h1 id="title">Buy Local in Jackson County, MO</h1> 'title block

      <div id="tags"></div>

      <p id="shortdesc">
        A guide to buying local for farmers' markets and local breweries in Jackson County, MO.
      </p> 'short description at the below the title
      
        <div id="map"></div>
        <div id="wrapper">
            <div id="location"></div>
            <div id="scale"></div>
        </div>
        <div id="nodelist">Click on the map to get feature info</div>


    </body>

</html>
简单的通过Ajax实现的单表地名搜索 单表地名搜索 简单的通过Ajax实现的单表地名搜索
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <title>OpenLayers map preview</title> 
        <!-- Import OL CSS, auto import does not work with our minified OL.js build --> 
        <link rel="stylesheet" type="text/css" 
href="http://localhost:8080/geoserver/openlayers/theme/default/style.css"/> 
       <style type="text/css"> 
            #map { 
                width: 512px; 
                height: 512px; 
                border: 1px solid black; 
            } 
        </style> 
        <!-- Import OpenLayers, reduced, wms read only version --> 
        <script src="http://localhost:8080/geoserver/openlayers/OpenLayers.js" 
type="text/javascript"> 
        </script> 
        <script defer="defer" type="text/javascript"> 
            var map; 
            var untiled; 
            var tiled; 
            var pureCoverage = false; 
            var lonlat; 
     var xmlhttp; 
     var style_blue; 
     var vectorLayer; 
     var markers; 
           var confirmpoint; 
           var html; 
           
           
            function init(){                           
                var bounds = new OpenLayers.Bounds( 
                    -74.01239624023441, 40.702338981628465, 
                    -74.00000915527339, 40.72072238922124 
                ); 
                var options = { 
                    controls: [], 
                    maxExtent: bounds, 
                    maxResolution: 0.0000718101859093, 
                    projection: "EPSG:4326", 
                    units: 'degrees' 
                }; 
                map = new OpenLayers.Map('map', options); 
             
       
                // setup single tiled layer 
                untiled = new OpenLayers.Layer.WMS( 
                    "Geoserver layers - Untiled", "http://localhost:8080/geoserver/wms", 
                    { 
                        width: '421', 
                        srs: 'EPSG:4326', 
                        styles: '', 
                        height: '550', 
                        layers: 
'tiger:giant_polygon,tiger:poly_landmarks,tiger:tiger_roads,huangc:poi', 
                        format: 'image/png' 
                    }, 
                    {singleTile: true, ratio: 1} 
                ); 
                map.addLayers([untiled]); 
   
   
        vectorLayer = new OpenLayers.Layer.Vector("Points"); 

   map.addLayers([vectorLayer]); 


    var layer_style = OpenLayers.Util.extend({}, OpenLayers.Feature.Vector.style['default']); 
            layer_style.fillOpacity= 0.2; 
            layer_style.graphicOpacity = 0.3; 

     /* 
             * 蓝色的样式属性 
             */ 
            style_blue = OpenLayers.Util.extend({}, layer_style); 
            style_blue.strokeColor = "blue"; 
            style_blue.fillColor = "blue"; 
            style_blue.graphicName = "star"; 
            style_blue.pointRadius = 5; 
            style_blue.strokeWidth = 3; 
            style_blue.rotation = 45; 
            style_blue.strokeLinecap = "butt"; 

                // build up all controls             
                map.addControl(new OpenLayers.Control.PanZoomBar({ 
                    position: new OpenLayers.Pixel(2, 15) 
                })); 
                map.addControl(new OpenLayers.Control.Navigation()); 
                map.addControl(new OpenLayers.Control.Scale($('scale'))); 
                map.addControl(new OpenLayers.Control.MousePosition({element: 
$('location')})); 
map.addControl(new OpenLayers.Control.LayerSwitcher()); 
                map.zoomToExtent(bounds); 
                 
                 
      //添加一个vector层到地图中去,用来进行操作 
      //var vectorLayer = new OpenLayers.Layer.Vector(); 
        markers = new OpenLayers.Layer.Markers(); 
map.addLayers([markers]); 

map.events.register('click', map, function (e) { 
      lonlat = map.getLonLatFromPixel(e.xy); 
                    commit(); 
                }); 


            } 
             
             
               function commit() 
   { 
    URL = "http://localhost:8080/geoserver/wfs"; 
    XML = makeXML(); 


      getXML(URL,XML,XMLProgressFunction); 

   } 

   function makeXML() 
   { 
    var formElement = document.getElementsByName("hello")[0]; 

    var name = formElement.elements[0].value; 

    XML = '<?xml version="1.0" encoding="UTF-8"?>'+"\n"; 
    XML += '<wfs:GetFeature service="WFS" version="1.0.0"'+"\n"; 
    XML += ' outputFormat="GML2"'+"\n"; 
    XML += ' xmlns:huangc="http://localhost:8080/geoserver"'+"\n"; 
    XML += ' xmlns:wfs="http://www.opengis.net/wfs"'+"\n"; 
    XML += ' xmlns:ogc="http://www.opengis.net/ogc"'+"\n"; 
    XML += ' xmlns:gml="http://www.opengis.net/gml"'+"\n"; 
    XML += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+"\n"; 
    XML += ' xsi:schemaLocation="http://www.opengis.net/wfs [url]http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd[/url]"'+"\n"; 
    XML += '>'+"\n"; 
    XML += ' <wfs:Query typeName="huangc:poi">'+"\n"; 
    XML += '      <ogc:Filter>'+"\n"; 
    XML += '      <ogc:PropertyIsLike wildCard="*" singleChar="#" escapeChar="!">'+"\n"; 
    XML += '        <ogc:PropertyName>huangc:name</ogc:PropertyName>'+"\n"; 
    XML += '             <ogc:Literal>'+"\n"; 
    XML += '*'+name+'*'+"\n"; 
    XML += '        </ogc:Literal>'+"\n"; 
    XML += '       </ogc:PropertyIsLike>'+"\n"; 
    XML += '        </ogc:Filter>'+"\n"; 
    XML += '      </wfs:Query>'+"\n"; 
    XML += '    </wfs:GetFeature>'+"\n"; 
   
   
    return XML; 
   } 

     function getXML(url,post,procfunction) 
   { 
    try { 
     if (!(window.XMLHttpRequest)) 
     { 
      //ie 
      xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      xmlhttp.onreadystatechange = procfunction; 
      xmlhttp.open("POST", url, true); 
      xmlhttp.send(post); 
     } 
     else 
     { 
      // everyone else 

       xmlhttp = new XMLHttpRequest(); 
       xmlhttp.onreadystatechange = procfunction; 
       xmlhttp.open("POST", url, true); 
       xmlhttp.send(post); 
     } 
    } 
    catch(e) 
    { 
     alert(e); 
     alert("you have got a error!"); 
    } 
   } 
       
//进行请求后返回xml的解析       
    function XMLProgressFunction() 
    { 
     if ( (xmlhttp.readyState == 4) && (xmlhttp.status == 200) ) 
     { 
     //var response = xmlhttp.responseText; 
     //var g = new OpenLayers.Format.GML(); 
     //var points = g.read(response); 
     //for(var feat in point1) 
      //alert(response); 
     var g = new OpenLayers.Format.GML(); 
     html = "" 
     var features = g.read(xmlhttp.responseText); 
     if(features != null) 
      { 
       for(var feat in features) 
       { 
       
         var lon = features[feat].geometry.x; 
       var lat = features[feat].geometry.y; 
       html += "<ul>"; 
         for (var j in features[feat].attributes) 
         {                 
                     html += "<li>"; 
                     confirmpoint = features[feat].attributes[j] 
         html +="<a href='#' onclick=commitconfirm("+"'"+confirmpoint+"'"+");"+">"+confirmpoint+"</a>"; 
         //html += "<a href="javascript:commit();">"+features[feat].attributes[j]+"</a>"; 
                   } 
         html += "</ul>"; 
         var size = new OpenLayers.Size(30,54); 
         var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); 
         var icon = new OpenLayers.Icon("E:/tongfang/openlayers/OpenLayers-2.6/img/marker.png",size,offset); 
         var marker1 = new OpenLayers.Marker(new OpenLayers.LonLat(lon,lat),icon);       
         markers.addMarker(marker1); 
         map.setCenter(new OpenLayers.LonLat(lon,lat),4); 
         } 
       } 
      document.getElementById('output').innerHTML = html; 
        return true; 
     } 
    } 

    //点击链接之后,需要提交确定的查询函数 
    function commitconfirm(name) 
    { 
     
     URLq = "http://localhost:8080/geoserver/wfs"; 
     XMLq = makeXMLq(name); 
      getXML(URLq,XMLq,XMLProgressFunctionq); 
    } 
   
   
    //查询指定的点的坐标   
    function makeXMLq(name) 
    { 
     
     XML = '<?xml version="1.0" encoding="UTF-8"?>'+"\n"; 
     XML += '<wfs:GetFeature service="WFS" version="1.0.0"'+"\n"; 
     XML += ' outputFormat="GML2"'+"\n"; 
     XML += ' xmlns:huangc="http://localhost:8080/geoserver"'+"\n"; 
     XML += ' xmlns:wfs="http://www.opengis.net/wfs"'+"\n"; 
     XML += ' xmlns:ogc="http://www.opengis.net/ogc"'+"\n"; 
     XML += ' xmlns:gml="http://www.opengis.net/gml"'+"\n"; 
     XML += ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'+"\n"; 
     XML += ' xsi:schemaLocation="http://www.opengis.net/wfs [url]http://schemas.opengis.net/wfs/1.0.0/WFS-basic.xsd[/url]"'+"\n"; 
     XML += '>'+"\n"; 
     XML += ' <wfs:Query typeName="huangc:poi">'+"\n"; 
     XML += '      <ogc:Filter>'+"\n"; 
     XML += '      <ogc:PropertyIsEqualTo>'+"\n"; 
     XML += '        <ogc:PropertyName>huangc:name</ogc:PropertyName>'+"\n"; 
     XML += '             <ogc:Literal>'+"\n"; 
     XML += name+"\n"; 
     XML += '        </ogc:Literal>'+"\n"; 
     XML += '       </ogc:PropertyIsEqualTo>'+"\n"; 
     XML += '        </ogc:Filter>'+"\n"; 
     XML += '      </wfs:Query>'+"\n"; 
     XML += '    </wfs:GetFeature>'+"\n"; 
     
     return XML; 
    } 
   
   
    //返回得到的值后,将地图的中心进行一下移动 
    function XMLProgressFunctionq() 
    { 
     if ( (xmlhttp.readyState == 4) && (xmlhttp.status == 200) ) 
     { 
        var g = new OpenLayers.Format.GML(); 
        var features = g.read(xmlhttp.responseText); 
        if(features != null) 
      { 
       for(var feat in features) 
       { 
       
         var lon = features[feat].geometry.x; 
       var lat = features[feat].geometry.y; 
       var size = new OpenLayers.Size(30,54); 
       var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); 
       var icon = new OpenLayers.Icon("E:/tongfang/openlayers/OpenLayers-2.6/img/marker.png",size,offset); 
       var marker1 = new OpenLayers.Marker(new OpenLayers.LonLat(lon,lat),icon);       
         markers.addMarker(marker1);   
       map.setCenter(new OpenLayers.LonLat(lon,lat),4); 
        } 
      } 
        return true; 
     } 
    } 
        </script> 
    </head> 
    <body onload="init()"> 
        <form name = "hello"> 
               输入医院名: <input type="text" id="url" size="50" value="" /> 
               <input type="submit" onclick="commit(); return false;" value="查询"/> 
        </form> 
        <div id="map" align = left> 
            <img id="options" title="Toggle options toolbar" 
src="http://localhost:8080/geoserver/options.png"/> 
        </div> 
   <div id="output" align = right></div> 
       
    </body> 
</html> 
 


高斯浓度输入 高斯
package com.iee.GMServlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.iee.GaussianPara.GaussianPara;
/**
 * 用于控制数据的转发
 */
public class GMServlet_input extends HttpServlet {
	
	private static final long serialVersionUID = 5280356329609002908L;
	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		
		double sources2 = Double.valueOf(request.getParameter("sources"));	// 获取源强度
		double high2= Double.valueOf(request.getParameter("high"));// 	获取高度		
		double speedw2 = Double.valueOf(request.getParameter("speedw"));	// 获取风速
		String airsteady2 = request.getParameter("airsteady");	// 获取稳定度
		
		double xposition2 =  Double.parseDouble(request.getParameter("xposition"));	// 获取x
		double yposition2 = Double.valueOf(request.getParameter("yposition"));	// 获取y
		
	
		// 实例化高斯参数对象
		
				GaussianPara gmpara = new GaussianPara();		// 对用户对象中的属性赋值

				gmpara.setSources(sources2);		// 设置源强		
				gmpara.setHigh(high2);
				
				gmpara.setSpeedw(speedw2);
				gmpara.setAirsteady(airsteady2);
				gmpara.setXposition(xposition2);
				
				gmpara.setYposition(yposition2);
				
				
				//gmpara.setQy(airsteady2,xposition2);
				//gmpara.setQz(airsteady2,xposition2);
				
				//System.out.println("Qy值1:"+gmpara.getQy());
				//System.out.println("Qz值1:"+gmpara.getQz());
		
				//gmpara.CalCentration(gmpara.getXposition(), gmpara.getYposition(), gmpara.getSources(), gmpara.getHigh(), gmpara.getSpeedw() , gmpara.getAirsteady())	;
				gmpara.CalCentration(xposition2, yposition2, sources2, high2, speedw2 , airsteady2)	;
				System.out.println("浓度是:"+gmpara.CalCentration(xposition2, yposition2, sources2, high2, speedw2 , airsteady2));
				
				//进行数值的传递与转发
				//request.setAttribute("GPara3",gmpara );
				request.getSession().setAttribute("GPara3", gmpara );
				
				request.setAttribute("info", "开始计算浓度!<br>");
				request.getRequestDispatcher("result.jsp").forward(request, response);	
	}	
	}

高斯模型 高斯
package com.iee.GaussianPara;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.Stack;
import java.util.TreeMap;


/**
 * 高斯模型参数类  javabean  用于映射jsp数据
 */
public class GaussianPara2 {
	private double xposition;	//x坐标
	private double yposition;	//y坐标
	
	private double sources;	//源强mg/s
	private double high;	//有效高度 m
	private double speedw;	//风速 m/s
	private String airsteady;	//大气稳定度
	
	private double qy; // y标准差
	private double qz; // z标准差
	
	private double contration; // 目标浓度
	private double tcontration;// 目标浓度
	private double direction;//方向
	
	private String result;
	
public double getXposition() {
		return xposition;
	}

	public void setXposition(double xposition) {
		this.xposition = xposition;
	}

	

	public double getYposition() {
		return yposition;
	}

	public void setYposition(double yposition) {
		this.yposition = yposition;
	}

	public String getResult() {
		return result;
	}

	public void setResult(String result) {
		this.result = result;
	}

	public double getSources() {
		return sources;
	}

	public void setSources(double sources) {
		this.sources = sources;
	}

	public double getHigh() {
		return high;
	}

	public void setHigh(double high ) {
		this.high = high;
	}

	public double getSpeedw() {
		return speedw;
	}

	public void setSpeedw(double speedw) {
		this.speedw = speedw;
	}

	public String getAirsteady() {
		return airsteady;
	}

	public void setAirsteady(String airsteady) {
		this.airsteady = airsteady;
	}

	// 相关函数的 y z 的标准差
	public double getQy() {
		return qy;
	}

	//设置枚举值
	public double setQy(String airsteady1,double x) 
	{
		double a=0;
		 double r=0;
	
		if(airsteady1.equals("A")){
		
			  if (x<=1000)
			  {
			   a=0.901074;
			   r=0.425809;
			  }
			  else 
			  {
			   a=0.850934;
			   r=0.602052;
			  }
		}
			 
		else if(airsteady1.equals("B")){
			 if (x<=1000)
			  {
			    a=0.914370;
			    r=0.281846;
			  }
			   else 
			   {
			    a=0.865014;
			    r=0.396353;
			   }
		}
	
	return this.qy=(r*Math.pow(x, a));
			 
	}
	
	
	// 设置Z坐标的分布
	public double getQz() {
		return qz;
	}
	
	
	public double setQz(String airsteady2,double x) {
		double a=0;
		 double r=0;

		 if(airsteady2.equals("A")){
				  if( x<=300)
				  {
				   a=1.12154;
				   r=0.0799904;
				  }
				  else if  
				  (x>300 && x<=500)
				  {
				   a=1.51360;
				   r=0.00854771;
				  }
				  else 
				  {
				   a=2.10881;
				   r=0.000211545;
				  }
		 }
		 else if(airsteady2.equals("B")){
				   if (x<=500)
				   {
				    a=0.964435;
				    r=0.127190;
				   }
				   else {
				    a=1.09356;
				    r=0.057025;
				   }
		 }	
	return this.qz= (r*Math.pow(x, a));	
}

	

	public void setContration(double contration) {
		this.contration = contration;
	}

	public double getContration() {
		return contration;
	}
	
	
	public double CalCentration(double x,double y ,double Q,double H,double u,String airsteady3)
	{
		
		qy = setQy(airsteady3,x);
		qz= setQz(airsteady3,x);	
		
		contration = Math.exp(-y*y/(2*qy*qy))*Math.exp(-H*H/(2*(qz*qz)))*(Q/(Math.PI*u*qy*qz));

	return contration;
	}

	public double YPosition(String as,double x,double Q,double H,double u,double C)
	{
	 qy = setQy(as,x);
	 qz= setQz(as,x);
	
	double  yposition = Math.sqrt(Math.abs(((H*H)/(qz*qz)+2*Math.log((C*Math.PI*u*qy*qz)/Q))))*Math.abs(qy);
	 return yposition;
	}
	
	public void setTcontration(double tcontration) {
		this.tcontration = tcontration;
	}

	public double getTcontration() {
		return tcontration;
	}

	public void setDirection(double direction) {
		this.direction = direction;
	}

	public double getDirection() {
		return direction;
	}
	//
	//public   void  CreatePoint2(String as, double Q, double H, double u, double C,double direction,double x1,double y1,double x2,double y2)
	public  void  CreatePoint2(String as, double Q, double H, double u, double C,double x0,double y0,double direction)
	{ 
	double x1 = 0.001;// 坐标 轴  
	double y1=0.001;
	
	
	//List<Double> lt2 = new ArrayList<Double>();
	//List<Double> lt3 = new ArrayList<Double>();
	
	TreeMap<Double,Double> tm2 =new TreeMap<Double,Double>();
	TreeMap<Double,Double> tm3 =new TreeMap<Double,Double>();
	
	//先采用一 个小点的数字进行测试 3000
	for (x1=1;x1<300;x1++)
	{
		double C2 = CalCentration(x1, 0, Q, H, u,as);
		 
		y1 = YPosition(as,x1, Q, H, u,C);
		//lt2.add(x1) ;
	    //lt3.add(y1);
		//x1=0.144*Math.pow(x1,0.927);
		//y1=0.126*Math.pow(y1,0.839);
		
		 double angle = direction*Math.PI/180;
			
			double  x2= x0+ x1*Math.cos(angle) - y1*Math.sin(angle);
		    double  y2= x0+ x1*Math.sin(angle) + y1*Math.cos(angle);
		   tm2.put(x2,y2);
		     
		      
		   double  x3 = x0 + x1*Math.cos(angle) + y1*Math.sin(angle);
		     double  y3 = x0 + x1*Math.sin(angle) - y1*Math.cos(angle)	;
		    //System.out.println("y3值:"+y3);
		   
		     tm3.put(x3,y3);
		    
		
	    // if (x1>5000||y1>50000||y1< 1) //防止点集太多
		     if (y1< 1)
		   {
			   break   ;  
		   }
	     
	
	}
	
	
				String  result1="";
				  for (Object key: tm2.keySet())
				  {
					  //System.out.println("map1的值:"+i1 +","+tm2.get(i1)+"\n");
					  result1=result1+key+" "+tm2.get(key)+",";
				}
				  System.out.println("字符串1:"+result1);	
				  
			
				  
				  //倒序输出第二轮的x y 值
				  Set testset =tm3.keySet(); 
				  Stack s=new Stack();
				  String result2="";
				  java.util.Iterator iter = testset.iterator();
		         while ( iter.hasNext()) 
		          { 
		        	 Object x =  iter.next(); 
		        	 result2=x+" "+tm3.get(x)+",";
		              s.push(result2); 
		          } 
		         
		         String  result3="";
		         while(false==s.empty()){ 
		        	 
		        	 result3=result3 + s.pop();
		        	
		        	} 
		        // System.out.print("倒序后的值是:"+result3+"\n"); 
		         
		         //把对称轴2边的值进行相加
		         result=result1+result3;
		         
				  result=result.substring(0,result.length()-1);
				  
				  result=result.substring(0,result.length()-1);
				  //System.out.println("全部1:"+result);
				  result="LINESTRING("+result+")";
				  
				  System.out.println("全部2:"+result);	
				  
				 // System.out.println("第二次"+"("+x1+","+y1+")");		 
				  
	}
}
Global site tag (gtag.js) - Google Analytics