2009-09-05 20 views
8

का उपयोग करके अनियमित सांद्रिक मंडलियों को चित्रित करना मुझे कुछ समस्या है। मैं जावास्क्रिप्ट & गूगल मैप्स एपीआई v2 का उपयोग कर निम्न करने के लिए कोशिश कर रहा हूँ:Google मानचित्र

myhurricane.net - Wind Radii Profile

मैं अलग-अलग मंडलियों सिर्फ सूत्रों ठीक का उपयोग कर इंटरनेट पर पाया आकर्षित कर सकते हैं। अर्थात

ए गाढ़ा हो जाओ, और बी प्रत्येक "वृत्त का चतुर्थ भाग" के लिए अलग त्रिज्या होना चाहिए, पूर्वोत्तर, एनडब्ल्यू, एसई & दप

मैंने: समस्या का सामना करना पड़ रहा है कि हलकों चाहिए है लगभग हर जगह खोज की गई मैं इंटरनेट पर सोच सकता हूं, और यह कैसे करना है इस पर कोई रास्ता नहीं आया है। स्पष्ट रूप से किसी ने पहले यह किया है, और इस प्रकार मैं प्रोग्रामर के मंच में क्यों पूछ रहा हूं। :)

धन्यवाद!

अद्यतन: मैंने निम्नलिखित कोड का उपयोग करके तैयार किया है, जो मुझे लगता है कि प्रत्येक बिंदु के लिए निर्देशांक होंगे। नीचे ड्राइंग के लिए:

snapshot-1252125257.781397

यह निम्न जे एस का उपयोग कर प्राप्त किया गया था:

http://gist.github.com/181290

नोट: यह जावास्क्रिप्ट (थोड़ा संशोधित) निम्न साइट, जो और अधिक पकड़ सकता से है एल्गोरिदम क्या हो सकता है इसके संदर्भ में जवाब: http://www.movable-type.co.uk/scripts/latlong.html

अद्यतन 2: मैं Google मानचित्र में यह प्राप्त करने में सक्षम था:

Concentric Circles Progress

निम्नलिखित कोड का उपयोग कर निर्मित:

var NEQ = [0, 90]; 
var SEQ = [90, 180]; 
var SWQ = [180, 270]; 
var NWQ = [270, 0]; 

// var centrePoint = new LatLon(25.0, -83.1); 
// pointsForWindQuadrant(NEQ, centrePoint, 50); 
function pointsForWindQuadrant(quadrantDegrees, centrePoint, radius){ 
    var points = []; 

    // Points must be pushed into the array in order 
    points.push(new google.maps.LatLng(centrePoint.lat, centrePoint.lon)); 

    for(i = quadrantDegrees[0]; i <= quadrantDegrees[1]; i++){ 
    var point = centrePoint.destPoint(i, radius * 1.85); 
    points.push(new google.maps.LatLng(point.lat, point.lon)); // Radius should be in nautical miles from NHC 
    } 

    points.push(new google.maps.LatLng(centrePoint.lat, centrePoint.lon)); 

    return points; 
} 

अद्यतन 3: मैं शायद यह भी कहना चाहिए कि यह एक के लिए है भौगोलिक समन्वय प्रणाली (क्योंकि यह पूरी बात उष्णकटिबंधीय चक्रवात पवन त्रिज्या के लिए है), कार्टेसियन समन्वय प्रणाली नहीं। धन्यवाद!

+0

आप फसल हलकों बनाने की योजना बना रहे हैं? – Shizzmo

+0

नहीं, तूफान की तरह दिखता है। –

+0

हां, उष्णकटिबंधीय चक्रवात के लिए, फसल सर्किल नहीं। ;) –

उत्तर

4

मैंने इसे समझ लिया। अंतिम कोड यहाँ है। शायद इसे थोड़ा सा रिफैक्टर किया जा सकता है?

// Returns points for a wind field for a cyclone. Requires 
// a LatLon centre point, and an array of wind radii, starting 
// from the northeast quadrant (NEQ), i.e., [200, 200, 150, 175] 
// 
// Returns points to be used in a GPolyline object. 
function pointsForWindQuadrant(centrePoint, radii){ 
    if(radii.length != 4){ return false; } 

    var points = []; 
    var angles = [0, 90, 180, 270]; 

    // For each angle 0, 90, 180, 270... 
    for(a = 0; a < angles.length; a++){ 
    // For each individual angle within the range, create a point... 
    for(i = angles[a]; i <= angles[a] + 90; i++){ 
     var point = centrePoint.destPoint(i, radii[a] * 1.85); // Radius should be in nautical miles from NHC 
     points.push(new google.maps.LatLng(point.lat, point.lon)); 
    } 
    } 

    // Add the first point again, to be able to close the GPolyline 
    var point = centrePoint.destPoint(0, radii[0] * 1.85); 
    points.push(new google.maps.LatLng(point.lat, point.lon)); 

    return points; 
} 

यह निम्नलिखित में परिणाम:

New myhurricane.net - Wind Radii (Map View) New myhurricane.net - Wind Radii (Satellite View)

6

मूल रूप से, एक्स, वाई = (कोस (ए), पाप (ए)) के रूप में सर्कल की गणना करें, और उसके बाद कोण के उचित कार्य वाले त्रिज्या द्वारा यह एकाधिक (दोनों शर्तें) की गणना करें। मैं जावास्क्रिप्ट को अच्छी तरह से नहीं जानता, या Google मानचित्र, इसलिए मैं इसे पायथन में करूँगा, उम्मीद है कि यह इससे स्पष्ट है।

from pylab import * 

def Rscale(a): 
    if a>3*pi/2: # lower right, and then work CW around the circle 
     return 1. 
    elif a>pi: # lower left 
     return .9 
    elif a>pi/2: # upper left 
     return .8 
    else:  # upper right 
     return 1. 

def step_circle(R): 
    return array([(R*Rscale(a))*array([cos(a), sin(a)]) for a in arange(0, 2*pi, .001)]) 

for R in (.5, .7, .9): # make three concentric circles 
    c = step_circle(R) 
    plot(c[:,0], c[:,1]) 

show() 

कौन देता है alt text http://i25.tinypic.com/2w6gxeg.png

मैं वास्तव में अपने संक्षिप्त वर्णन का पालन नहीं कर सकता है, तो मैं सिर्फ संख्या में अनुमान लगाया। इसके अलावा, मैंने दो सही क्वाड्रंट्स को वही बना दिया क्योंकि आपकी साजिश कैसी दिखती है, लेकिन यह निश्चित रूप से वैकल्पिक है।

+0

यह ** दिखता है ** जैसे यह सही जवाब हो सकता है, लेकिन मैं तब तक सुनिश्चित नहीं हो सकता जब तक कि मुझे पता न हो कि मैं सही ढंग से अनुवाद कर सकता हूं। जेएस और Google मैप्स एपीआई अनुभव वाले किसी भी व्यक्ति का अनुवाद करने में मदद करने के लिए देखभाल? –