SuperMap iServerJava 6R擴充領域開發及壓力測試—判斷點在那個面內(1)

來源:互聯網
上載者:User

今天突然給了個任務讓測試點在面內演算法,然後通過SuperMap iServerJava 6R發布出來並測試並發訪問效能。好久沒結果Java突然有點亂,鬍子眉毛一把抓,不過思路總算清晰起來了,記錄下來以備後需尋找吧。

測試總體思路

1、擴充領域開發開出點在面內REST介面。

(1)擴充Component。

擴充Componentpackage com.zhangwei.Extend;import java.util.List;import com.supermap.services.components.Component;import com.supermap.services.components.ComponentContext;import com.supermap.services.components.ComponentContextAware;import com.supermap.services.components.commontypes.Feature;import com.supermap.services.components.commontypes.Geometry;import com.supermap.services.components.spi.DataProvider;@Component(providerTypes={DataProvider.class}, optional=false, type = "")public class InWithComponent implements ComponentContextAware{//資料提供者    private DataProvider dataProvider = null;    /**     * 建構函式     */    public InWithComponent() {    }    /***     * 思路:     * 1、從資料集中查詢相應ID的資料,現在假設一個點,多個面對象。     * 2、判斷點是否在對象幾何中。     */    public Geometry inWithString(String datasourceNameR,String datasetNameR,int[] idsR,String datasourceNameP,String datasetNameP,int[] idsP) {    List<Feature> listFeatureListR = dataProvider.getFeature(datasourceNameR,datasetNameR,idsR,null);    List<Feature> listFeatureListP = dataProvider.getFeature(datasourceNameP,datasetNameP,idsP,null);    int geometryLength = listFeatureListR.size();        int i = 0;        //是否是結果標識        boolean flag = false;        while(i<geometryLength) {        if (Geometry.isPointInPolygon(listFeatureListP.get(0).geometry.points[0], listFeatureListR.get(i).geometry)) {        flag = true;                //System.out.println(flag+"");     } else {     flag = false;     }          i++;     }return listFeatureListR.get(i-1).geometry;}    /***     * 上下文     */    public void setComponentContext(ComponentContext context) {        List<Object> providers = context.getProviders(Object.class);        if(providers != null) {                        for(Object provider : providers) {                if(provider instanceof DataProvider) {                    this.dataProvider = (DataProvider)provider;                }            }        }    }}

(2)擴充服務介面,由於是測試,此處不用Restlet或者JAX-RS,此處為了類比資料傳輸對伺服器影響,所以直接加了參數解析及返回結果,其實只是測試之用。

擴充介面package com.zhangwei.Extend;import java.io.IOException;import java.io.PrintWriter;import java.util.List;import java.util.Random;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.supermap.services.Interface;import com.supermap.services.InterfaceContext;import com.supermap.services.InterfaceContextAware;import com.supermap.services.components.commontypes.Geometry;@Interface(componentTypes = { InWithComponent.class }, optional = false, multiple = false)public class ISWithInServlet extends HttpServlet implements InterfaceContextAware{private static final long serialVersionUID = 1L;private InWithComponent inWithComponent = null;private String id = null;public ISWithInServlet() {this.id = String.valueOf(System.currentTimeMillis());    }    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {        PrintWriter out;        response.setContentType("text/html;charset=UTF-8");        response.setCharacterEncoding("UTF-8");        request.getParameter("in").toString();        out = response.getWriter();        int[] idsR = new int[2];idsR[0] = generateRandom(1,72);idsR[1] = generateRandom(1,72);int[] idsP = new int[1];idsP[0] = generateRandom(1,163);        Geometry geometry = inWithComponent.inWithString("World","Ocean",idsR,"World","Capitals",idsP);        out.print("[6390,,4883,4882,183,7136,7135,181,180,2987,651,,4578,4577]"+geometry.id);        out.close();    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        }    public void setInterfaceContext(InterfaceContext context) {     this.getServletContext().setAttribute(this.id + "InterfaceContext", context);         List<Object> components = context.getComponents(Object.class);         if (components != null) {             for (Object component : components) {                 if (component instanceof InWithComponent) {                     this.inWithComponent = (InWithComponent) component;                     break;                 }             }         }    }       /**     * java中如何擷取某個範圍內的隨機數      * @param a     * @param b     * @return      */    public static int generateRandom(int a, int b) {        int temp = 0;        try {            if (a > b) {                temp = new Random().nextInt(a - b);                return temp + b;            } else {                temp = new Random().nextInt(b - a);                return temp + a;            }        } catch (Exception e) {            e.printStackTrace();        }        return temp + a;    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.